CloudFormation에서 "S3 error: Access Denied" 오류 메시지가 표시되는 이유는 무엇입니까?

3분 분량
0

AWS CloudFormation에서 스택을 생성하거나 업데이트할 때 나타나는 Amazon Simple Storage Service(Amazon S3) “Access Denied” 오류를 해결하고 싶습니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

IAM 역할 또는 사용자 정책 문제 해결

CreateChangeSet 또는 CreateStack과 함께 사용한 AWS Identity and Access Management(IAM) ID를 검토합니다. IAM 사용자 또는 역할에 필요한 권한이 있는지 확인하십시오. 필요한 경우 GetObject 권한을 제공하는 정책을 IAM ID에 연결합니다. 다음 예제 정책에는 GetObject 권한이 포함되어 있습니다.

{
   "Version":"2012-10-17",
     "Statement":[
        {
           "Effect":"Allow",
           "Action":[
              "s3:GetObject",
              "s3:GetObjectVersion"
           ],
           "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
        }
     ]
  }

템플릿 파일이 존재하고 오타가 없는지 확인

템플릿 파일이 존재하고 오타가 없는지 확인하려면 다음 단계를 완료하십시오.

중첩된 스택에 지정된 템플릿 URL이 유효한지 확인합니다. list-objects AWS CLI 명령을 실행하여 객체를 나열합니다.

aws s3 list-objects --bucket DOC-EXAMPLE-BUCKET --prefix file-path/template-file.json

템플릿 URL에 추가 공백이 없어야 합니다. 오타로 인해 S3 Access Denied 오류가 발생할 수 있습니다.

S3 버킷 정책에 명시적 거부 명령문이 있는지 확인

S3 버킷에 IAM 역할에 대한 명시적인 Deny 명령문이 있는지 확인하려면 다음 단계를 완료하십시오.

  1. Amazon S3 콘솔을 엽니다.
  2. 버킷 목록에서 템플릿 파일이 들어 있는 버킷을 엽니다.
  3. Permissions(권한) 탭을 선택합니다.
  4. 버킷 정책 세그먼트로 이동합니다.
  5. **"Effect": "Deny"**가 포함된 문을 찾습니다.
  6. 버킷 정책을 편집하여 **s3:GetObject ** 또는 s3:GetObjectVersion에 대한 IAM 역할 액세스를 거부하는 "Effect" :"Deny" 문을 업데이트합니다.
  7. CloudFormation에서 사용 중인 IAM 역할을 제거합니다.
  8. Save(저장)를 선택합니다.
  9. 스택을 다시 생성하거나 업데이트합니다.

S3 버킷 정책에 대한 자세한 내용은 버킷 정책 예제를 참조하십시오.

S3 버킷의 암호화 설정을 확인하고 IAM 역할에 대한 KMS 액세스를 활성화합니다.

버킷이 AWS Key Management Service(KMS) 키를 사용하여 암호화를 활성화하는 경우 S3 Access Denied 오류가 표시될 수 있습니다. 버킷이 암호화된 경우 IAM ID가 KMS 키에 액세스할 수 있도록 키 정책을 업데이트하십시오.

다음 단계를 완료합니다.

  1. AWS KMS 콘솔을 엽니다.
  2. S3 버킷의 객체를 암호화하는 데 사용되는 키를 찾은 다음 Key Policy(키 정책) 탭을 선택합니다.
  3. 다음 설명을 사용하여 정책을 업데이트하십시오.
    {
        "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey"
        ],
        "Effect": "Allow",
        "Principal": {
          "AWS": "arn:aws:iam::111122223333:user/IDENTITY"
        },
        "Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
    }
    참고: IAM ID가 다른 AWS 계정에 있는 경우 Amazon S3 버킷에 사용자 지정 AWS KMS 키를 사용하는 기본 암호화가 있습니다. 사용자가 버킷에서 다운로드하고 버킷에 업로드하도록 허용하려면 어떻게 해야 합니까?를 참조하십시오.

템플릿 파일의 객체 ACL 권한 확인

다른 계정에서 템플릿 파일을 업로드했지만 소스 계정이 파일을 소유하는 경우가 있습니다. 이 작업을 수행하면 대상 계정의 사용자가 소스 계정의 템플릿에 액세스할 수 없습니다. 이 문제를 해결하려면 템플릿 파일을 S3 버킷에 복사하여 버킷 소유자에게 템플릿에 대한 전체 액세스 권한을 부여하십시오.

다음 put-object AWS CLI 명령을 실행하여 버킷에 대한 액세스 권한을 부여합니다.

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key key-name --body path-to-file --acl bucket-owner-full-control

액세스 제어 목록(ACL)에 대한 자세한 내용은 객체 소유권 제어 및 버킷의 ACL 비활성화를 참조하십시오.

AWS 공식
AWS 공식업데이트됨 일 년 전