IAM 역할로 전환(AWS CLI) - AWS Identity and Access Management

IAM 역할로 전환(AWS CLI)

역할은 필요한 AWS 리소스에 액세스하는 데 사용할 수 있는 일련의 권한을 지정합니다. 이러한 면에서 AWS Identity and Access Management(IAM)의 사용자와 비슷합니다. 사용자로 로그인할 때는 특정 권한이 부여됩니다. 하지만 역할로 로그인하지는 못하기 때문에 일단 사용자로 로그인한 후에 역할로 전환할 수 있습니다. 이 경우 초기의 사용자 권한은 잠시 무효화되고 역할에게 할당된 권한이 부여됩니다. 역할은 자신의 계정 또는 그 밖의 다른 AWS 계정에 속한 것일 수 있습니다. 역할과 역할의 이점, 역할 생성 및 구성 방법에 대한 자세한 내용은 IAM 역할IAM 역할 생성 섹션을 참조하세요. 역할을 수임하는 데 사용할 수 있는 여러 방법을 알아보려면 역할 수임 방법 섹션을 참조하세요.

중요

IAM 사용자의 권한과 수임한 역할의 권한은 누적되지 않습니다. 한 번에 오직 하나의 권한 집합만이 활성화됩니다. 어떤 역할을 수임할 때 이전 사용자 또는 역할 권한은 일시적으로 포기하고 해당 역할에 할당된 권한을 가지고 작업합니다. 역할을 끝내면 사용자 권한이 자동으로 회복됩니다.

IAM 사용자로 로그인한 경우 역할을 사용하여 AWS CLI 명령을 실행할 수 있습니다. 역할을 이미 사용 중인 외부에서 인증된 사용자(SAML 또는 OIDC)로 로그인한 경우에도 역할을 사용하여 AWS CLI 명령을 실행할 수 있습니다. 또한 인스턴스 프로파일 전체에서 명령에 연결된 Amazon EC2 인스턴스 내에서 역할을 사용하여 AWS CLI 명령을 실행할 수 있습니다. AWS 계정 루트 사용자로 로그인되어 있을 때는 역할을 수임할 수 없습니다.

역할 체인 - 역할의 권한을 사용하여 두 번째 역할에 액세스하는 역할 체인을 사용할 수도 있습니다.

기본적으로 역할 세션은 한 시간 동안 지속됩니다. assume-role* CLI 작업을 사용하여 역할을 수임하는 경우 duration-seconds 파라미터에 대한 값을 지정할 수 있습니다. 이 값의 범위는 900초(15분)에서 해당 역할에 대한 최대 세션 기간 설정까지일 수 있습니다. 콘솔에서 역할을 전환하면 세션 시간이 최대 1시간으로 제한됩니다. 역할에 대한 최댓값을 확인하는 방법을 알아보려면 역할의 최대 세션 기간 업데이트 섹션을 참조하세요.

역할 함께 묶기를 사용하는 경우 세션 기간은 최대 1시간으로 제한됩니다. 그런 다음 duration-seconds 파라미터를 사용하여 1시간보다 큰 값을 입력하면 이 작업에 실패합니다.

예제 시나리오: 프로덕션 역할로 전환

개발 환경에서 작업하는 IAM 사용자라고 가정합니다. AWS CLI의 명령줄로 프로덕션 환경에서 작업해야 하는 경우가 종종 있습니다. 사용할 수 있는 액세스 키 자격 증명 세트가 이미 하나 있습니다. 이 세트는 표준 IAM 사용자에게 할당된 액세스 키 페어일 수도 있고, 페더레이션 사용자로 로그인한 경우에는 초기에 할당된 역할에 대한 액세스 키 페어일 수도 있습니다. 현재 권한에 의해 특정 IAM 역할을 수임할 수 있는 능력이 부여되는 경우, AWS CLI 구성 파일의 ‘profile’에서 해당 역할을 식별할 수 있습니다. 그러면 해당 명령은 원래 자격 증명이 아닌 지정된 IAM 역할의 권한으로 실행됩니다. AWS CLI 명령에서 해당 프로파일을 지정하는 경우에는 새 역할을 사용하게 됩니다. 이 경우 개발 계정의 원래 권한을 동시에 사용할 수 없습니다. 한 번에 한 가지 권한 세트만 적용될 수 있기 때문입니다.

