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

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

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

출처: 문서

본문

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

경고

  • PassRole 권한은 같은 AWS 계정을 공유하는 서비스에만 IAM 역할을 전달하는 데 사용할 수 있습니다. 계정 A의 역할을 계정 B의 서비스에 전달하려면 먼저 계정 B에서 계정 A의 역할을 수임할 수 있는 IAM 역할을 만든 다음 그 역할을 서비스에 전달해야 합니다. 자세한 내용은 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 역할을 사용합니다. 서비스 연결 역할을 지원하는 서비스는 IAM과 함께 작동하는 AWS 서비스 문서를 참고하세요. 해당 서비스에서 작업을 수행할 때 어떤 서비스가 서비스 연결 역할을 자동으로 만드는지 알아보려면 Yes 링크를 선택해 해당 서비스의 서비스 연결 역할 문서를 확인하세요.

사용자는 역할을 사용해 서비스에 권한을 할당하는 모든 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:PassRole에 iam:GetRole을 추가해 사용자가 전달할 역할의 세부 정보를 얻을 수 있게 합니다. 이 예제에서 사용자는 지정된 계정에 존재하는 이름이 EC2-roles-for-XYZ-로 시작하는 역할만 전달할 수 있습니다:
{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:GetRole",
                "iam:PassRole"
            ],
            "Resource": "arn:aws:iam::111122223333: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 enhanced monitoring용 역할 생성
  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.
  2. 역할(Roles) 을 선택한 다음 역할 생성(Create role) 을 선택합니다.
  3. AWS 서비스(AWS Service) 역할 유형을 선택한 다음 다른 AWS 서비스에 대한 사용 사례(Use cases for other AWS services) 에서 RDS 서비스를 선택합니다. RDS – Enhanced Monitoring 을 선택한 다음 다음(Next) 을 선택합니다.
  4. AmazonRDSEnhancedMonitoringRole 권한 정책을 선택합니다.
  5. 다음(Next) 을 선택합니다.
  6. 역할 이름(Role name) 에 이 역할의 목적을 파악하는 데 도움이 되는 역할 이름을 입력합니다. 역할 이름은 AWS 계정 내에서 고유해야 합니다. 역할 이름이 정책이나 ARN의 일부로 사용될 때는 대소문자를 구분합니다. 역할 이름이 로그인 과정처럼 콘솔에서 고객에게 표시될 때는 대소문자를 구분하지 않습니다. 여러 개체가 역할을 참조할 수 있으므로 역할을 만든 후에는 이름을 편집할 수 없습니다.
  7. (선택) 설명(Description) 에 새 역할에 대한 설명을 입력합니다.
  8. (선택) 키-값 쌍으로 태그를 연결해 역할에 메타데이터를 추가합니다. IAM에서 태그 사용에 대한 자세한 내용은 AWS Identity and Access Management 리소스 태그 문서를 참고하세요.
  9. 역할을 검토한 다음 역할 생성(Create role) 을 선택합니다.

역할은 자동으로 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 로그는 생성되지 않습니다. 어떤 역할이 어떤 AWS 서비스에 전달되었는지 CloudTrail에서 검토하려면 역할을 받는 AWS 리소스를 만들거나 수정한 CloudTrail 로그를 검토해야 합니다. 예를 들어 역할은 AWS Lambda 함수가 생성될 때 그 함수에 전달됩니다. CreateFunction 작업의 로그는 함수에 전달된 역할의 기록을 보여줍니다.

더 알아보기 (Learn more)