AWS CloudFormation에서 권한 오류를 해결하려고 합니다.
간략한 설명
스택을 시작하면 CloudFormation이 스택을 시작한 사용자의 자격 증명을 사용하여 API를 호출합니다. 스택에 대해 서비스 역할이 정의된 경우 CloudFormation이 이 역할을 맡습니다. 위임된 사용자 또는 서비스 역할에는 CloudFormation이 수행할 수 있도록 허용된 작업 목록이 제한되어 있을 수 있습니다. 역할에 리소스를 생성, 삭제 또는 업데이트할 권한이 없는 경우 작업이 실패합니다. 실패로 인해 다음과 같은 유형의 오류 메시지가 표시됩니다.
User: [IAM Role] is not authorized to perform: ec2:RunInstances on resource: [Resource Id] because no identity-based policy allows the ec2:RunInstances action
해결 방법
다음 섹션에서는 자격 증명 기반 및 리소스 기반 정책 오류를 해결하는 방법을 설명합니다.
참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
자격 증명 기반 정책 오류
**호출 역할 확인 **
CloudFormation을 사용하면 사용자를 대신하여 스택의 리소스를 호출하는 서비스 역할을 지정할 수 있습니다. 서비스 역할이 지정되지 않은 경우 CloudFormation은 스택 작업을 시작한 사용자의 AWS Identity and Access Management(IAM) 자격 증명을 사용하여 호출합니다.
AWS CloudFormation 콘솔에서 서비스 역할을 찾습니다.
- AWS CloudFormation 콘솔을 엽니다.
- Stacks(스택) 페이지에서 스택을 선택합니다. 그러면 해당 페이지의 Overview(개요) 섹션이 열립니다.
- **IAM Role(IAM 역할)**에서 값을 확인합니다. 표시되는 값은 이 스택에 대해 구성된 서비스 역할입니다.
값이 없으면 서비스 역할이 구성되지 않은 것입니다. 대신 모든 스택 작업은 스택 작업을 시작한 역할의 자격 증명을 사용하여 수행되었습니다.
서비스 역할을 찾으려면 describe-stacks AWS CLI 명령을 사용하여 RoleARN의 값을 찾으십시오. 이 필드가 비어 있으면 서비스 역할이 정의되지 않은 것입니다. CloudFormation은 스택을 시작하는 데 ]( 역할을 사용합니다[.
누락된 권한 추가
CloudFormation에서 반환된 오류 메시지에서 누락된 정확한 권한을 찾을 수 있습니다. 또는 AWS CloudTrail에서 권한 오류를 검색하여 어떤 API 작업이 거부되었는지 확인할 수 있습니다. 가장 좋은 방법은 오류 생성과 동시에 발생한 이벤트를 검색하는 것입니다. 그 다음, 다음 단계를 수행하여 오류를 해결하십시오.
- 역할과 연결된 IAM 정책에 누락된 권한을 추가합니다. 또는 필요한 권한이 있는 서비스 역할을 사용하도록 전환합니다.
- IAM 역할에 연결된 정책에 작업을 추가합니다. 또는 새 정책을 생성합니다.
참고: 역할의 IAM 정책 시뮬레이터를 사용하여 템플릿에 정의된 리소스를 시작할 권한이 있는지 확인하십시오.
리소스 기반 정책 오류
역할에 자격 증명 기반 권한이 있지만 액세스된 리소스가 해당 역할이 리소스 기반 정책을 수정하도록 허용하지 않는 경우가 있습니다. AWS Key Management Service(AWS KMS) 키 및 Amazon Simple Storage(Amazon S3) 버킷과 같은 리소스는 리소스 기반 정책을 사용합니다. 결과로 다음과 같은 오류가 나타날 수 있습니다.
User: [IAM Role] is not authorized to perform: ec2:RunInstances on resource: [Resource Id] because no resource-based policy allows the ec2:RunInstances action
다음 단계에 따라 오류를 해결하십시오.
**호출 역할 확인 **
- AWS CloudFormation 콘솔을 엽니다.
- Stacks(스택) 페이지에서 스택을 선택합니다.
- 해당 페이지의 Overview(개요) 섹션에서 **IAM Role(IAM 역할)**의 값을 확인합니다. IAM 역할의 값은 이 스택에 대해 구성된 서비스 역할입니다.
값이 없으면 서비스 역할이 구성되지 않은 것입니다. 대신 모든 스택 작업은 스택 작업을 시작한 엔터티의 자격 증명을 사용하여 수행되었습니다.
서비스 역할을 찾으려면 describe-stacks AWS CLI 명령을 사용하여 RoleARN의 값을 찾으십시오. 이 필드가 비어 있으면 서비스 역할이 정의되지 않은 것입니다. CloudFormation은 스택을 시작하는 데 ]( 역할을 사용합니다[.
리소스 기반 정책 업데이트
- 오류를 검토하여 액세스할 수 없는 리소스의 Amazon 리소스 이름(ARN)을 검색합니다. 오류에 리소스의 ARN이 표시되지 않는 경우 관련 CloudTrail 이벤트 로그를 검색하여 요청과 함께 전달된 리소스를 확인하십시오.
- 권한 부여 오류를 사용하여 리소스를 수정하는 데 필요한 권한을 확인합니다.
- 리소스 정책을 검토하고 정책에 호출 역할을 추가합니다. 또는 필요한 명령문을 추가하여 IAM 역할이 리소스에서 작업을 수행할 수 있도록 합니다.
예를 들어 KMS 암호 해독 API를 실행할 때 다음과 같은 오류가 나타날 수 있습니다.
"User: arn:aws:sts::12345678910:assumed-role/AWSServiceRoleForConfig/LambdaDescribeHandlerSession is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:eu-west-1:12345678910:key/********-****-****-****-************ because no resource-based policy allows the kms:Decrypt action"
이 오류 메시지는 AWS KMS 키의 정책이 IAM 역할 AWSServiceRoleForConfig가 kms:Decrypt 작업에 액세스하는 것을 허용하지 않음을 나타냅니다. KMS 정책을 업데이트하여 IAM 역할에 이 작업에 대한 액세스 권한을 부여합니다.
관련 정보
AWS Identity and Access Management를 통한 액세스 제어