내용으로 건너뛰기

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) 사용자 또는 역할에 필요한 권한이 있는지 확인하십시오. IAM ID에 GetObject 권한을 제공하는 정책을 연결해야 할 수 있습니다. 다음 예제 정책에는 GetObject 권한이 포함되어 있습니다.

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

참고: amzn-s3-demo-bucket을 버킷으로 바꾸십시오.

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

템플릿 파일이 존재하고 오타가 없는지 확인하려면 list-objects AWS CLI 명령을 실행합니다.

aws s3 list-objects --bucket amzn-s3-demo-bucket --prefix file-path/template-file.json

참고: amzn-s3-demo-bucket을 버킷으로 바꾸고 file-path/template-file.json을 파일 경로 및 템플릿 파일로 바꾸십시오. 템플릿 URL에 추가 공백이 포함되어 있지 않은지 확인하십시오. 오타로 인해 ‘S3 Access Denied’ 오류가 발생할 수 있습니다.

템플릿 파일이 비어 있지 않은지 확인

템플릿 파일이 존재하지만 비어 있는 경우 ‘S3 Access Denied’ 오류가 발생할 수 있습니다. 템플릿 파일이 비어 있는지 확인하려면 get-object AWS CLI 명령을 실행합니다.

aws s3api get-object --bucket amzn-s3-demo-bucket --key key-name template-file.txt

참고: amzn-s3-demo-bucket을 버킷으로, key-name을 키 이름으로, template-file.txt를 템플릿 파일로 바꾸십시오.

그런 다음, 템플릿 파일을 엽니다.

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

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

  1. Amazon S3 콘솔을 엽니다.
  2. 탐색 창에서 버킷을 선택합니다.
  3. 버킷 드롭다운 목록에서 템플릿 파일이 포함된 버킷을 선택합니다.
  4. 권한 탭을 선택합니다.
  5. 버킷 정책에서 편집을 선택합니다.
  6. **"Effect": "Deny"**가 포함된 명령문을 검색합니다.
  7. "Effect": "Deny" 명령문 중에서 s3:GetObject 또는 s3:GetObjectVersion에 대한 IAM 역할 액세스를 거부하는 문을 업데이트합니다.
  8. CloudFormation에서 사용하는 IAM 역할을 제거합니다.
  9. 변경 사항 저장을 선택합니다.
  10. 스택을 다시 만들거나 업데이트합니다.

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

S3 버킷의 암호화 설정을 검증하고 IAM 역할에 대한 KMS 액세스 활성화

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

다음 단계를 완료하십시오.

  1. AWS KMS 콘솔을 엽니다.
  2. 탐색 창에서 고객 관리형 키를 선택합니다.
  3. KMS 키 목록에서 s3 객체를 암호화하는 키의 별칭 또는 키 ID를 선택한 다음, 키 정책 탭을 선택합니다.
  4. 다음 명령문을 사용하여 정책을 업데이트합니다.
{    "Action": [
      "kms:Decrypt",
      "kms:GenerateDataKey"
    ],
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::111122223333:user/IDENTITY"
    },
    "Resource": "arn:aws:kms:aa-example-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
}

참고: arn:aws:iam::111122223333:user/IDENTITY를 IAM 사용자 Amazon 리소스 이름(ARN)으로 바꾸고 arn:aws:kms:aa-example-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd를 KMS ARN으로 바꾸십시오. IAM ID가 다른 AWS 계정에 있는 경우 Amazon S3 버킷에 사용자 지정 AWS KMS 키를 사용하는 기본 암호화가 있습니다. 사용자가 버킷에서 다운로드하고 버킷에 업로드하도록 허용하려면 어떻게 해야 합니까?를 참조하십시오.

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

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

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

aws s3api put-object --bucket amzn-s3-demo-bucket --key key-name --body path-to-file --acl bucket-owner-full-control

참고: amzn-s3-demo-bucket을 버킷으로, key-name을 키 이름으로, path-to-file을 파일 경로로 바꾸십시오.

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

AWS 공식업데이트됨 4달 전
댓글 없음

관련 콘텐츠