권한과 정책이 어떻게 접근 관리를 제공하나요?

권한과 정책이 어떻게 접근 관리를 제공하나요?

AWS Identity and Access Management(IAM)의 접근 관리(access management) 부분은 프린시펄 엔터티(principal entity)가 계정에서 무엇을 할 수 있는지 정의해 줘요. 프린시펄 엔터티란 IAM 엔터티(IAM 사용자 또는 IAM 역할)를 사용해 인증된 사람이나 애플리케이션이에요. 접근 관리는 흔히 승인(authorization) 이라고도 불러요. AWS에서 접근을 관리하려면 정책(policy)을 만들어 IAM 자격 증명(IAM 사용자, IAM 그룹, IAM 역할)이나 AWS 리소스에 연결(attach)하면 돼요. 이번 글에서는 정책이 사용자·그룹·역할에 어떻게 접근을 부여하는지 살펴볼게요.

출처: 문서

본문

정책과 계정 (Policies and accounts)

AWS에서 단일 계정을 관리한다면 정책을 사용해 그 계정 내에서 권한을 정의해요. 여러 계정에 걸쳐 권한을 관리한다면 IAM 사용자의 권한 관리가 더 어려워져요. 계정 간 권한에는 IAM 역할, 리소스 기반 정책, 또는 접근 제어 목록(ACL)을 사용할 수 있어요. 하지만 계정을 여러 개 소유하고 있다면, AWS Organizations 서비스를 사용해 권한을 관리하는 걸 권장해요. 자세한 내용은 _AWS Organizations 사용자 가이드_의 AWS Organizations란 무엇인가요?를 참고하세요.

정책과 사용자 (Policies and users)

IAM 사용자는 AWS 계정의 자격 증명이에요. IAM 사용자를 만들어도 권한을 주기 전에는 계정의 어떤 것에도 접근할 수 없어요. IAM 사용자에게 권한을 주려면 자격 증명 기반 정책(identity-based policy)을 만들어야 하는데, 이는 IAM 사용자나 그 사용자가 속한 IAM 그룹에 연결되는 정책이에요. 다음 예시는 IAM 사용자가 us-east-2 리전의 123456789012 계정 안 Books 테이블에서 모든 Amazon DynamoDB 액션(dynamodb:*)을 수행하도록 허용하는 JSON 정책이에요.

{
  "Version":"2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "dynamodb:*",
    "Resource": "arn:aws:dynamodb:us-east-2:123456789012:table/Books"
  }
}

이 정책을 IAM 사용자에 연결하면 사용자는 DynamoDB 인스턴스의 Books 테이블에서 모든 액션을 수행할 수 있는 권한을 가져요. 대부분의 IAM 사용자는 여러 정책을 가지고 있으며, 그 정책들이 합쳐져 사용자의 총 부여 권한을 나타내요.

정책이 명시적으로 허용하지 않는 액션이나 리소스는 기본적으로 거부돼요. 예를 들어 위 정책이 사용자에게 연결된 유일한 정책이라면, 사용자는 Books 테이블에서는 DynamoDB 액션을 수행할 수 있지만 다른 테이블에서는 액션을 수행할 수 없어요. 마찬가지로 Amazon EC2, Amazon S3, 또는 다른 AWS 서비스에서는 어떤 액션도 허용되지 않아요. 그 서비스들을 다룰 권한이 정책에 포함되지 않았기 때문이에요.

정책과 IAM 그룹 (Policies and IAM groups)

IAM 사용자를 IAM 그룹 으로 구성하고 IAM 그룹에 정책을 연결할 수 있어요. 이 경우 개별 IAM 사용자는 여전히 자기 자격 증명을 갖지만, IAM 그룹의 모든 IAM 사용자는 그룹에 연결된 권한을 가지게 돼요. 권한 관리가 쉬워지니 IAM 그룹을 활용하세요.

