AWS IAM
IAM의 핵심 개념, 정책 구조, 사용자 vs 역할 차이, 실전 예제 및 정책 구성 방법 설명
AWS IAM
IAM 핵심 개념 요약
개념 | 설명 |
---|---|
사용자(User) | 사람 계정. 콘솔/CLI/API를 통한 로그인 및 작업 수행 |
그룹(Group) | 여러 사용자에게 공통 정책을 적용할 수 있는 컨테이너 |
역할(Role) | EC2, Lambda 등 AWS 리소스 또는 외부 사용자에게 권한 위임 |
정책(Policy) | JSON 형식의 권한 정의 (누가 → 무엇을 → 어디서) |
정체성 기반 정책 | 사용자, 그룹, 역할에 연결되는 정책 |
리소스 기반 정책 | 리소스 자체에 연결되는 정책 (예: S3 Bucket Policy) |
IAM은 “누가(Principal) → 무엇을(Action) → 어디에(Resource)” 접근할 수 있는지를 설정
IAM 작동 구조
권한 평가 로직
- 기본은 모든 요청 거부
- 명시적 허용(Allow) 정책이 있으면 승인
- 명시적 거부(Deny)가 있으면 무조건 거부 (가장 우선 적용)
1
2
3
4
5
{
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::mybucket/*"]
}
사용자(User) vs 역할(Role)
항목 | 사용자(User) | 역할(Role) |
---|---|---|
대상 | 실제 사람 | AWS 서비스, 외부 시스템 |
인증 | 로그인 정보 (ID/PW, Access Key) | 임시 자격 증명 (STS) |
사용 예 | 개발자가 콘솔 접근 | EC2가 S3 객체 읽기 |
IAM 정책 유형
정책 유형 | 설명 | 예시 |
---|---|---|
AWS 관리형 정책 | AWS가 미리 만든 정책 | AmazonS3ReadOnlyAccess |
고객 관리형 정책 | 사용자가 직접 정의 | 특정 S3 버킷만 접근 허용 |
인라인 정책 | 특정 사용자/역할에 직접 부착 | 단일 사용자 맞춤 권한 |
IAM 콘솔 구성요소
- Users: 사용자 생성, 로그인 방식 설정, MFA 적용 등
- Groups: 공통 권한을 위한 사용자 묶음
- Roles: AWS 리소스의 역할 (EC2, Lambda 등)
- Policies: 정책 생성 및 편집 (JSON)
- Access Analyzer: 권한 과다 여부 분석 도구
실전 예시: EC2에서 CloudWatch Logs 접근하기
단계
- IAM → Roles → Create Role
- 신뢰할 주체: EC2 선택
- 권한:
CloudWatchAgentServerPolicy
추가 - 역할 이름:
EC2ToCWLogs
- EC2 인스턴스에 이 역할 연결
결과적으로 EC2가 CloudWatch Logs에 접근 가능해짐
실습 예제 1: IAM 사용자 만들기 + S3 읽기 권한 부여
목표
dev-user
를 만들고 S3 읽기 전용 권한 부여
단계
- IAM → Users → Add user → 이름:
dev-user
액세스 유형:
- ☑ Programmatic access
- ☑ AWS Management Console access
- 권한:
AmazonS3ReadOnlyAccess
선택 - 생성 후 Access Key 복사
테스트
dev-user
로그인 → S3 접근 → 객체 읽기 가능 / 업로드는 불가
실습 예제 2: EC2에서 S3 접근하도록 역할 부여
목표
EC2S3ReadRole
역할을 EC2에 부여해 S3 객체 읽기 가능
단계
- IAM → Roles → Create role
- 서비스: EC2
- 권한:
AmazonS3ReadOnlyAccess
- 역할 이름:
EC2S3ReadRole
- EC2 인스턴스에 해당 역할 연결
1
aws s3 ls s3://my-bucket --region ap-northeast-2
EC2 인스턴스 내에서 IAM 역할 기반 인증이 작동됨
실습 예제 3: 커스텀 정책 만들기 (특정 S3 버킷만 허용)
목표
- 특정 버킷(
my-secure-bucket
)만 읽기 허용 정책 생성
정책 JSON
1
2
3
4
5
6
7
8
9
10
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::my-secure-bucket/*"
}
]
}
적용 방법
- IAM → Policies → Create Policy → 붙여넣기 →
S3ReadOnlyMyBucket
- 사용자 또는 역할에 해당 정책 부착
신뢰 정책 vs 권한 정책
항목 | 신뢰 정책 (Trust Policy) | 권한 정책 (Permission Policy) |
---|---|---|
목적 | 누가 이 역할을 사용할 수 있는가 | 무엇을 할 수 있는가 |
적용 대상 | IAM Role | IAM Role/User/Group |
주요 필드 | Principal , sts:AssumeRole | Action , Resource , Effect |
신뢰 정책 예시
1
2
3
4
5
6
7
8
9
10
11
12
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
권한 정책 예시
1
2
3
4
5
6
7
8
9
10
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
IAM 에러 예시 분석
1
User: arn:aws:iam::123456789012:user/dev-user is not authorized to perform: amplify:ListApps on resource: arn:aws:amplify:ap-northeast-2:123456789012:apps/*
이 에러는 해당 사용자가
amplify:ListApps
액션에 대한 권한이 없음을 나타냄.AmazonAmplifyReadOnlyAccess
또는 직접 권한 추가 필요
요약
- IAM은 AWS에서 가장 중요한 보안 기초
- 정책 = 권한 부여, 역할 = 권한 위임
- 사용자/역할/정책의 관계를 명확히 이해해야 실무에서 문제 해결 가능
- 실습을 통해 JSON 정책 구성 능력을 길러야 실전에서 유연하게 대응 가능
This post is licensed under CC BY 4.0 by the author.