IAM 사용자에게 권한을 부여할 역할 생성
IAM 사용자에게 권한을 부여할 역할 생성
IAM 역할을 사용해 AWS 리소스에 대한 접근을 제공할 수 있어요. IAM 역할을 통해 신뢰하는(trusting) 계정과 다른 AWS 신뢰받는(trusted) 계정 사이에 신뢰 관계를 설정할 수 있어요. 신뢰하는 계정은 접근할 리소스를 소유하고, 신뢰받는 계정은 리소스에 접근해야 하는 사용자가 있는 계정입니다. 하지만 다른 계정이 당신의 계정에 리소스를 소유할 수도 있어요. 예를 들어 신뢰하는 계정이 신뢰받는 계정이 Amazon S3 버킷에 새 개체를 만드는 것처럼 새 리소스를 만들도록 허용할 수 있어요. 이 경우 리소스를 만든 계정이 그 리소스를 소유하고 그 리소스에 접근할 수 있는 사람을 통제합니다.
출처: 문서
본문
신뢰 관계를 만든 후 신뢰받는 계정의 IAM 사용자나 애플리케이션은 AWS Security Token Service(AWS STS) AssumeRole API 작업을 사용할 수 있어요. 이 작업은 계정의 AWS 리소스에 접근할 수 있게 해주는 임시 보안 자격 증명을 제공합니다.
두 계정 모두 당신이 통제할 수도 있고, 사용자가 있는 계정을 써드파티가 통제할 수도 있어요. 사용자가 있는 다른 계정이 당신이 통제하지 않는 AWS 계정이라면 externalId 속성을 사용할 수 있어요. 외부 ID는 당신과 써드파티 계정의 관리자 사이에 합의된 단어나 숫자일 수 있어요. 이 옵션은 요청에 올바른 sts:ExternalID가 포함된 경우에만 사용자가 역할을 수임할 수 있도록 신뢰 정책에 조건을 자동으로 추가합니다. 자세한 내용은 써드파티가 소유한 AWS 계정에 대한 접근 문서를 참고하세요.
역할을 사용해 권한을 위임하는 방법은 역할 용어와 개념 문서를 참고하세요. 서비스 역할을 사용해 서비스가 계정의 리소스에 접근하도록 하는 방법은 AWS 서비스에 권한을 위임할 역할 생성 문서를 참고하세요.
IAM 역할 생성 (콘솔)
AWS Management Console을 사용해 IAM 사용자가 수임할 수 있는 역할을 만들 수 있어요. 예를 들어 조직에 개발 환경과 프로덕션 환경을 분리하는 여러 AWS 계정이 있다고 가정해 보겠습니다. 개발 계정의 사용자가 프로덕션 계정의 리소스에 접근할 수 있게 하는 역할 생성에 대한 개괄적인 정보는 별도 개발 및 프로덕션 계정을 사용하는 예제 시나리오 문서를 참고하세요.
최소 권한
다음 단계를 수행하려면 최소한 다음 IAM 권한이 있어야 해요.
access-analyzer:ValidatePolicyiam:AttachRolePolicyiam:CreatePolicyiam:CreateRoleiam:GetAccountSummaryiam:GetPolicyiam:GetPolicyVersioniam:GetRoleiam:ListAccountAliasesiam:ListAttachedRolePoliciesiam:ListOpenIDConnectProvidersiam:ListPoliciesiam:ListRolePoliciesiam:ListRolesiam:ListRoleTagsiam:ListSAMLProviders
콘솔
- AWS Management Console에 로그인하고 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.
- 콘솔의 탐색 창에서 역할(Roles) 을 선택한 다음 역할 생성(Create role) 을 선택합니다.
- AWS 계정(AWS account) 역할 유형을 선택합니다.
- 계정용 역할을 만들려면 이 계정(This account) 을 선택합니다. 다른 계정용 역할을 만들려면 다른 AWS 계정(Another AWS account) 을 선택하고 리소스 접근 권한을 부여할 계정 ID(Account ID) 를 입력합니다. 지정된 계정의 관리자는 해당 계정의 모든 IAM 사용자에게 이 역할 수임 권한을 부여할 수 있어요. 이를 위해 관리자는
sts:AssumeRole작업 권한을 부여하는 정책을 사용자나 그룹에 연결합니다. 그 정책은 역할의 ARN을Resource로 지정해야 합니다. - 당신이 통제하지 않는 계정의 사용자에게 권한을 부여하고 그 사용자가 프로그래매틱 방식으로 이 역할을 수임한다면 외부 ID 필요(Require external ID) 를 선택합니다. 외부 ID는 당신과 써드파티 계정의 관리자 사이에 합의된 단어나 숫자일 수 있어요. 이 옵션은 요청에 올바른
sts:ExternalID가 포함된 경우에만 사용자가 역할을 수임할 수 있도록 신뢰 정책에 조건을 자동으로 추가합니다. 자세한 내용은 써드파티가 소유한 AWS 계정에 대한 접근 문서를 참고하세요.중요 이 옵션을 선택하면 AWS CLI, Tools for Windows PowerShell, AWS API를 통해서만 역할에 접근할 수 있어요. 신뢰 정책에
externalId조건이 있는 역할로는 AWS 콘솔을 사용해 전환할 수 없기 때문입니다. 하지만 관련 SDK를 사용해 스크립트나 애플리케이션을 작성해 이런 접근을 프로그래매틱 방식으로 만들 수 있어요. 자세한 내용과 샘플 스크립트는 AWS Security Blog의 AWS Management Console에 교차 계정 접근을 활성화하는 방법 문서를 참고하세요. - 다중 인증(MFA)으로 로그인한 사용자로 역할을 제한하려면 MFA 필요(Require MFA) 를 선택합니다. 이렇게 하면 MFA 로그인을 확인하는 조건이 역할의 신뢰 정책에 추가됩니다. 역할을 수임하려는 사용자는 구성된 MFA 기기의 임시 일회용 비밀번호로 로그인해야 해요. MFA 인증이 없는 사용자는 역할을 수임할 수 없습니다. MFA에 대한 자세한 내용은 IAM의 AWS 다중 인증 문서를 참고하세요.
- 다음(Next) 을 선택합니다.
- IAM이 계정의 AWS 관리형 및 고객 관리형 정책 목록을 표시합니다. 권한 정책에 사용할 정책을 선택하거나 정책 생성(Create policy) 을 선택해 새 브라우저 탭을 열고 처음부터 새 정책을 만듭니다. 자세한 내용은 IAM 정책 생성 문서를 참고하세요. 정책을 만든 후 그 탭을 닫고 원래 탭으로 돌아갑니다. 역할을 수임하는 모든 사람에게 부여할 권한 정책 옆의 확인란을 선택합니다. 원하면 지금은 정책을 선택하지 않고 나중에 역할에 정책을 연결할 수도 있어요. 기본적으로 역할에는 권한이 없습니다.
- (선택) 권한 경계(permissions boundary)를 설정합니다. 이는 고급 기능입니다. 권한 경계 설정(Set permissions boundary) 섹션을 열고 권한 경계로 최대 역할 권한 통제(Use a permissions boundary to control the maximum role permissions) 를 선택합니다. 권한 경계에 사용할 정책을 선택합니다.
- 다음(Next) 을 선택합니다.
- 역할 이름(Role name) 에 역할 이름을 입력합니다. 역할 이름은 AWS 계정 내에서 고유해야 합니다. 역할 이름이 정책이나 ARN의 일부로 사용될 때는 대소문자를 구분합니다. 역할 이름이 로그인 과정처럼 콘솔에서 고객에게 표시될 때는 대소문자를 구분하지 않습니다. 여러 개체가 역할을 참조할 수 있으므로 역할을 만든 후에는 이름을 편집할 수 없습니다.
- (선택) 설명(Description) 에 새 역할에 대한 설명을 입력합니다.
- 1단계: 신뢰할 개체 선택(Step 1: Select trusted entities) 또는 2단계: 권한 추가(Step 2: Add permissions) 섹션에서 편집(Edit) 을 선택해 역할의 사용 사례와 권한을 편집합니다. 이전 페이지로 돌아가 편집하게 됩니다.
- (선택) 태그를 키-값 쌍으로 연결해 역할에 메타데이터를 추가합니다. IAM에서 태그 사용에 대한 자세한 내용은 AWS Identity and Access Management 리소스 태그 문서를 참고하세요.
- 역할을 검토한 다음 역할 생성(Create role) 을 선택합니다.
중요 이것은 필요한 구성의 첫 번째 절반일 뿐이라는 점을 기억하세요. 신뢰받는 계정의 개별 사용자에게 콘솔에서 역할로 전환하거나 프로그래매틱 방식으로 역할을 수임할 권한도 부여해야 해요. 이 단계에 대한 자세한 내용은 사용자에게 역할 전환 권한 부여 문서를 참고하세요.
IAM 역할 생성 (AWS CLI)
AWS CLI로 역할을 만드는 것은 여러 단계를 포함합니다. 콘솔로 역할을 만들 때는 많은 단계가 자동으로 수행되지만, AWS CLI에서는 각 단계를 직접 명시적으로 수행해야 해요. 역할을 만든 다음 역할에 권한 정책을 할당해야 합니다. 선택적으로 역할에 권한 경계를 설정할 수도 있어요.
교차 계정 접근용 역할 생성 (AWS CLI)
- 역할을 만듭니다: aws iam create-role
- 역할에 관리형 권한 정책을 연결합니다: aws iam attach-role-policy 또는 역할에 인라인 권한 정책을 만듭니다: aws iam put-role-policy
- (선택) 태그를 연결해 역할에 사용자 지정 속성을 추가합니다: aws iam tag-role 자세한 내용은 IAM 역할 태그 관리 (AWS CLI 또는 AWS API) 문서를 참고하세요.
- (선택) 역할에 권한 경계를 설정합니다: aws iam put-role-permissions-boundary 권한 경계는 역할이 가질 수 있는 최대 권한을 통제합니다. 권한 경계는 AWS의 고급 기능입니다.
다음 예제는 간단한 환경에서 교차 계정 역할을 만드는 처음 두 단계이자 가장 일반적인 단계를 보여줍니다. 이 예제는 123456789012 계정의 모든 사용자가 example_bucket Amazon S3 버킷을 볼 수 있도록 역할을 수임하는 것을 허용합니다. 이 예제는 Windows를 실행하는 클라이언트 컴퓨터를 사용하고 명령줄 인터페이스를 계정 자격 증명과 리전으로 이미 구성했다고 가정합니다. 자세한 내용은 AWS Command Line Interface 구성 문서를 참고하세요.
이 예제에서 역할을 만들 때 첫 번째 명령에 다음 신뢰 정책을 포함하세요. 이 신뢰 정책은 123456789012 계정의 사용자가 SerialNumber와 TokenCode 파라미터로 MFA 인증을 제공하는 경우에만 AssumeRole 작업으로 역할을 수임할 수 있도록 허용합니다. MFA에 대한 자세한 내용은 IAM의 AWS 다중 인증 문서를 참고하세요.
{
"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로 변환됩니다. 이는 누군가 역할이나 사용자를 삭제하고 다시 만들어 권한을 상승시키는 위험을 완화하는 데 도움이 돼요. 콘솔에서는 신뢰 정책이 표시될 때 ARN으로 다시 역변환되므로 이 ID를 보통 볼 수 없습니다. 하지만 역할이나 사용자를 삭제하면 AWS가 ARN으로 다시 매핑할 수 없으므로 콘솔에 주체 ID가 표시됩니다. 따라서 신뢰 정책의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이라는 이름으로 로컬 C: 드라이브의 policies 폴더에 저장해야 합니다. 그런 다음 이전 권한 정책을 PolicyForRole이라는 이름으로 AWS 계정의 고객 관리형 정책으로 저장합니다. 그런 다음 다음 명령으로 역할을 만들고 관리형 정책을 연결할 수 있어요.
# 역할을 만들고, 지정된 계정의 사용자가 역할을 수임할 수 있게 해주는 신뢰 정책 파일을 연결합니다.
$ aws iam create-role --role-name Test-UserAccess-Role --assume-role-policy-document file://C:\policies\trustpolicyforacct123456789012.json
# 역할이 무엇을 할 수 있는지 지정하는 권한 정책(이 예제에서는 관리형 정책)을 역할에 연결합니다.
$ aws iam attach-role-policy --role-name Test-UserAccess-Role --policy-arn arn:aws:iam::123456789012:policy/PolicyForRole
중요 이것은 필요한 구성의 첫 번째 절반일 뿐이라는 점을 기억하세요. 신뢰받는 계정의 개별 사용자에게도 역할로 전환할 권한을 부여해야 해요. 이 단계에 대한 자세한 내용은 사용자에게 역할 전환 권한 부여 문서를 참고하세요.
역할을 만들고 AWS 작업 수행 또는 AWS 리소스 접근 권한을 부여한 후에는 123456789012 계정의 모든 사용자가 역할을 수임할 수 있어요. 자세한 내용은 IAM 역할로 전환 (AWS CLI) 문서를 참고하세요.
IAM 역할 생성 (AWS API)
AWS API로 역할을 만드는 것은 여러 단계를 포함합니다. 콘솔로 역할을 만들 때는 많은 단계가 자동으로 수행되지만, API에서는 각 단계를 직접 명시적으로 수행해야 해요. 역할을 만든 다음 역할에 권한 정책을 할당해야 합니다. 선택적으로 역할에 권한 경계를 설정할 수도 있어요.
코드로 역할 생성 (AWS API)
- 역할을 만듭니다: CreateRole 역할의 신뢰 정책에 대해 파일 위치를 지정할 수 있어요.
- 역할에 관리형 권한 정책을 연결합니다: AttachRolePolicy 또는 역할에 인라인 권한 정책을 만듭니다: PutRolePolicy
중요 이것은 필요한 구성의 첫 번째 절반일 뿐이라는 점을 기억하세요. 신뢰받는 계정의 개별 사용자에게도 역할로 전환할 권한을 부여해야 해요. 이 단계에 대한 자세한 내용은 사용자에게 역할 전환 권한 부여 문서를 참고하세요.
- (선택) 태그를 연결해 역할에 사용자 지정 속성을 추가합니다: TagRole 자세한 내용은 IAM 역할 태그 관리 (AWS CLI 또는 AWS API) 문서를 참고하세요.
- (선택) 역할에 권한 경계를 설정합니다: PutRolePermissionsBoundary 권한 경계는 역할이 가질 수 있는 최대 권한을 통제합니다. 권한 경계는 AWS의 고급 기능입니다.
역할을 만들고 AWS 작업 수행 또는 AWS 리소스 접근 권한을 부여한 후에는 계정의 사용자에게 역할 수임 권한을 부여해야 해요. 역할 수임에 대한 자세한 내용은 IAM 역할로 전환 (AWS API) 문서를 참고하세요.
IAM 역할 생성 (AWS CloudFormation)
AWS CloudFormation에서 IAM 역할을 만드는 방법은 AWS CloudFormation 사용자 가이드의 리소스 및 속성 참조와 예제를 참고하세요.
AWS CloudFormation의 IAM 템플릿에 대한 자세한 내용은 AWS CloudFormation 사용자 가이드의 AWS Identity and Access Management 템플릿 스니펫을 참고하세요.