SAABlog
보안초급

AWS IAM이란? 사용자, 그룹, 역할, 정책 완벽 가이드

IAM은 AWS 리소스에 대한 액세스를 안전하게 제어하는 서비스입니다. 사용자, 그룹, 역할, 정책의 차이점과 최소 권한 원칙까지 SAA-C03 필수 개념을 정리합니다.

PHILOLAMB-
IAM보안사용자역할정책

관련 시험 도메인

  • Domain 1: Design Secure Architectures

핵심 요약 (BLUF)

IAM(Identity and Access Management)은 AWS 리소스에 "누가" "무엇을" 할 수 있는지 제어하는 보안 서비스입니다. 사용자(User)는 사람, 그룹(Group)은 사용자 모음, 역할(Role)은 AWS 서비스나 외부 시스템용, 정책(Policy)은 권한 규칙입니다.

시험 팁

시험 핵심: 루트 사용자 사용 금지, 최소 권한 원칙, 역할은 임시 자격 증명 사용, MFA 필수 활성화

IAM은 언제 사용해야 할까?

AWS 계정을 생성하면 모든 권한을 가진 루트 사용자가 만들어집니다. 하지만 일상적인 작업에 루트 사용자를 사용하는 것은 보안상 매우 위험합니다.

IAM이 필요한 상황

  • 팀원별로 다른 권한을 부여해야 할 때 (개발자 vs 운영자)
  • EC2, Lambda 등 AWS 서비스가 다른 서비스에 접근해야 할 때
  • 외부 시스템이 AWS 리소스에 접근해야 할 때
  • 임시 권한을 부여해야 할 때

IAM의 특징

  • 무료 서비스: IAM 자체는 비용이 발생하지 않음
  • 글로벌 서비스: 리전에 관계없이 전체 AWS 계정에 적용
  • 최종 일관성: 변경사항이 전체 시스템에 복제되는 데 시간이 소요됨

IAM의 4가지 핵심 구성 요소

1. IAM 사용자 (User): 사람을 위한 계정

IAM 사용자는 AWS에 접근하는 개별 사람 또는 애플리케이션을 나타냅니다.

특징:
- 장기 자격 증명 (비밀번호, Access Key)
- 특정 개인과 1:1 매핑
- 콘솔 로그인 또는 프로그래밍 방식 접근 가능

사용 시나리오:

  • 개발자 John에게 EC2 관리 권한 부여
  • CI/CD 파이프라인에서 S3 업로드용 계정

2. IAM 그룹 (Group): 권한 관리 편의를 위한 모음

IAM 그룹은 사용자들의 논리적 집합입니다. 그룹에 정책을 연결하면 모든 멤버가 동일한 권한을 받습니다.

특징:
- 사용자만 포함 가능 (그룹 안에 그룹 불가)
- 한 사용자가 여러 그룹에 속할 수 있음
- 그룹 자체로는 로그인 불가

사용 시나리오:

  • "Developers" 그룹: EC2, S3, Lambda 권한
  • "Admins" 그룹: 전체 관리 권한
  • "ReadOnly" 그룹: 읽기 전용 권한

3. IAM 역할 (Role): 서비스와 임시 접근을 위한 권한

IAM 역할특정 개인에게 연결되지 않는 권한 세트입니다. 필요할 때 "수임(Assume)"하여 사용합니다.

특징:
- 임시 자격 증명 사용 (보안상 권장)
- AWS 서비스, 다른 계정, 외부 시스템이 수임 가능
- 자격 증명 교체 불필요 (자동 만료)

사용 시나리오:

  • EC2 인스턴스가 S3에 접근할 때
  • Lambda 함수가 DynamoDB에 쓰기할 때
  • 다른 AWS 계정에서 리소스에 접근할 때 (Cross-Account)
  • 외부 IdP(Identity Provider)로 로그인한 사용자

4. IAM 정책 (Policy): 권한 규칙을 정의하는 문서

IAM 정책누가 무엇을 할 수 있는지 JSON 형식으로 정의한 문서입니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:PutObject"],
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

IAM 사용자 vs 역할: 어떤 걸 선택해야 할까?

비교 항목IAM 사용자IAM 역할
대상사람, 장기 애플리케이션AWS 서비스, 임시 접근
자격 증명장기 (Access Key)임시 (STS 토큰)
보안키 교체 필요자동 만료, 교체 불필요
사용 예개발자 콘솔 접근EC2에서 S3 접근
AWS 권장제한적 사용적극 권장

선택 기준

  • IAM 사용자: 콘솔에 로그인하는 실제 사람
  • IAM 역할: AWS 서비스, 애플리케이션, 교차 계정 접근, 외부 시스템

시험 팁

시험 포인트: "EC2가 S3에 접근해야 합니다" → IAM 역할 (Access Key 하드코딩은 보안 위험!)

IAM 정책의 종류

1. 자격 증명 기반 정책 (Identity-Based Policy)