IAM 사용자 또는 IAM 그룹에는 서로 다른 권한을 부여하는 여러 정책이 연결될 수 있어요. 이 경우 정책들의 조합이 프린시펄의 유효 권한을 결정해요. 프린시펄이 액션과 리소스 양쪽에 명시적 Allow 권한이 없다면, 그 권한을 갖지 못해요.

페더레이션 사용자 세션과 역할 (Federated user sessions and roles)

페더레이션 프린시펄은 IAM 사용자처럼 AWS 계정에 영구 자격 증명이 없어요. 페더레이션 프린시펄에 권한을 할당하려면 역할(role) 이라는 엔터티를 만들고 역할의 권한을 정의해요. SAML 또는 OIDC 페더레이션 프린시펄이 AWS에 로그인하면 사용자는 역할과 연결되고 역할에 정의된 권한을 부여받아요. 자세한 내용은 타사 자격 증명 공급자용 역할 만들기를 참고하세요.

자격 증명 기반 정책과 리소스 기반 정책

자격 증명 기반 정책(identity-based policies)은 IAM 사용자, 그룹, 역할 같은 IAM 자격 증명에 연결하는 권한 정책이에요. 리소스 기반 정책(resource-based policies)은 Amazon S3 버킷이나 IAM 역할 신뢰 정책 같은 리소스에 연결하는 권한 정책이에요.

  • 자격 증명 기반 정책은 자격 증명이 어느 리소스에서 어떤 조건으로 어떤 액션을 수행할 수 있는지를 제어해요. 다시 다음과 같이 분류할 수 있어요.
    • 관리형 정책 (Managed policies) – AWS 계정의 여러 사용자, 그룹, 역할에 연결할 수 있는 독립적인 자격 증명 기반 정책이에요. 두 가지 유형이 있어요.
      • AWS 관리형 정책 – AWS가 만들고 관리하는 정책이에요. 정책 사용이 처음이라면 AWS 관리형 정책부터 쓰는 걸 권장해요.
      • 고객 관리형 정책 – 사용자가 AWS 계정에서 만들고 관리하는 정책이에요. AWS 관리형 정책보다 더 정밀한 제어를 제공해요. 시각적 편집기(virtual editor)나 JSON 정책 문서를 직접 만들어 IAM 정책을 생성·편집·검증할 수 있어요. 자세한 내용은 고객 관리형 정책으로 사용자 지정 IAM 권한 정의와 IAM 정책 편집을 참고하세요.
      • 인라인 정책 (Inline policies) – 직접 만들고 관리하며 단일 사용자, 그룹, 역할에 직접 내장되는 정책이에요. 대부분의 경우 인라인 정책 사용은 권장하지 않아요.
  • 리소스 기반 정책은 지정된 프린시펄이 해당 리소스에서 어떤 조건으로 어떤 액션을 수행할 수 있는지를 제어해요. 리소스 기반 정책은 인라인 정책이며, 관리형 리소스 기반 정책은 없어요. 계정 간 접근을 활성화하려면 리소스 기반 정책의 프린시펄로 전체 계정이나 다른 계정의 IAM 엔터티를 지정할 수 있어요.

IAM 서비스는 역할 신뢰 정책(trust policy) 이라는 한 가지 유형의 리소스 기반 정책을 지원하며, 이를 IAM 역할에 연결해요. IAM 역할은 자격 증명이면서 동시에 리소스 기반 정책을 지원하는 리소스이므로, IAM 역할에는 신뢰 정책과 자격 증명 기반 정책을 모두 연결해야 해요. 신뢰 정책은 어떤 프린시펄 엔터티(계정, 사용자, 역할, AWS STS 페더레이션 사용자 프린시펄)가 역할을 맡을 수 있는지 정의해요. IAM 역할이 다른 리소스 기반 정책과 어떻게 다른지 알아보려면 IAM의 계정 간 리소스 접근을 참고하세요.

리소스 기반 정책을 지원하는 서비스 목록은 IAM과 함께 작동하는 AWS 서비스를, 리소스 기반 정책에 대한 자세한 내용은 자격 증명 기반 정책과 리소스 기반 정책을 참고하세요.

더 알아보기 (Learn more)