IAM 정책과 권한

IAM 정책과 권한 (Policies and Permissions)

IAM 접근 관리는 "정책을 만들어 아이덴티티나 리소스에 붙이는" 방식으로 이뤄져요. 정책(policy)은 아이덴티티(사용자·그룹·역할)나 AWS 리소스와 연결될 때 그 대상의 권한을 정의하는 객체예요. 대부분의 정책은 JSON 문서로 저장돼요.

출처: https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html

정책에는 여러 종류가 있어요. 주요한 것만 보면,

  • 아이덴티티 기반 정책(Identity-based): 사용자·그룹·역할에 붙이는 정책. 다시 관리형(managed)과 인라인(inline)으로 나뉘어요.
    • AWS 관리형 정책: AWS가 만들고 관리.
    • 고객 관리형 정책: 내가 만들고 관리. 더 정밀한 통제 가능.
    • 인라인 정책: 단일 사용자·그룹·역할에 직접 추가.
  • 리소스 기반 정책(Resource-based): S3 버킷 같은 리소스에 붙이는 JSON 정책. 지정된 principal이 그 리소스에 특정 작업을 할 수 있게 해요. 예: S3 버킷 정책. 역할의 **신뢰 정책(trust policy)**은 어떤 principal이 그 역할을 맡을 수 있는지 정의해요.
  • 권한 경계(Permissions boundary): 사용자·역할의 최대 권한을 제한하는 관리형 정책.
  • AWS Organizations SCP: 조직·OU 안의 IAM 사용자·역할의 최대 권한을 정의. SCP는 권한을 부여하지 않고 제한만 해요.
  • 세션 정책(Session policy): 역할을 맡을 때(AssumeRole 등) 넘겨주는 정책. 세션 권한을 identity 정책의 교집합으로 제한해요.

JSON 정책 문서의 구조는 이래요.

  • Version: 정책 언어 버전. 최신 2012-10-17을 권장.
  • Statement: 정책의 핵심 요소. 하나 이상의 statement를 담을 수 있어요.
  • Sid: (선택) 문장 구분용 ID.
  • Effect: Allow 또는 Deny.
  • Principal: (일부 필요한 경우) 리소스 기반 정책에서 특정 계정·사용자·역할을 지정. 아이덴티티 기반 정책엔 넣을 수 없어요(주체가 그 사용자/역할로 암시).
  • Action: 허용/거부할 작업 목록.
  • Resource: (일부 필요한 경우) 작업이 적용될 리소스 목록.

정책이 여러 statement나 여러 개의 정책일 때는 logical OR로 평가돼요. 즉 어느 한 곳에서 허용되면 허용되는 쪽으로 열려요.

가장 기본적인 정책 예시는 이래요. GetUser 액션을 허용하면, 그 사용자는 콘솔·CLI·API 어디에서든 사용자 정보를 가져올 수 있어요.

좋은 정책 작성의 원칙은 **최소 권한(least privilege)**이에요. 필요한 작업만, 필요할 리소스에 한해, 특정 조건에서만 허용하도록 하는 게 기본이에요.

더 알아보기