AWS CloudFormation 스택을 통해 Amazon Simple Storage Service(S3) 버킷을 배포하려고 하면 오류가 발생합니다.
간략한 설명
새로 생성된 버킷의 경우, Amazon S3는 ObjectOwnership을 켜고 기본적으로 BucketOwnerEnforced로 설정합니다.
이 설정을 사용하면 액세스 제어 목록(ACL)이 꺼지고, 버킷 소유자가 자동으로 버킷의 모든 개체를 소유하고 모든 권한을 갖게 됩니다.
따라서 이 설정으로 ACL을 호출하려고 하는 배포에는 다음과 같은 오류가 발생합니다.
Bucket cannot have ACLs set with ObjectOwnership's BucketOwnerEnforced setting (Service: Amazon S3; Status Code: 400; Error Code: InvalidBucketAclWithObjectOwnership; Request ID: VCC82DDB; S3 Extended Request ID: itIVupTUTYxdhtOqXHTRxiwthYK4I/AvFqgNCWSqs8=; Proxy: null)
예를 들어, 다음 배포 템플릿에 이 오류가 발생합니다.
AWSTemplateFormatVersion: "2010-09-09"
Resources:
PortalBucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: LogDeliveryWrite
VersioningConfiguration:
Status: Enabled
WebsiteConfiguration:
IndexDocument: 'index.html'
ErrorDocument: 'error.html'
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
이 문제를 해결하려면 버킷의 ObjectOwnership 값을 변경하여 ACL을 허용하세요.
중요: Amazon S3에 ACL을 사용하는 것을 권장하지 않습니다.
ACL을 반드시 사용해야 할 경우에는 다음 문제 해결 단계를 참고하여 ACL을 허용하세요.
해결 방법
-
ObjectOwnership의 값을 ObjectWriter 또는 BucketOwnerPreferred로 설정합니다.
-
S3 버킷을 배포하려면 다음 템플릿을 사용하세요.
AWSTemplateFormatVersion: "2010-09-09"
Resources:
PortalBucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: LogDeliveryWrite
VersioningConfiguration:
Status: Enabled
WebsiteConfiguration:
IndexDocument: 'index.html'
ErrorDocument: 'error.html'
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
OwnershipControls:
Rules:
- ObjectOwnership: ObjectWriter
이를 통해 버킷에서 ACL을 활성화할 수 있습니다.
ACL을 사용하는 Amazon S3의 기본 동작에 관한 자세한 내용은 미리 알림:
2023년 4월에 Amazon S3 보안 변경 예정을 참고하세요.