참고

보안을 위해 관리자는 AWS CloudTrail 로그를 검토하여 AWS에서 누가 작업을 수행했는지 확인할 수 있습니다. 관리자는 사용자가 역할을 수임할 때 소스 자격 증명이나 역할 세션 이름을 지정하도록 요구할 수 있습니다. 자세한 내용은 sts:SourceIdentitysts:RoleSessionName을(를) 참조하세요.

프로덕션 역할로 전환(AWS CLI)
  1. AWS CLI를 사용한 적이 없을 경우 먼저 기본 CLI 프로필을 구성해야 합니다. 명령 프롬프트를 열고 IAM 사용자 또는 페더레이션 역할의 액세스 키를 사용하도록 AWS CLI 설치를 설정합니다. 자세한 내용은 AWS Command Line Interface 사용 설명서AWS Command Line Interface 구성을 참조하세요.

    다음과 같이 aws configure 명령을 실행합니다.

    aws configure

    요청 메시지가 나타나면 다음 정보를 입력합니다.

    AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY Default region name [None]: us-east-2 Default output format [None]: json
  2. Unix 또는 Linux의 .aws/config 파일, 또는 Windows의 C:\Users\USERNAME\.aws\config 파일에서 역할에 대한 새 프로필을 만듭니다. 다음 예에서는 123456789012 계정의 ProductionAccessRole 역할로 전환하는 prodaccess라는 프로필을 만듭니다. 해당 역할을 만든 계정 관리자에게서 역할 ARN을 받습니다. 이 프로필이 호출되면 AWS CLI에서는 source_profile의 자격 증명을 사용하여 해당 역할의 자격 증명을 요청합니다. 이로 인해 role_arn로 참조되는 자격 증명에는 source_profile에 지정된 역할에 대한 sts:AssumeRole 권한이 있어야 합니다.

    [profile prodaccess] role_arn = arn:aws:iam::123456789012:role/ProductionAccessRole source_profile = default
  3. 새 프로필을 만든 후 --profile prodaccess 파라미터를 지정하는 AWS CLI 명령은 기본 사용자 대신 IAM 역할 ProductionAccessRole에 연결된 권한에 따라 실행됩니다.

    aws iam list-users --profile prodaccess

    이 명령은 ProductionAccessRole에 할당된 권한이 현재 AWS 계정에 사용자를 나열하는 것을 가능하게 하는 경우에 작동합니다.

  4. 원래 자격 증명에 의해 부여된 권한으로 돌아가려면 명령을 --profile 파라미터 없이 실행합니다. AWS CLI에서 다시 기본 프로필의 자격 증명(단계 1에서 구성)이 사용됩니다.

자세한 내용은 AWS Command Line Interface 사용 설명서역할 수임을 참조하세요.

예제 시나리오: 인스턴스 프로파일 역할이 다른 계정의 역할로 전환하도록 허용

두 개의 AWS 계정을 사용 중이고 Amazon EC2 인스턴스에서 실행 중인 특정 애플리케이션이 두 계정 모두에서 AWS CLI 명령을 실행하도록 허용하고자 한다고 가정합니다. EC2 인스턴스가 111111111111 계정에 존재한다고 가정합니다. 해당 인스턴스에는 애플리케이션이 동일한 111111111111 계정 내에 있는 amzn-s3-demo-bucket1 버킷에서 읽기 전용 Amazon S3 작업을 수행하도록 허용하는 abcd 인스턴스 프로파일 역할이 포함되어 있습니다. 하지만 애플리케이션은 efgh 크로스 계정 역할을 수임하여 222222222222 계정에서 작업을 수행하도록 허용되어야 합니다. 이를 위해 abcd EC2 인스턴스 프로파일 역할에 다음과 같은 권한 정책이 있어야 합니다.

