Kiro Assistance를 활용한 최소 권한 아키텍처 구축
It looks like only the source citation was provided and there’s no additional text to translate. Could you please share the content you’d like translated into Korean?
저자
소개
AWS를 사용하여 최소 권한 아키텍처 원칙을 적용한 스택의 간단한 예제를 만들 수 있을까 고민하고 있었습니다. 실용적인 예시를 구상하면서 Kiro보다 더 좋은 것이 있을까요?
Kiro란?
Kiro는 AWS에서 개발한 AI 기반 어시스턴트로, 클라우드 아키텍처를 설계하면서 여러분이 논리적으로 사고하도록 도와줍니다. 단순히 코드를 작성하고 결과를 기대하는 것이 아니라, Kiro는 여러분과 함께 작업하면서 무엇을 하고 있는지, 왜 그렇게 하는지, 그리고 그것이 모범 사례 가이드라인을 따르는지 설명합니다.
Kiro에게 물어볼 수 있는 내용:
- IAM 정책
- CloudFormation 템플릿
- 보안 결정
- 아키텍처 트레이드‑오프
Kiro는 설명, 제안 및 개선 사항을 답변합니다—즉, 일반적인 실수를 피하면서 더 빠르게 작업할 수 있게 도와주는 지식이 풍부한 AWS 동료라고 생각하면 됩니다.
왜 이 예시인가?
초보자에게 가장 많이 사용되는 AWS 서비스인 S3, IAM, 그리고 EC2를 활용해 연습해 보는 것이 유용합니다.
이 연습의 목표는 다음과 같은 EC2 Node.js (Express) 애플리케이션을 구축하는 것입니다:
- 시작 시 S3에 있는 설정 파일을 읽음.
- 애플리케이션 로그를 특정 S3 프리픽스에 쓰기.
- 처음부터 최소 권한 원칙에 맞게 설계된 IAM 역할을 사용하고, 이를 AWS Kiro가 도와줍니다.
고수준 아키텍처
| 구성 요소 | 설명 |
|---|---|
| EC2 Instance | Node.js + Express를 실행; IAM Instance Profile을 사용 |
| IAM Role | EC2 인스턴스에 연결; S3 권한을 최소 범위로 제한 |
| S3 Bucket | config/app-config.json → 읽기 전용logs/ → 쓰기 전용 |
| CloudFormation Stack | 모든 인프라를 정의 |
설정
- Kiro IDE 다운로드 및 설치 – https://kiro.dev/downloads/
- AWS CLI 설치 귀하의 OS용 (예시에서는 Windows 사용) – https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
스크린샷


Source:
Kiro를 사용한 CloudFormation 템플릿 생성
도구를 설치한 뒤, Kiro(또는 원하는 다른 LLM)에게 첫 프롬프트를 작성했습니다. 허용적인 IAM 역할을 시작점으로 삼는 대신, 애플리케이션의 보안 요구사항을 직접 반영한 최소 권한 CloudFormation 템플릿을 생성하도록 Kiro에 요청했습니다.
Kiro에 보낸 프롬프트
You are helping me design infrastructure using AWS CloudFormation.
I am building an EC2‑based Node.js (Express) application with the following behavior:
- The application runs on a single EC2 instance.
- It reads a configuration file from Amazon S3 at startup:
• Bucket: one application‑specific bucket
• Object key: config/app-config.json
- It writes application logs to the same S3 bucket under:
• logs/
Security requirements:
- The EC2 instance must use an IAM role (no static credentials)
- IAM permissions must follow the principle of least privilege
- Do NOT use wildcard actions (e.g., s3:*)
- Do NOT use wildcard resources (*)
- Grant only the exact permissions required for the described behavior
Infrastructure requirements:
- Use AWS CloudFormation (YAML)
- Define:
• An S3 bucket for application data
• An IAM role and instance profile for EC2
• An IAM policy attached to the role with least‑privilege S3 access
• An EC2 instance
- The template should be clear, readable, and suitable for a security‑focused article
Please:
- Explain the purpose of each IAM permission you include
- Comment on why broader permissions are not required
- Avoid adding any unnecessary AWS services or permissions
Kiro의 출력
Kiro는 다음과 같은 전체 파일 세트를 제공했습니다.
| 파일 | 설명 |
|---|---|
stack.yaml | CloudFormation 템플릿 |
DEPLOYMENT.md | 스택 배포 방법에 대한 문서 |
스크린샷

그림 1 – 생성된 CloudFormation 파일들.

