

# IAM 역할로 전환(AWS CLI)
<a name="id_roles_use_switch-role-cli"></a>

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

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

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

[**역할 체인**](id_roles.md#iam-term-role-chaining) - 역할의 권한을 사용하여 두 번째 역할에 액세스하는 역할 체인을 사용할 수도 있습니다.

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

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

## 예제 시나리오: 프로덕션 역할로 전환
<a name="switch-role-cli-scenario-prod-env"></a>

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

**참고**  
보안을 위해 관리자는 [AWS CloudTrail 로그를 검토](cloudtrail-integration.md#cloudtrail-integration_signin-tempcreds)하여 AWS에서 누가 작업을 수행했는지 확인할 수 있습니다. 관리자는 사용자가 역할을 수임할 때 소스 자격 증명이나 역할 세션 이름을 지정하도록 요구할 수 있습니다. 자세한 내용은 [`sts:SourceIdentity`](reference_policies_iam-condition-keys.md#ck_sourceidentity) 및 [`sts:RoleSessionName`](reference_policies_iam-condition-keys.md#ck_rolesessionname)을(를) 참조하세요.

**프로덕션 역할로 전환(AWS CLI)**

1. <a name="step-configure-default"></a>AWS CLI를 사용한 적이 없을 경우 먼저 기본 CLI 프로필을 구성해야 합니다. 명령 프롬프트를 열고 IAM 사용자 또는 페더레이션 역할의 액세스 키를 사용하도록 AWS CLI 설치를 설정합니다. 자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [AWS Command Line Interface 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-quick-configuration)을 참조하세요.

   다음과 같이 [aws configure](https://docs.aws.amazon.com/cli/latest/reference/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
   ```

1. 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
   ```

1. 새 프로필을 만든 후 `--profile prodaccess` 파라미터를 지정하는 AWS CLI 명령은 기본 사용자 대신 IAM 역할 `ProductionAccessRole`에 연결된 권한에 따라 실행됩니다.

   ```
   aws iam list-users --profile prodaccess
   ```

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

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

자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [역할 수임](https://docs.aws.amazon.com/cli/latest/userguide/cli-roles.html)을 참조하세요.

## 예제 시나리오: 인스턴스 프로파일 역할이 다른 계정의 역할로 전환하도록 허용
<a name="switch-role-cli-scenario-ec2-instance"></a>

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

***계정 111111111111 `abcd` 역할 권한 정책***

------
#### [ JSON ]

****  

```
{
    "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` 역할 권한 정책***

------
#### [ JSON ]

****  

```
{
    "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` 역할 신뢰 정책***

------
#### [ JSON ]

****  

```
{
    "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`으로 자동으로 생성됩니다. 여기서 *nnnnnnnn*은 [Unix epoch time](http://wikipedia.org/wiki/Unix_time)(1970년 1월 1일 자정 UTC 이후 경과된 초 수)으로 시간을 나타낸 정수입니다. 자세한 내용은 *AWS CloudTrail 사용 설명서*의 [CloudTrail 이벤트 참조](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/eventreference.html)를 참조하세요.

**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
   ```

1. 새 프로필을 만든 후 `--profile instancecrossaccount` 파라미터를 지정하는 AWS CLI 명령은 `222222222222` 계정의 `efgh` 역할에 연결된 권한에 따라 실행됩니다.

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

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

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

자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [역할 수임](https://docs.aws.amazon.com/cli/latest/userguide/cli-roles.html)을 참조하세요.