역할을 만들어 IAM 사용자에게 권한 위임 - AWS Identity and Access Management

역할을 만들어 IAM 사용자에게 권한 위임

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

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

계정은 둘 다 직접 제어할 수 있거나 사용자가 속한 계정의 경우 타사가 제어할 수 있습니다. 사용자가 있는 다른 계정이 귀하가 제어하지 않는 AWS 계정에 있는 경우 externalId 속성을 사용할 수 있습니다. 외부 ID는 나와 타사 계정의 관리자 간에 합의한 숫자 또는 단어가 될 수 있습니다. 이 옵션은 요청에 올바른 sts:ExternalID가 포함된 경우에만 사용자가 역할을 맡을 수 있도록 허용하는 조건을 신뢰 정책에 자동으로 추가합니다. 자세한 내용은 AWS 리소스에 대한 액세스를 타사에 부여할 때 외부 ID를 사용하는 방법 단원을 참조하십시오.

역할을 사용해 권한을 위임하는 방법에 대한 자세한 내용은 역할 용어 및 개념 단원을 참조하십시오. 서비스 연결을 사용하여 서비스가 해당 계정의 리소스에 액세스할 수 있도록 허용하는 방법은 AWS 서비스에 대한 권한을 위임할 역할 생성 단원을 참조하십시오.

IAM 역할 만들기(콘솔 사용)

AWS Management 콘솔을 사용해 IAM 사용자가 수임할 수 있는 역할을 만들 수 있습니다. 예를 들면 프로덕션 환경에서 개발 환경을 격리하기 위해 조직이 여러 개의 AWS 계정을 갖고 있다고 가정합시다. 개발 계정의 사용자가 프로덕션 계정의 리소스에 액세스하도록 허용하는 역할을 설정하고 사용하는데 필요한 단계에 대한 자세한 설명을 보려면, 분리된 개발 및 프로덕션 계정을 사용한 예제 시나리오 단원을 참조하십시오.

역할을 만들려면(콘솔 사용)

  1. AWS Management 콘솔에 로그인한 다음 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

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

  3. 다른 AWS 계정 역할 유형을 선택합니다.

  4. 계정 ID에 리소스에 대한 액세스 권한을 부여하려는 AWS 계정 ID를 입력합니다.

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

  5. 통제권이 없는 계정의 사용자에게 권한을 부여하려면 사용자는 이 역할을 프로그래밍 방식으로 가정하고 Require external ID(외부 ID 필요)를 선택합니다. 외부 ID는 나와 타사 계정의 관리자 간에 합의한 숫자 또는 단어가 될 수 있습니다. 이 옵션은 요청에 올바른 sts:ExternalID가 포함된 경우에만 사용자가 역할을 맡을 수 있도록 허용하는 조건을 신뢰 정책에 자동으로 추가합니다. 자세한 내용은 AWS 리소스에 대한 액세스를 타사에 부여할 때 외부 ID를 사용하는 방법 단원을 참조하십시오.

    중요

    이 옵션을 선택하면 AWS CLI, Windows PowerShell용 도구 또는 AWS API를 통해 이 역할로만 액세스가 제한됩니다. 이는 AWS 콘솔을 사용해 해당 신뢰 정책에 externalId 조건이 있는 역할로 전환할 수 없기 때문입니다. 하지만 관련 SDK를 통해 스크립트나 애플리케이션을 작성하여 프로그래밍 방식으로 이러한 종류의 액세스를 만들 수 있습니다. 자세한 내용 및 샘플 스크립트는 AWS 보안 블로그AWS Management 콘솔에 대한 교차 계정 액세스를 가능하게 하는 방법 단원을 참조하십시오.

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

  7. Next: Permissions(다음: 권한)을 선택하십시오.

  8. IAM은 계정의 AWS 관리형 또는 사용자 관리형 정책 목록을 포함합니다. 권한 정책을 사용하기 위한 정책을 선택하거나 정책 생성을 선택하여 새 브라우저 탭을 열고 완전히 새로운 정책을 생성합니다. 자세한 내용은 IAM 정책 만들기(콘솔) 절차의 4단계 단원을 참조하십시오. 정책을 생성하면 탭을 닫고 원래 탭으로 돌아갑니다. 누구든지 역할에게 위임하려는 권한 정책 옆의 확인란을 선택합니다. 원할 경우, 여기서 정책을 선택하지 않고 나중에 정책을 만들어서 역할에 연결할 수 있습니다. 기본적으로 역할은 권한이 없습니다.

  9. (선택 사항) 권한 경계로서 설정됨. 이는 고급 기능입니다.

    Set permissions boundary(권한 경계 설정) 섹션을 열고 Use a permissions boundary to control the maximum role permissions(최대 역할 권한을 관리하기 위한 권한 경계 사용)을 선택합니다. 정책을 선택하여 권한 경계를 사용하십시오.

  10. 다음: 태그를 선택합니다.

  11. (선택 사항) 태그를 키–값 페어로 연결하여 메타데이터를 역할에 추가합니다. IAM에서의 태그 사용에 대한 자세한 내용은 IAM 사용자 및 역할 태그 지정 단원을 참조하십시오.

  12. [Next: Review]를 선택합니다.

  13. Role name에 역할의 이름을 입력합니다. 역할 이름은 AWS 계정 내에서 고유해야 합니다. 대소문자는 구별하지 않습니다. 예를 들어, 이름이 PRODROLEprodrole, 두 가지로 지정된 역할을 만들 수는 없습니다. 기타 AWS 리소스가 역할을 참조할 수 있기 때문에 역할이 생성된 후에는 역할 이름을 편집할 수 없습니다.

  14. (선택 사항) [Role description]에 새 역할에 대한 설명을 입력합니다.

  15. 역할을 검토한 다음 [Create role]을 선택합니다.

    중요

    필요한 구성의 절반이 끝났습니다. 이제 신뢰할 수 있는 계정의 개별 사용자에게 콘솔의 역할로 전환하거나 역할을 프로그래밍 방식으로 위임할 수 있는 권한을 부여해야 합니다. 이 단계에 대한 자세한 내용은 사용자에 대한 역할 전환 권한 부여 단원을 참조하십시오.

