

# IAM 사용자에게 권한을 부여할 역할 생성
<a name="id_roles_create_for-user"></a>

IAM 역할을 사용해 AWS 리소스에 대한 액세스 권한을 제공할 수 있습니다. IAM 역할을 사용해 *신뢰하는* 계정과 다른 AWS *신뢰받는* 계정 간에 신뢰 관계를 설정할 수 있습니다. 신뢰하는 계정은 액세스되는 리소스를 소유하고 신뢰받는 계정은 리소스에 대한 액세스가 필요한 사용자를 저장합니다. 그러나, 다른 계정이 해당 계정의 리소스를 소유할 수 있는 가능성이 있습니다. 예를 들어, 신뢰받는 계정은 신뢰 계정이 Amazon S3 버킷의 새로운 객체를 생성하는 것처럼 새로운 리소스를 생성하도록 허용할 수 있습니다. 이러한 경우, 리소스를 생성하는 계정은 리소스를 소유하고 누구에게 리소스에 대한 액세스를 부여할지 제어합니다.

신뢰 관계를 생성한 후 신뢰받는 계정의 IAM 사용자 또는 애플리케이션은 AWS Security Token Service(AWS STS) [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API 작업을 사용할 수 있습니다. 이 작업은 계정의 AWS 리소스에 액세스할 수 있는 임시 보안 자격 증명을 제공합니다.

계정은 둘 다 직접 제어할 수 있거나 사용자가 속한 계정의 경우 타사가 제어할 수 있습니다. 사용자가 있는 다른 계정이 귀하가 제어하지 않는 AWS 계정에 있는 경우 `externalId` 속성을 사용할 수 있습니다. 외부 ID는 나와 서드 파티 계정의 관리자 간에 합의한 숫자 또는 단어가 될 수 있습니다. 이 옵션은 요청에 올바른 `sts:ExternalID`가 포함된 경우에만 사용자가 역할을 맡을 수 있도록 허용하는 조건을 신뢰 정책에 자동으로 추가합니다. 자세한 내용은 [타사가 소유한 AWS 계정에 액세스](id_roles_common-scenarios_third-party.md) 섹션을 참조하세요.

역할을 사용해 권한을 위임하는 방법에 대한 자세한 내용은 [역할 용어 및 개념](id_roles.md#id_roles_terms-and-concepts) 섹션을 참조하세요. 서비스 연결을 사용하여 서비스가 해당 계정의 리소스에 액세스할 수 있도록 허용하는 방법은 [AWS 서비스에 대한 권한을 위임할 역할 생성](id_roles_create_for-service.md) 섹션을 참조하세요.

## IAM 역할 생성(콘솔)
<a name="roles-creatingrole-user-console"></a>

AWS Management Console을 사용하여 IAM 사용자가 수임할 수 있는 역할을 생성할 수 있습니다. 예를 들면 프로덕션 환경에서 개발 환경을 격리하기 위해 조직이 여러 개의 AWS 계정을 갖고 있다고 가정합시다. 개발 계정의 사용자가 프로덕션 계정의 리소스에 액세스할 수 있도록 하는 역할 생성에 대한 개괄적 정보는 [분리된 개발 및 프로덕션 계정을 사용한 예제 시나리오](id_roles_common-scenarios_aws-accounts.md#id_roles_common-scenarios_aws-accounts-example) 섹션을 참조하세요.

**최소 권한**  
다음 단계를 수행하려면 적어도 다음과 같은 IAM 권한이 있어야 합니다.  
`access-analyzer:ValidatePolicy`
`iam:AttachRolePolicy`
`iam:CreatePolicy`
`iam:CreateRole`
`iam:GetAccountSummary`
`iam:GetPolicy`
`iam:GetPolicyVersion`
`iam:GetRole`
`iam:ListAccountAliases`
`iam:ListAttachedRolePolicies`
`iam:ListOpenIDConnectProviders`
`iam:ListPolicies`
`iam:ListRolePolicies`
`iam:ListRoles`
`iam:ListRoleTags`
`iam:ListSAMLProviders`

------
#### [ Console ]

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 IAM 콘솔을 엽니다.

1. 콘솔의 탐색 창에서 **역할**을 선택한 후 **역할 생성**을 선택합니다.

1. **AWS 계정** 역할 유형을 선택합니다.

1. 계정에 대한 역할을 생성하려면 **이 계정(This account)**을 선택합니다. 다른 계정에 대한 역할을 생성하려면 **다른 AWS 계정**을 선택하고 리소스에 대한 액세스 권한을 부여할 **계정 ID**를 입력합니다.

   지정된 계정의 관리자는 해당 계정의 IAM 사용자에게 이 역할을 수임할 수 있는 권한을 부여할 수 있습니다. 이를 위해 관리자는 `sts:AssumeRole` 작업에 대한 권한을 부여하는 정책을 사용자나 그룹에 연결합니다. 이 정책은 역할의 ARN을 `Resource`로 지정해야 합니다.

1. 통제권이 없는 계정의 사용자에게 권한을 부여하려면 사용자는 이 역할을 프로그래밍 방식으로 가정하고 **외부 ID 필요(Require external ID)**를 선택합니다. 외부 ID는 나와 서드 파티 계정의 관리자 간에 합의한 숫자 또는 단어가 될 수 있습니다. 이 옵션은 요청에 올바른 `sts:ExternalID`가 포함된 경우에만 사용자가 역할을 맡을 수 있도록 허용하는 조건을 신뢰 정책에 자동으로 추가합니다. 자세한 내용은 [타사가 소유한 AWS 계정에 액세스](id_roles_common-scenarios_third-party.md) 섹션을 참조하세요.
**중요**  
이 옵션을 선택하면 역할로의 액세스가 AWS CLI, Tools for Windows PowerShell 또는 AWS API를 통해서만 가능하도록 제한됩니다. 이는 AWS 콘솔을 사용해 해당 신뢰 정책에 `externalId` 조건이 있는 역할로 전환할 수 없기 때문입니다. 하지만 관련 SDK를 통해 스크립트나 애플리케이션을 작성하여 프로그래밍 방식으로 이러한 종류의 액세스를 만들 수 있습니다. 자세한 내용 및 샘플 스크립트는 AWS 보안 블로그의 [AWS Management Console에 대한 크로스 계정 액세스를 가능하게 하는 방법](https://aws.amazon.com/blogs/security/how-to-enable-cross-account-access-to-the-aws-management-console)을 참조하세요.

1. 멀티 팩터 인증(MFA)으로 로그인하는 사용자로 역할을 제한하려면, **Require MFA(MFA 필요)**를 선택합니다. 이렇게 하면 MFA 로그인을 확인하는 역할의 신뢰 정책에 조건이 추가됩니다. 역할을 맡으려는 사용자는 구성된 MFA 디바이스에서 임시 일회용 암호로 로그인해야 합니다. MFA 인증을 사용하지 않는 사용자는 역할을 맡을 수 없습니다. MFA에 대한 자세한 내용은 [IAM의 AWS 다중 인증](id_credentials_mfa.md) 섹션을 참조하세요.

1. **다음**을 선택합니다.

1. IAM은 계정의 AWS 관리형 또는 고객 관리형 정책 목록을 포함합니다. 권한 정책을 사용하기 위한 정책을 선택하거나 **정책 생성**을 선택하여 새 브라우저 탭을 열고 완전히 새로운 정책을 생성합니다. 자세한 내용은 [IAM 정책 생성](access_policies_create-console.md#access_policies_create-start) 섹션을 참조하세요. 정책을 생성하면 탭을 닫고 원래 탭으로 돌아갑니다. 역할을 위임하려는 대상에 제공할 권한 정책 옆의 확인란을 선택하세요. 원할 경우, 여기서 정책을 선택하지 않고 나중에 정책을 만들어서 역할에 연결할 수 있습니다. 기본적으로 역할은 권한이 없습니다.

1. (선택 사항) [권한 경계](access_policies_boundaries.md)를 선택합니다. 이는 고급 기능입니다.

   **권한 경계 설정** 섹션을 열고 **최대 역할 권한을 관리하기 위한 권한 경계 사용**을 선택합니다. 정책을 선택하여 권한 경계를 사용합니다.

1. **다음**을 선택합니다.

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

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

1. **1단계: 신뢰할 수 있는 엔터티 선택(Step 1: Select trusted entities)** 또는 **2단계: 권한 추가(Step 2: Add permissions)** 섹션에서 **편집(Edit)**을 선택하여 역할에 대한 사용 사례와 권한을 편집합니다. 편집을 위해 이전 페이지로 돌아갑니다.

1. (선택 사항) 태그를 키 값 페어로 연결하여 메타데이터를 역할에 추가합니다. IAM에서의 태그 사용에 대한 자세한 내용은 [AWS Identity and Access Management 리소스용 태그](id_tags.md) 섹션을 참조하세요.

1. 역할을 검토한 다음 **역할 생성**을 선택합니다.
**중요**  
필요한 구성의 절반이 끝났습니다. 이제 신뢰할 수 있는 계정의 개별 사용자에게 콘솔의 역할로 전환하거나 역할을 프로그래밍 방식으로 위임할 수 있는 권한을 부여해야 합니다. 이 단계에 대한 자세한 내용은 [사용자에게 역할을 전환할 권한 부여](id_roles_use_permissions-to-switch.md) 섹션을 참조하세요.

------

## IAM 역할 생성(AWS CLI)
<a name="roles-creatingrole-user-cli"></a>

AWS CLI에서 역할을 만들려면 여러 단계를 거쳐야 합니다. 콘솔을 사용하여 역할을 만들 때는 많은 단계가 자동으로 수행되지만 AWS CLI를 사용하면 각 단계를 직접 명시적으로 수행해야 합니다. 역할을 만든 다음 권한 정책을 역할에 할당해야 합니다. 선택적으로 역할에 대한 [권한 경계](access_policies_boundaries.md)를 설정할 수 있습니다.

**크로스 계정 액세스에 대한 역할을 만들려면(AWS CLI)**

1. 역할 생성: [aws iam create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html)

1. 역할에 관리형 권한 정책 연결: [aws iam attach-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/attach-role-policy.html)

    또는

   역할을 위한 인라인 권한 정책 생성: [aws iam put-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/put-role-policy.html)

1. (선택 사항) 태그를 연결하여 사용자 지정 속성을 역할에 추가: [aws iam tag-role](https://docs.aws.amazon.com/cli/latest/reference/iam/tag-role.html)

   자세한 내용은 [IAM 역할의 태그 관리(AWS CLI 또는 AWS API)](id_tags_roles.md#id_tags_roles_procs-cli-api) 섹션을 참조하세요.

1. (선택 사항) 역할([aws iam put-role-permissions-boundary](https://docs.aws.amazon.com/cli/latest/reference/iam/put-role-permissions-boundary.html))에 대한 [권한 경계](access_policies_boundaries.md)를 설정합니다.

   이 권한 경계는 역할이 가질 수 있는 최대 권한을 관리합니다. 권한 경계는 고급 AWS 기능입니다.

다음 예는 단순한 환경에서 크로스 계정 역할을 생성하는 가장 일반적인 단계 중 첫 두 단계를 보여줍니다. 이 예제는 `123456789012` 계정에 있는 모든 사용자가 역할을 수임하고 `example_bucket` Amazon S3 버킷을 볼 수 있도록 허용합니다. 이 예제에서도 Windows가 구동되는 클라이언트 컴퓨터를 사용 중이며 명령줄 인터페이스를 계정 자격 증명 및 리전으로 이미 구성했다고 가정합니다. 자세한 내용은 [AWS 명령줄 인터페이스 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)을 참조하세요.

이 예제는 역할을 생성할 경우 첫 번째 명령의 다음 신뢰 정책을 포함합니다. 이 신뢰 정책은 `123456789012` 계정에서 사용자가 `AssumeRole` 작업을 사용하여 역할을 가정할 수 있도록 허용합니다. 단, 사용자가 `SerialNumber` 및 `TokenCode` 파라미터를 사용하는 MFA 인증을 제공하는 경우에만 허용합니다. MFA에 대한 자세한 내용은 [IAM의 AWS 다중 인증](id_credentials_mfa.md) 섹션을 참조하세요.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
      {
          "Effect": "Allow",
          "Principal": { "AWS": "arn:aws:iam::123456789012:root" },
          "Action": "sts:AssumeRole",
          "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } }
      }
  ]
}
```

------

**중요**  
`Principal` 요소에 특정 IAM 역할 또는 사용자에 대한 ARN이 포함되어 있으면, 정책을 저장할 때 해당 ARN이 고유 보안 주체 ID로 변환됩니다. 그러면 누군가가 해당 역할 또는 사용자를 제거하고 다시 만들어 본인의 권한을 에스컬레이션할 위험을 완화할 수 있습니다. 일반적으로 콘솔에서는 이 ID가 보이지 않습니다. 신뢰 정책이 표시될 때 해당 ARN으로 다시 역변환되기 때문입니다. 그러나 역할 또는 사용자를 삭제할 경우, 보안 주체 ID가 콘솔에 표시됩니다. AWS에서 더 이상 이를 ARN에 다시 매핑할 수 없기 때문입니다. 따라서 신뢰 정책의 `Principal` 요소에서 참조된 사용자 또는 역할을 삭제하고 다시 생성하는 경우, ARN을 바꾸도록 역할을 편집해야 합니다.

두 번째 명령을 사용할 경우, 기존 관리형 정책을 역할에 연결해야 합니다. 다음 권한 정책에서는 역할을 수임하는 사용자가 `example_bucket` Amazon S3 버킷에서 `ListBucket` 작업만 수행하도록 허용합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
      {
          "Effect": "Allow",
          "Action": "s3:ListBucket",
          "Resource": "arn:aws:s3:::example_bucket"
      }
  ]
}
```

------

이 `Test-UserAccess-Role` 역할을 생성하기 위해서는 이전 신뢰 정책을 `trustpolicyforacct123456789012.json` 이름으로 로컬 `policies` 드라이브의 `C:` 폴더에 먼저 저장해야 합니다. 그런 다음 이전 권한 정책을 고객 관리형 정책으로서 `PolicyForRole` 이름으로 AWS 계정에 저장합니다. 그러고 나면 다음 명령을 사용하여 역할을 만들고 관리형 정책을 연결합니다.

```
# Create the role and attach the trust policy file that allows users in the specified account to assume the role.
$ aws iam create-role --role-name Test-UserAccess-Role --assume-role-policy-document file://C:\policies\trustpolicyforacct123456789012.json

# Attach the permissions policy (in this example a managed policy) to the role to specify what it is allowed to do.
$ aws iam attach-role-policy --role-name Test-UserAccess-Role --policy-arn arn:aws:iam::123456789012:policy/PolicyForRole
```

**중요**  
필요한 구성의 절반이 끝났습니다. 이제 신뢰할 수 있는 계정의 개별 사용자에게 역할로 전환할 수 있는 권한을 부여해야 합니다. 이 단계에 대한 자세한 내용은 [사용자에게 역할을 전환할 권한 부여](id_roles_use_permissions-to-switch.md) 섹션을 참조하세요.

역할을 만든 다음 AWS 작업을 수행하거나 AWS 리소스에 액세스할 수 있는 권한을 부여해야 `123456789012` 계정의 사용자가 역할을 위임할 수 있습니다. 자세한 내용은 [IAM 역할로 전환(AWS CLI)](id_roles_use_switch-role-cli.md) 섹션을 참조하세요.

## IAM 역할 생성(AWS API)
<a name="roles-creatingrole-user-api"></a>

AWS API에서 역할을 만들려면 여러 단계를 거쳐야 합니다. 콘솔을 사용하여 역할을 만들 때는 많은 단계가 자동으로 수행되지만 API를 사용하면 각 단계를 직접 명시적으로 수행해야 합니다. 역할을 만든 다음 권한 정책을 역할에 할당해야 합니다. 선택적으로 역할에 대한 [권한 경계](access_policies_boundaries.md)를 설정할 수 있습니다.

**코드로 역할을 만들려면(AWS API)**

1. 역할 만들기: [CreateRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html)

   역할의 신뢰 정책에 대해 파일 위치를 지정할 수 있습니다.

1. 역할에 관리형 권한 정책 연결: [AttachRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AttachRolePolicy.html)

   또는

   역할을 위한 인라인 권한 정책 생성: [PutRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_PutRolePolicy.html)
**중요**  
필요한 구성의 절반이 끝났습니다. 이제 신뢰할 수 있는 계정의 개별 사용자에게 역할로 전환할 수 있는 권한을 부여해야 합니다. 이 단계에 대한 자세한 내용은 [사용자에게 역할을 전환할 권한 부여](id_roles_use_permissions-to-switch.md) 섹션을 참조하세요.

1. (선택 사항) 태그를 연결하여 사용자 지정 속성을 사용자에게 추가: [TagRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_TagRole.html)

   자세한 내용은 [IAM 사용자의 태그 관리(AWS CLI 또는 AWS API)](id_tags_users.md#id_tags_users_procs-cli-api) 섹션을 참조하세요.

1. (선택 사항) 역할([PutRolePermissionsBoundary](https://docs.aws.amazon.com/IAM/latest/APIReference/API_PutRolePermissionsBoundary.html))에 대한 [권한 경계](access_policies_boundaries.md)를 설정합니다.

   이 권한 경계는 역할이 가질 수 있는 최대 권한을 관리합니다. 권한 경계는 고급 AWS 기능입니다.

역할을 만든 다음 AWS 작업을 수행하거나 AWS 리소스에 액세스할 수 있는 권한을 부여해야 계정의 사용자에게 권한을 부여하여 역할을 위임할 수 있습니다. 역할 위임하기에 대한 자세한 내용은 [IAM 역할로 전환(AWS API)](id_roles_use_switch-role-api.md) 섹션을 참조하세요.

## IAM 역할 생성(AWS CloudFormation)
<a name="roles_creatingrole-user-cloudformation"></a>

AWS CloudFormation에서 IAM 역할을 생성하는 방법에 대한 자세한 내용은 *AWS CloudFormation 사용 설명서*의 [리소스 및 속성 참조](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html)와 [예제](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html#aws-resource-iam-role--examples)를 참조하세요.

AWS CloudFormation의 IAM 템플릿에 관한 자세한 정보는 *AWS CloudFormation 사용 설명서*의 [AWS Identity and Access Management 템플릿 코드 조각](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-iam.html)을 참조하세요.