사용자에게 AWS 서비스에 역할을 전달할 권한 부여 - AWS Identity and Access Management

사용자에게 AWS 서비스에 역할을 전달할 권한 부여

다수의 AWS 서비스를 구성하려면 IAM 역할을 서비스에 전달해야 합니다. 그러면 서비스가 나중에 역할을 수임하고 사용자 대신 작업을 수행할 수 있습니다. 대부분의 서비스에서 설정 중 한 번만 서비스에 역할을 전달하면 됩니다. 서비스가 역할을 수임할 때마다 전달할 필요가 없습니다. 예를 들어 Amazon EC2 인스턴스에서 실행 중인 애플리케이션이 있다고 가정합니다. 해당 애플리케이션에는 인증을 위한 임시 자격 증명과 AWS에서 작업을 수행할 수 있는 애플리케이션을 승인할 권한이 필요합니다. 애플리케이션을 설정할 때는 역할을 Amazon EC2에 전달하여 해당 자격 증명을 제공하는 인스턴스와 함께 사용해야 합니다. IAM 정책을 역할에 연결하여 인스턴스에서 실행 중인 애플리케이션에 대한 권한을 정의합니다. 애플리케이션은 역할이 허용하는 작업을 수행해야 할 때마다 역할을 수임합니다.

AWS 서비스에 역할(및 그 권한)을 전달하려면 사용자에게 서비스에 역할을 전달할 권한이 있어야 합니다. 이를 통해 관리자는 승인된 사용자만 권한이 부여된 역할을 통해 서비스를 구성하도록 할 수 있습니다. 사용자가 AWS 서비스에 역할을 전달하도록 하려면 해당 사용자의 IAM 사용자, 역할 또는 그룹에 PassRole 권한을 부여해야 합니다.

주의
  • 같은 AWS 계정을 공유하는 서비스로 IAM 역할을 전달하기 위해서는 PassRole 권한만 이용할 수 있습니다. 계정 A의 역할을 계정 B의 서비스에 넘겨주려면 먼저 계정 A의 역할을 맡을 수 있는 IAM 역할을 계정 B에 생성한 다음 계정 B의 역할을 서비스에 넘겨야 합니다. 세부 정보는 IAM의 크로스 계정 리소스 액세스을 참조하세요.

  • 역할에 태그를 지정한 다음 iam:PassRole 작업과 함께 정책의 ResourceTag 조건 키를 사용하는 것으로 역할을 전달할 수 있는 사람을 제어하려고 하지 마십시오. 이 접근법은 신뢰할 수 있는 결과를 가져오지 못합니다.

PassRole 권한을 설정할 때 사용자에게 부여하려는 역할보다 더 많은 권한이 있는 역할을 사용자가 넘기지 않도록 해야 합니다. 예를 들어 Alice가 Amazon S3 작업을 수행하는 것이 허용되지 않을 수 있습니다. Alice가 Amazon S3 작업을 허용하는 서비스에 역할을 넘길 수 있으면 해당 서비스에서 작업 실행 시 Alice를 대신하여 Amazon S3 작업을 수행할 수 있습니다.

서비스 연결 역할을 지정하는 경우 해당 역할을 서비스에 전달할 권한도 있어야 합니다. 일부 서비스는 서비스에서 작업을 수행할 때 계정에 서비스 연결 역할을 자동으로 생성합니다. 예를 들어, Amazon EC2 Auto Scaling에서는 사용자가 Auto Scaling 그룹을 처음으로 생성할 때 사용자를 대신해 AWSServiceRoleForAutoScaling 서비스 연결 역할을 생성합니다. Auto Scaling을 생성할 때 iam:PassRole 권한이 없는 상태에서 서비스 연결 역할을 지정하려고 하면 오류가 발생합니다. 역할을 명시적으로 지정하지 않는 경우에는 iam:PassRole 권한이 필요하지 않으며, 기본적으로 해당 그룹에 대해 수행하는 모든 작업에 AWSServiceRoleForAutoScaling 역할이 사용됩니다. 서비스 연결 역할을 지원하는 서비스를 알아보려면 AWS IAM으로 작업하는 서비스 섹션을 참조하세요. 서비스에서 작업 수행 시 자동으로 서비스 연결 역할을 생성하는 서비스를 알아보려면 링크를 선택하고 해당 서비스에 대한 서비스 연결 역할 설명서를 확인합니다.

