Post

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 작동 구조

권한 평가 로직

  1. 기본은 모든 요청 거부
  2. 명시적 허용(Allow) 정책이 있으면 승인
  3. 명시적 거부(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 접근하기

단계

  1. IAM → Roles → Create Role
  2. 신뢰할 주체: EC2 선택
  3. 권한: CloudWatchAgentServerPolicy 추가
  4. 역할 이름: EC2ToCWLogs
  5. EC2 인스턴스에 이 역할 연결

결과적으로 EC2가 CloudWatch Logs에 접근 가능해짐


실습 예제 1: IAM 사용자 만들기 + S3 읽기 권한 부여

목표

  • dev-user를 만들고 S3 읽기 전용 권한 부여

단계

  1. IAM → Users → Add user → 이름: dev-user
  2. 액세스 유형:

    • ☑ Programmatic access
    • ☑ AWS Management Console access
  3. 권한: AmazonS3ReadOnlyAccess 선택
  4. 생성 후 Access Key 복사

테스트

  • dev-user 로그인 → S3 접근 → 객체 읽기 가능 / 업로드는 불가

실습 예제 2: EC2에서 S3 접근하도록 역할 부여

목표

  • EC2S3ReadRole 역할을 EC2에 부여해 S3 객체 읽기 가능

단계

  1. IAM → Roles → Create role
  2. 서비스: EC2
  3. 권한: AmazonS3ReadOnlyAccess
  4. 역할 이름: EC2S3ReadRole
  5. 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 RoleIAM Role/User/Group
주요 필드Principal, sts:AssumeRoleAction, 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.