계정 111111111111 abcd 역할 권한 정책

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountLevelS3Actions", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetAccountPublicAccessBlock", "s3:ListAccessPoints", "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowListAndReadS3ActionOnMyBucket", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1/*", "arn:aws:s3:::amzn-s3-demo-bucket1" ] }, { "Sid": "AllowIPToAssumeCrossAccountRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::222222222222:role/efgh" } ] }

efgh 크로스 계정 역할이 동일한 222222222222 계정 내에 있는 amzn-s3-demo-bucket2 버킷에서 읽기 전용 Amazon S3 작업을 수행할 수 있다고 가정합니다. 이를 위해 efgh 크로스 계정 역할에 다음과 같은 권한 정책이 있어야 합니다.

계정 222222222222 efgh 역할 권한 정책

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountLevelS3Actions", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetAccountPublicAccessBlock", "s3:ListAccessPoints", "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowListAndReadS3ActionOnMyBucket", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket2/*", "arn:aws:s3:::amzn-s3-demo-bucket2" ] } ] }

efgh 역할은 abcd 인스턴스 프로파일 역할이 이를 수임하도록 허용해야 합니다. 이를 위해 efgh 역할에 다음과 같은 신뢰 정책이 있어야 합니다.

계정 222222222222 efgh 역할 신뢰 정책

{ "Version": "2012-10-17", "Statement": [ { "Sid": "efghTrustPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": {"AWS": "arn:aws:iam::111111111111:role/abcd"} } ] }

계정 222222222222에서 AWS CLI 명령을 실행하려면 CLI 구성 파일을 업데이트해야 합니다. AWS CLI 구성 파일에서 efgh 역할을 “프로파일”로 식별하고 abcd EC2 인스턴스 프로파일 역할을 “자격 증명 소스”로 식별합니다. 그런 다음 CLI 명령은 기존의 abcd 역할이 아닌 efgh 역할의 권한을 사용하여 실행됩니다.

참고

계정에서 보안을 목적으로 AWS CloudTrail을 사용해 계정의 역할 사용을 감사할 수 있습니다. CloudTrail 로그에서 여러 보안 주체가 한 역할을 사용할 때 역할 세션 간을 구분하려면 역할 세션 이름을 사용할 수 있습니다. 이 항목에서 설명하는 것처럼 AWS CLI에서 사용자를 대신해 역할을 수임하면 역할 세션 이름이 AWS-CLI-session-nnnnnnnn으로 자동으로 생성됩니다. 여기서 nnnnnnnnUnix epoch time(1970년 1월 1일 자정 UTC 이후 경과된 초 수)으로 시간을 나타낸 정수입니다. 자세한 내용은 AWS CloudTrail 사용 설명서CloudTrail 이벤트 참조를 참조하세요.

EC2 인스턴스 프로파일 역할의 크로스 계정 역할 전환 허용(AWS CLI)
  1. 기본 CLI 프로파일을 구성할 필요가 없습니다. 대신 EC2 인스턴스 프로파일 메타데이터에서 자격 증명을 불러올 수 있습니다. .aws/config 파일에서 역할에 대한 새 프로파일을 만듭니다. 다음 예에서는 222222222222 계정의 efgh 역할로 전환하는 instancecrossaccount라는 프로필을 만듭니다. 이 프로필이 호출되면 AWS CLI에서는 EC2 인스턴스 프로파일 메타데이터의 자격 증명을 사용하여 해당 역할의 자격 증명을 요청합니다. 이로 인해 EC2 인스턴스 프로파일 역할에는 role_arn에 지정된 역할에 대한 sts:AssumeRole 권한이 있어야 합니다.

    [profile instancecrossaccount] role_arn = arn:aws:iam::222222222222:role/efgh credential_source = Ec2InstanceMetadata
  2. 새 프로필을 만든 후 --profile instancecrossaccount 파라미터를 지정하는 AWS CLI 명령은 222222222222 계정의 efgh 역할에 연결된 권한에 따라 실행됩니다.

    aws s3 ls amzn-s3-demo-bucket2 --profile instancecrossaccount

    이 명령은 efgh 역할에 할당된 권한이 현재 AWS 계정에 사용자를 나열하는 것을 허용하는 경우에 작동합니다.

  3. 111111111111 계정의 원래 EC2 인스턴스 프로파일 권한을 반환하려면 --profile 파라미터 없이 CLI 명령을 실행합니다.

자세한 내용은 AWS Command Line Interface 사용 설명서역할 수임을 참조하세요.