사용자는 역할을 사용하여 서비스에 권한을 할당하는 API 작업에서 파라미터로 역할 ARN을 전달할 수 있습니다. 그런 다음 서비스는 해당 사용자에게 iam:PassRole 권한이 있는지 확인합니다. 사용자가 승인된 역할만 전달하도록 제한하려면 IAM 정책 문의 Resources 요소로 iam:PassRole 권한을 필터링하면 됩니다.

JSON 정책의 Condition 요소를 사용하여 모든 AWS 요청의 요청 컨텍스트에 포함된 키 값을 테스트할 수 있습니다. 정책에서 조건 키를 사용하는 방법에 대한 자세한 내용은 IAM JSON 정책 요소: Condition 섹션을 참조하세요. iam:PassedToService 조건 키는 역할을 전달할 수 있는 서비스의 서비스 보안 주체를 지정하는 데 사용될 수 있습니다. 정책에서 iam:PassedToService 조건 키를 사용하는 방법에 대한 자세한 내용은 iam:PassedToService를 참조하세요.

예 1

인스턴스를 시작한 후 사용자에게 Amazon EC2 서비스에 승인된 역할 집합을 전달할 수 있는 권한을 부여하려 한다고 가정하겠습니다. 다음 세 가지 요소가 필요합니다.

  • 역할이 수행할 수 있는 작업을 결정하는 역할에 연결된 IAM 권한 정책입니다. 역할이 수행해야 하는 작업 및 역할이 그러한 작업을 수행하는 데 필요한 리소스만으로 권한을 한정할 수 있습니다. AWS 관리형 또는 고객이 생성한 IAM 권한 정책을 사용할 수 있습니다.

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "A list of the permissions the role is allowed to use" ], "Resource": [ "A list of the resources the role is allowed to access" ] } }
  • 서비스에서 역할을 위임하도록 허용하는 역할에 대한 신뢰 정책입니다. 예를 들어, UpdateAssumeRolePolicy 작업이 있는 역할에 다음과 같은 신뢰 정책을 연결할 수 있습니다. 이 신뢰 정책을 통해 Amazon EC2는 해당 역할 및 역할에 연결된 권한을 사용할 수 있습니다.

    { "Version": "2012-10-17", "Statement": { "Sid": "TrustPolicyStatementThatAllowsEC2ServiceToAssumeTheAttachedRole", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } }
  • 사용자가 승인된 역할만 전달하도록 허용하는 IAM 사용자에 연결된 IAM 권한 정책입니다. 일반적으로 iam:GetRole을(를) iam:PassRole에 추가하여 사용자가 전달할 역할의 세부 정보를 얻을 수 있습니다. 이 예제에서 사용자는 지정된 계정에 있으며 다음과 같이 이름이 EC2-roles-for-XYZ-(으)로 시작하는 역할만 전달할 수 있습니다.

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::account-id:role/EC2-roles-for-XYZ-*" }] }

이제 사용자는 할당된 역할로 Amazon EC2 인스턴스를 시작할 수 있습니다. 이 인스턴스에서 실행되는 애플리케이션은 인스턴스 프로파일 메타데이터를 통해 역할의 임시 자격 증명에 액세스할 수 있습니다. 역할과 연결된 권한 정책은 인스턴스가 수행할 수 있는 작업을 결정합니다.

예제 2

