IAM 역할로 전환

IAM 역할로 전환 (AWS CLI) (Switch to an IAM role)

역할(role)은 필요로 하는 AWS 리소스에 접근할 때 사용할 권한 집합을 지정해요. 그런 면에서 AWS Identity and Access Management(IAM)의 사용자와 비슷해요. 사용자로 로그인하면 특정 권한 집합을 받아요. 하지만 역할에는 로그인하지 않고, 로그인 후에 **역할로 전환(switch to a role)**할 수 있어요. 그러면 원래 사용자 권한을 잠시 내려놓고 역할에 부여된 권한을 사용해요. 역할은 우리 계정이나 다른 AWS 계정에 둘 수 있어요. 역할의 이점과 생성·구성 방법에 대한 자세한 내용은 IAM 역할과 IAM 역할 생성을 참고하세요. 역할을 수임하는 여러 방법은 역할 수임 방법을 참고하세요.

출처: 문서

본문

중요

IAM 사용자의 권한과 수임한 역할의 권한은 합산되지 않아요. 한 번에 하나의 권한 집합만 적용돼요. 역할을 수임하면 이전 사용자·역할 권한을 잠시 내려놓고 역할에 할당된 권한으로 작업해요. 역할에서 나오면 사용자 권한이 자동으로 복원돼요.

IAM 사용자로 로그인한 상태에서 역할로 AWS CLI 명령을 실행할 수 있어요. 또한 이미 역할을 사용 중인 외부 인증 사용자(SAML 또는 OIDC)로 로그인한 상태에서도 역할로 AWS CLI 명령을 실행할 수 있어요. 인스턴스 프로필을 통해 역할이 연결된 Amazon EC2 인스턴스 안에서도 역할로 AWS CLI 명령을 실행할 수 있어요. AWS 계정 루트 사용자로 로그인한 상태에서는 역할을 수임할 수 없어요.

  • 역할 체이닝(Role chaining) — 역할의 권한으로 두 번째 역할에 접근하는 역할 체이닝을 사용할 수도 있어요.

기본적으로 역할 세션은 1시간 동안 지속돼요. assume-role* CLI 작업으로 이 역할을 수임할 때 duration-seconds 파라미터의 값을 지정할 수 있어요. 이 값은 900초(15분)부터 역할의 최대 세션 지속 시간 설정까지 범위가 돼요. 콘솔에서 역할을 전환하면 세션 지속 시간은 최대 1시간으로 제한돼요. 역할의 최대 값을 보는 방법은 역할의 최대 세션 지속 시간 업데이트를 참고하세요.

역할 체이닝을 사용하면 세션 지속 시간이 최대 1시간으로 제한돼요. 그런 다음 duration-seconds 파라미터로 1시간보다 큰 값을 제공하면 작업이 실패해요.

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

개발 환경에서 작업하는 IAM 사용자라고 상상해 보세요. 이 시나리오에서 때때로 AWS CLI로 커맨드 라인에서 프로덕션 환경을 작업해야 해요. 이미 접근 키 자격 증명 집합이 있어요. 이는 표준 IAM 사용자에 할당된 접근 키 쌍일 수 있어요. 또는 SAML·OIDC 페더레이션 프린시펄로 로그인했다면 처음에 할당된 역할의 접근 키 쌍일 수 있어요. 현재 권한이 특정 IAM 역할을 수임할 수 있게 한다면, 그 역할을 AWS CLI 구성 파일의 "프로필(profile)"로 식별할 수 있어요. 그 명령은 원래 아이덴티티가 아니라 지정된 IAM 역할의 권한으로 실행돼요. AWS CLI 명령에서 그 프로필을 지정하면 새 역할을 사용하고 있다는 점에 주의하세요. 이 상황에서는 개발 계정의 원래 권한을 동시에 사용할 수 없어요. 그 이유는 한 번에 하나의 권한 집합만 적용될 수 있기 때문이에요.

참고

보안을 위해 관리자는 AWS CloudTrail 로그로 누가 AWS에서 어떤 작업을 수행했는지 알 수 있어요. 관리자가 역할을 수임할 때 소스 아이덴티티나 역할 세션 이름을 지정하도록 요구할 수도 있어요. 자세한 내용은 sts:SourceIdentity와 sts:RoleSessionName을 참고하세요.