그림 2 – 결과 파일 목록.
핵심 요약
- 최소 권한 IAM –
config/app-config.json에 대한s3:GetObject권한과logs/*에 대한s3:PutObject권한만 부여됩니다. 와일드카드가 사용되지 않았습니다. - Kiro를 공동 파일럿으로 – 보안 요구사항을 정확한 CloudFormation 리소스로 변환하는 데 도움을 주어 시간 절약과 인간 오류 감소를 실현합니다.
- 코드형 인프라 – 모든 리소스(S3 버킷, IAM 역할, 인스턴스 프로파일, EC2 인스턴스)가 단일 버전 관리 템플릿에 정의되어 스택을 재현 가능하고 감사 가능하게 만듭니다.
다음 단계
-
생성된
stack.yaml검토 – 매개변수(예: 인스턴스 유형, AMI)를 환경에 맞게 조정합니다. -
AWS CLI로 스택 배포
aws cloudformation deploy \ --template-file stack.yaml \ --stack-name least-privilege-kiro-demo \ --capabilities CAPABILITY_NAMED_IAM -
배포 확인
- EC2 인스턴스에 SSH 접속합니다.
- Node.js 애플리케이션을 클론합니다.
- 구성 파일을 읽고 S3에 로그를 기록할 수 있는지 확인합니다.
-
반복 및 확장 – 최소 권한 원칙을 유지하면서 추가 리소스(예: VPC, 보안 그룹)를 추가합니다.
즐거운 구축 되세요! 🚀
최소 권한 S3 액세스 정책
Kiro는 EC2 인스턴스가 다음을 할 수 있도록 가장 제한적인 정책을 만들었습니다:
- 읽기 구성 파일
arn:aws:s3:::${ApplicationBucket}/config/app-config.json - 쓰기
logs/접두사 아래 로그 파일
arn:aws:s3:::${ApplicationBucket}/logs/* - 목록 조회
logs/접두사 아래 객체
arn:aws:s3:::${ApplicationBucket}/logs/*

IAM 역할 및 인스턴스 프로필
Kiro는 NodeJsAppRole라는 IAM 역할을 만들었습니다.
- Assume 정책: EC2 인스턴스만 이 역할을 맡을 수 있습니다.
- 첨부: 이 역할은 인스턴스 프로필에 연결되어 있어, EC2 인스턴스가 역할이 부여한 권한을 사용할 수 있습니다.

이 구성은 스택에 대해 최소 권한 원칙을 적용합니다.
Kiro와의 경험에서 얻은 중요한 메모
| # | 메모 |
|---|---|
| 1 | Kiro는 코드를 빠르게 많이 작성합니다. 인내심을 가지고 생성된 텍스트를 읽으세요 – 그만한 가치가 있습니다! |
| 2 | DEPLOYMENT.md 파일이 자리표시자 값과 함께 생성됩니다. 배포 명령을 실행하기 전에 해당 값을 찾아 교체하세요. |
| 3 | Kiro가 올바른 AMI ID를 모를 수 있습니다. 배포 전에 해당 지역에 맞는 EC2 이미지 ID를 찾아 주세요. |
| 4 | Kiro가 문제를 해결할 때 많은 명령을 제안합니다. 명령을 실행하기 전에 먼저 읽어보세요. |
| 5 | Kiro가 멈추면 현재 반복을 중단하고 추가 정보를 요청할지 물어볼 것입니다. |
| 6 | AWS 콘솔에 로그인하여 로그를 수집하고 Kiro와 공유하세요 – 상황을 많이 제공할수록 도움이 더 좋습니다. |
배포 성공
Kiro의 도움으로 코드를 디버깅하고 수정한 후, 스택이 드디어 생성되었습니다! 🎉

위 스크린샷에서 새로 생성된 CloudFormation 리소스를 확인할 수 있습니다.
배포 테스트
-
헬스‑체크 실행
curl http://<EC2_PUBLIC_IP>:3000/health<EC2_PUBLIC_IP>를 EC2 인스턴스의 공인 IP 주소로 교체합니다.
응답은 JSON 페이로드여야 합니다:{"status":"healthy"}
-
S3의 로그 파일 확인
EC2 인스턴스는 연결된 IAM 역할을 사용해 S3 버킷에 로그 항목을 기록합니다.
logs/프리픽스 아래에app-2023-09-15.log와 유사한 이름의 새 객체가 표시되어야 합니다.
-
로그 내용 검사
로그 파일을 다운로드하여 헬스 체크의 타임스탬프를 확인합니다:

파일은 EC2 인스턴스가 헬스 체크를 성공적으로 수행하고 결과를 기록했음을 확인시켜 줍니다.
요약
- 최소 S3 정책은 EC2 인스턴스에 실제로 필요한 권한만 부여합니다.
- IAM 역할(
NodeJsAppRole)을 EC2의 assume‑action에만 제한하면 인스턴스가 보호됩니다. - 배포 단계를 따라하고 헬스 엔드포인트를 테스트하면 전체 스택이 검증됩니다.
다른 서비스에서도 최소 권한 접근이 엄격히 요구될 경우 이 패턴을 자유롭게 재사용하세요!
아키텍처 개요

Figure 1 – EC2 ↔ S3 상호 작용의 고수준 아키텍처.
과정 전반에 걸쳐 보셨듯이, Kiro는 간단한 EC2 인스턴스로 새로운 스택을 시작할 수 있으며, S3와 상호 작용하면서 최소 권한 아키텍처를 사용자 친화적인 방식으로 적용합니다.
비용 안내
참고: 이 실험은 신규 Kiro 사용자를 위해 제공된 500 보너스 크레딧 중 11.22 크레딧만 사용했습니다.
Kiro 대시보드

그림 2 – 배포된 리소스를 보여주는 Kiro 대시보드.
Source: …
마무리 생각
이 글이 흥미롭고 유용했으며, 새로운 친구 Kiro의 도움을 받아 여러분이 직접 프로젝트나 스택을 구축하는 데 영감을 주었으면 좋겠습니다! 🤓
읽어 주셔서 감사하고, 앞으로 나올 기사들을 기대해 주세요 📚
안녕! 👋