Amazon Relational Database Service(Amazon RDS)는 Enhanced Monitoring(확장 모니터링)이라는 기능을 지원합니다. 이 기능을 사용하면 Amazon RDS에서 에이전트를 사용하여 데이터베이스 인스턴스를 모니터링할 수 있습니다. 또한 Amazon RDS가 Amazon CloudWatch Logs에 지표를 로그할 수도 있습니다. 이 기능을 사용하려면 서비스 역할을 생성하여 지표를 모니터링하고 로그에 작성할 수 있는 권한을 Amazon RDS에 부여해야 합니다.

Amazon RDS 확장 모니터링을 위한 역할을 생성하려면
  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 역할을 선택한 다음 역할 생성을 선택합니다.

  3. AWS 서비스 역할 유형을 선택한 후 다른 AWS 서비스의 사용 사례에서 RDS 서비스를 선택합니다. RDS - 확장 모니터링(RDS - Enhanced Monitoring)다음(Next)을 차례로 선택합니다.

  4. AmazonRDSEnhancedMonitoringRole 권한 정책을 선택합니다.

  5. 다음을 선택합니다.

  6. 역할 이름(Role name)에 이 역할의 목적을 나타내는 역할 이름을 입력합니다. 역할 이름은 AWS 계정 내에서 고유해야 합니다. 역할 이름이 정책에서 또는 ARN의 일부로 사용되는 경우 역할 이름은 대소문자를 구분합니다. 콘솔에서 고객에게 역할 이름이 표시되는 경우(예: 로그인 프로세스 중) 역할 이름은 대소문자를 구분하지 않습니다. 다양한 엔터티가 역할을 참조할 수 있기 때문에 역할이 생성된 후에는 역할 이름을 편집할 수 없습니다.

  7. (선택 사항)설명에 새 역할에 대한 설명을 입력합니다.

  8. (선택 사항) 태그를 키 값 페어로 연결하여 메타데이터를 사용자에게 추가합니다. IAM에서의 태그 사용에 대한 자세한 내용은 IAM 리소스에 태그 지정 섹션을 참조하세요.

  9. 역할을 검토한 다음 역할 생성을 선택합니다.

그러면 역할이 monitoring.rds.amazonaws.com 서비스에 해당 역할을 수임할 권한을 부여하는 신뢰 정책을 자동으로 얻습니다. 그러면 Amazon RDS는 AmazonRDSEnhancedMonitoringRole 정책에서 허용하는 모든 작업을 수행할 수 있습니다.

Enhanced Monitoring에 액세스하려는 사용자는 다음과 같이 사용자가 RDS 역할을 나열하도록 허용하는 문과 역할을 전달할 수 있도록 허용하는 문이 포함된 정책이 필요합니다. 계정 번호를 사용하여 역할 이름을 6단계에서 입력한 이름으로 바꿉니다.

{ "Sid": "PolicyStatementToAllowUserToListRoles", "Effect": "Allow", "Action": ["iam:ListRoles"], "Resource": "*" }, { "Sid": "PolicyStatementToAllowUserToPassOneSpecificRole", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::account-id:role/RDS-Monitoring-Role" }

이 문을 다른 정책의 문과 결합하거나 고유 정책에 포함시킬 수 있습니다. 사용자가 RDS-로 시작하는 모든 역할을 전달할 수 있도록 지정하려면 다음과 같이 리소스 ARN의 역할 이름을 와일드카드로 바꿉니다.

"Resource": "arn:aws:iam::account-id:role/RDS-*"

AWS CloudTrail 로그의 iam:PassRole 작업

PassRole은 API 호출이 아닙니다. PassRole은 권한입니다. 즉, IAM PassRole에 대해 CloudTrail 로그가 생성되지 않습니다. CloudTrail에서 어떤 AWS 서비스에 어떤 역할이 전달되는지 검토하려면 역할을 받는 AWS 리소스를 생성하거나 수정한 CloudTrail 로그를 검토해야 합니다. 예를 들어, 역할은 생성 시 AWS Lambda 함수에 전달됩니다. CreateFunction 작업에 대한 로그에는 함수에 전달된 역할의 레코드가 표시됩니다.