프로덕션 역할로 전환하려면 (AWS CLI)
  1. AWS CLI를 사용해 본 적이 없다면 먼저 기본 CLI 프로필을 구성해야 해요. 커맨드 프롬프트를 열고 IAM 사용자 또는 페더레이션 역할의 접근 키를 사용하도록 AWS CLI 설치를 설정해요. 자세한 내용은 AWS Command Line Interface 사용자 가이드의 AWS Command Line Interface 구성(Configuring the AWS Command Line Interface)을 참고하세요.
  2. 다음과 같이 aws configure 명령을 실행해요.
    aws configure
    
  3. 프롬프트가 뜨면 다음 정보를 제공해요.
    AWS Access Key ID [None]: AKIA…
    AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    Default region name [None]: us-east-2
    Default output format [None]: json
    
  4. Unix 또는 Linux의 .aws/config 파일, 또는 Windows의 C:\Users\USERNAME\.aws\config 파일에 역할용 새 프로필을 만들어요. 다음 예시는 123456789012 계정의 ProductionAccessRole 역할로 전환하는 prodaccess 프로필을 만들어요. 역할 ARN은 역할을 만든 계정 관리자에게 받아요. 이 프로필이 호출되면 AWS CLI는 source_profile의 자격 증명으로 역할의 자격 증명을 요청해요. 그 때문에 source_profile로 참조되는 아이덴티티는 role_arn에 지정된 역할에 대한 sts:AssumeRole 권한이 있어야 해요.
    [profile prodaccess]
        role_arn = arn:aws:iam::123456789012:role/ProductionAccessRole
        source_profile = default
    
  5. 새 프로필을 만든 뒤, --profile prodaccess 파라미터를 지정하는 모든 AWS CLI 명령은 기본 사용자 대신 IAM 역할 ProductionAccessRole에 연결된 권한으로 실행돼요.
    aws iam list-users --profile prodaccess
    
    이 명령은 ProductionAccessRole에 할당된 권한이 현재 AWS 계정의 사용자 나열을 허용하면 동작해요.
  6. 원래 자격 증명이 부여한 권한으로 돌아가려면 --profile 파라미터 없이 명령을 실행해요. AWS CLI는 1단계에서 구성한 기본 프로필의 자격 증명을 다시 사용해요.

자세한 내용은 AWS Command Line Interface 사용자 가이드의 역할 수임(Assuming a Role)을 참고하세요.

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

두 개의 AWS 계정을 사용 중이고, Amazon EC2 인스턴스에서 실행되는 애플리케이션이 두 계정에서 AWS CLI 명령을 실행하도록 허용한다고 상상해 보세요. EC2 인스턴스가 111111111111 계정에 있다고 가정해요. 그 인스턴스는 abcd 인스턴스 프로필 역할을 포함하며, 이 역할은 애플리케이션이 같은 111111111111 계정의 amzn-s3-demo-bucket1 버킷에서 읽기 전용 Amazon S3 작업을 수행하게 해줘요. 하지만 애플리케이션은 222222222222 계정에서 작업을 수행하기 위해 efgh 교차 계정 역할을 수임할 수도 있어야 해요. 이렇게 하려면 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 인스턴스 프로필 역할을 "자격 증명 소스(credential source)"로 식별해요. 그러면 CLI 명령이 원래 abcd 역할이 아니라 efgh 역할의 권한으로 실행돼요.

참고

보안 목적으로 AWS CloudTrail로 계정에서 역할의 사용을 감사할 수 있어요. CloudTrail 로그에서 역할이 다른 프린시펄에 의해 사용될 때 역할 세션을 구분하려면 역할 세션 이름을 사용할 수 있어요. 이 문서에서 설명한 것처럼 AWS CLI가 사용자를 대신해 역할을 수임하면 AWS-CLI-session-nnnnnnnn 형식의 역할 세션 이름이 자동으로 만들어져요. 여기서 nnnnnnnn은 Unix epoch 시간(1970년 1월 1일 자정 이후 경과한 초)을 나타내는 정수예요. 자세한 내용은 AWS CloudTrail 사용자 가이드의 CloudTrail 이벤트 참조를 참고하세요.

EC2 인스턴스 프로필 역할이 교차 계정 역할로 전환하도록 허용 (AWS CLI)

기본 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

새 프로필을 만든 뒤, --profile instancecrossaccount 파라미터를 지정하는 모든 AWS CLI 명령은 222222222222 계정의 efgh 역할에 연결된 권한으로 실행돼요.

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

이 명령은 efgh 역할에 할당된 권한이 현재 AWS 계정의 사용자 나열을 허용하면 동작해요.

111111111111 계정의 원래 EC2 인스턴스 프로필 권한으로 돌아가려면 --profile 파라미터 없이 CLI 명령을 실행해요.

자세한 내용은 AWS Command Line Interface 사용자 가이드의 역할 수임(Assuming a Role)을 참고하세요.

더 알아보기 (Learn more)