사용자, 그룹, 역할에 직접 연결되는 정책입니다.

  • AWS 관리형 정책: AWS가 제공, 재사용 가능 (예: AmazonS3FullAccess)
  • 고객 관리형 정책: 사용자가 생성, 재사용 가능
  • 인라인 정책: 단일 자격 증명에만 직접 추가 (권장하지 않음)

2. 리소스 기반 정책 (Resource-Based Policy)

리소스에 연결되는 정책입니다. S3 버킷 정책, IAM 역할 신뢰 정책 등이 있습니다.

// S3 버킷 정책 예시: 다른 계정에서 접근 허용
{
  "Principal": {"AWS": "arn:aws:iam::111122223333:root"},
  "Effect": "Allow",
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::my-bucket/*"
}

3. 권한 경계 (Permission Boundary)

IAM 엔터티가 받을 수 있는 최대 권한을 설정합니다. 권한을 부여하지 않고 제한합니다.

4. 서비스 제어 정책 (SCP)

AWS Organizations에서 조직 또는 OU의 최대 권한을 정의합니다. 루트 사용자에게도 적용됩니다.

최소 권한 원칙 (Least Privilege)

시험 팁

AWS 보안 황금 규칙: 작업 수행에 필요한 최소한의 권한만 부여하세요.

최소 권한 구현 방법

  1. AWS 관리형 정책으로 시작 → 점차 축소
  2. IAM Access Analyzer 활용: 실제 사용 권한 분석
  3. 마지막 액세스 정보 확인: 사용하지 않는 권한 제거
  4. 권한 경계 설정: 최대 권한 상한선 적용

정책 평가 로직

1. 기본값: 모든 요청 거부 (Implicit Deny)
2. 명시적 허용이 있으면 → 허용 검토
3. 명시적 거부가 있으면 → 무조건 거부 (Explicit Deny)
4. 모든 적용 정책의 교집합 = 최종 권한

핵심: 명시적 거부(Deny)는 항상 허용(Allow)을 이깁니다.

IAM 보안 모범 사례

루트 사용자 보호

  1. 일상 작업에 루트 사용자 사용 금지
  2. 루트 사용자에 MFA 활성화 (필수!)
  3. 루트 Access Key 삭제

IAM 사용자/역할 보안

  1. MFA(다중 인증) 활성화
  2. Access Key 정기 교체 (90일 권장)
  3. 사용하지 않는 자격 증명 삭제
  4. 강력한 암호 정책 적용

권한 관리

  1. 그룹을 통한 권한 관리 (개별 사용자에 직접 연결 지양)
  2. 역할 사용 권장 (장기 자격 증명 대신 임시 자격 증명)
  3. IAM Access Analyzer로 외부 액세스 모니터링

SAA-C03 시험 출제 포인트

  1. 루트 사용자 사용 제한: 일상 작업에 사용 금지, MFA 필수
  2. 역할 vs 사용자: EC2, Lambda 등 서비스 접근 → 역할 사용
  3. 최소 권한 원칙: 필요한 권한만 부여, Access Analyzer 활용
  4. 정책 평가: 명시적 거부 > 허용 > 암시적 거부
  5. 교차 계정 접근: IAM 역할 + 신뢰 정책 사용

시험 팁

시험 문제 예시: "EC2 인스턴스에서 실행되는 애플리케이션이 S3 버킷에 접근해야 합니다. 가장 안전한 방법은?" → 정답: IAM 역할 (EC2에 역할 연결, Access Key 하드코딩 X)

자주 묻는 질문 (FAQ)

Q: 루트 사용자와 IAM 사용자의 차이는?

루트 사용자는 AWS 계정 생성 시 만들어지며 모든 권한을 가집니다. IAM 사용자는 루트 사용자가 생성하며 부여된 권한만 가집니다. 일상 작업에는 IAM 사용자를 사용해야 합니다.

Q: IAM 역할은 왜 더 안전한가요?

IAM 역할은 임시 자격 증명을 사용합니다. 자격 증명이 자동으로 만료되므로 유출되더라도 피해가 제한됩니다. Access Key처럼 수동 교체가 필요 없습니다.

Q: 그룹에 역할을 연결할 수 있나요?

아니요. 그룹에는 정책만 연결할 수 있습니다. 역할은 사용자, AWS 서비스, 외부 시스템이 수임합니다. 그룹은 권한 관리의 편의를 위한 개념입니다.

Q: 한 사용자가 여러 그룹에 속하면 권한은 어떻게 되나요?

모든 그룹의 정책이 합산됩니다. 단, 어느 그룹에서든 명시적 거부(Deny)가 있으면 해당 작업은 거부됩니다.

Q: IAM 정책에서 Principal은 무엇인가요?

Principal은 리소스 기반 정책에서 누가 리소스에 접근할 수 있는지 지정합니다. 자격 증명 기반 정책에는 Principal이 없습니다 (연결된 자격 증명이 주체).

Q: 권한 경계(Permission Boundary)는 언제 사용하나요?

개발자에게 IAM 사용자/역할 생성 권한을 주되, 생성된 엔터티가 가질 수 있는 최대 권한을 제한할 때 사용합니다. 위임 시 권한 상승을 방지합니다.

관련 글

참고 자료