IAM 역할 생성(AWS CLI)

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

교차 계정 액세스에 대한 역할을 만들려면(AWS CLI)

  1. 역할 생성: aws iam create-role

  2. 역할에 관리형 권한 정책 연결: aws iam attach-role-policy

    또는

    역할을 위한 인라인 권한 정책 생성: aws iam put-role-policy

  3. (선택 사항) 태그를 연결하여 사용자 지정 속성을 역할에 추가: aws iam tag-role

    자세한 내용은 IAM 엔터티에 대한 태그 관리(AWS CLI 또는 AWS API) 단원을 참조하십시오.

  4. (선택 사항) 역할(aws iam put-role-permissions-boundary)에 대한 권한 경계를 설정합니다.

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

다음 예는 단순한 환경에서 교차 계정 역할을 생성하는 가장 일반적인 단계 중 첫 두 단계를 보여줍니다. 이 예제는 123456789012 계정에 있는 모든 사용자가 역할을 가정하고 example_bucket Amazon S3 버킷을 볼 수 있도록 허용합니다. 이 예제에서도 Windows가 구동되는 클라이언트 컴퓨터를 사용 중이며 명령줄 인터페이스를 계정 자격 증명 및 리전으로 이미 구성했다고 가정합니다. 자세한 내용은 AWS 명령줄 인터페이스 구성 단원을 참조하십시오.

이 예제는 역할을 생성할 경우 첫 번째 명령의 다음 신뢰 정책을 포함합니다. 이 신뢰 정책은 123456789012 계정에서 사용자가 AssumeRole 작업을 사용하여 역할을 가정할 수 있도록 허용합니다. 단, 사용자가 SerialNumberTokenCode 파라미터를 사용하는 MFA 인증을 제공하는 경우에만 허용합니다. MFA에 대한 자세한 내용은 AWS에서 멀티 팩터 인증(MFA) 사용하기 단원을 참조하십시오.

{ "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 작업만 수행하도록 허용합니다.

{ "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:role/PolicyForRole
중요

필요한 구성의 절반이 끝났습니다. 이제 신뢰할 수 있는 계정의 개별 사용자에게 역할로 전환할 수 있는 권한을 부여해야 합니다. 이 단계에 대한 자세한 내용은 사용자에 대한 역할 전환 권한 부여 단원을 참조하십시오.

역할을 만든 다음 AWS 작업을 수행하거나 AWS 리소스에 액세스할 수 있는 권한을 부여해야 123456789012 계정의 사용자가 역할을 위임할 수 있습니다. 자세한 내용은 IAM 역할로 전환하기(AWS CLI) 단원을 참조하십시오.

IAM 역할 만들기(AWS API)

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

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

  1. 역할 만들기: CreateRole

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

  2. 역할에 관리형 권한 정책 연결: AttachRolePolicy

    또는

    역할을 위한 인라인 권한 정책 생성: PutRolePolicy

    중요

    필요한 구성의 절반이 끝났습니다. 이제 신뢰할 수 있는 계정의 개별 사용자에게 역할로 전환할 수 있는 권한을 부여해야 합니다. 이 단계에 대한 자세한 내용은 사용자에 대한 역할 전환 권한 부여 단원을 참조하십시오.

  3. (선택 사항) 태그를 연결하여 사용자 지정 속성을 사용자에게 추가: TagRole

    자세한 내용은 IAM 엔터티에 대한 태그 관리(AWS CLI 또는 AWS API) 단원을 참조하십시오.

  4. (선택 사항) 역할(PutRolePermissionsBoundary)에 대한 권한 경계를 설정합니다.

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

역할을 만든 다음 AWS 작업을 수행하거나 AWS 리소스에 액세스할 수 있는 권한을 부여해야 계정의 사용자에게 권한을 부여하여 역할을 위임할 수 있습니다. 역할 위임하기에 대한 자세한 내용은 IAM 역할(AWS API)로 전환하기 단원을 참조하십시오.