문제 해결 - Amazon Simple Storage Service

문제 해결

S3 객체 소유권에 대해 버킷 소유자 적용 설정을 적용하면 액세스 제어 목록(ACL)이 비활성화되고 버킷 소유자는 버킷의 모든 객체를 자동으로 소유합니다. ACL은 더 이상 버킷의 객체에 대한 권한에 영향을 주지 않습니다. 정책을 사용하여 권한을 부여할 수 있습니다. 모든 S3 PUT 요청은 bucket-owner-full-control 미리 준비된 ACL을 지정하거나 ACL을 지정하지 않아야 합니다. 이렇게 하지 안ㅇ흐면 요청이 실패합니다. 자세한 내용은 객체 소유권 제어 및 버킷에 대해 ACL 사용 중지 단원을 참조하십시오.

잘못된 ACL이 지정되거나 버킷 ACL 권한이 AWS 계정 외부의 액세스 권한을 부여하면 다음과 같은 오류 응답이 표시될 수 있습니다.

AccessControlListNotSupported

객체 소유권에 대해 버킷 소유자 적용 설정을 적용하면 ACL이 비활성화됩니다. ACL 설정 또는 ACL 업데이트 요청은 400 오류와 함께 실패하고 AccessControlListNotSupported 오류 코드를 반환합니다. ACL 읽기 요청은 계속 지원됩니다. ACL 읽기 요청은 항상 버킷 소유자에 대한 전체 제어 권한을 보여주는 응답을 반환합니다. PUT 작업에서 버킷 소유자 전체 권한 ACL을 지정하거나 ACL을 지정하지 않아야 합니다. 그렇지 않으면 PUT 작업이 실패합니다.

다음 예제 put-object AWS CLI 명령에는 public-read 미리 제공된 ACL이 포함되어 있습니다.

aws s3api put-object --bucket amzn-s3-demo-bucket --key object-key-name --body doc-example-body --acl public-read

버킷이 버킷 소유자 적용 설정을 사용하여 ACL을 비활성화하면 작업이 실패하고 업로드하는 사용자에게 다음 오류 메시지가 표시됩니다.

PutObject 작업을 호출할 때 오류(AccessControlListNotSupported)가 발생했습니다. 버킷이 ACL을 허용하지 않습니다.

InvalidBucketAclWithObjectOwnership

버킷 소유자 적용 설정을 적용하여 ACL을 비활성화하려면 버킷 ACL이 버킷 소유자에게만 전체 제어 권한을 부여해야 합니다. 버킷 ACL은 외부 AWS 계정 또는 다른 그룹에 대한 액세스 권한을 부여할 수 없습니다. 예를 들어 CreateBucket 요청이 버킷 소유자 시행을 설정하고 외부 AWS 계정에 대한 액세스를 제공하는 버킷 ACL을 지정하는 경우 요청은 400 오류와 함께 실패하고 InvalidBucketAclWithObjectOwnership 오류 코드를 반환합니다. 마찬가지로 PutBucketOwnershipControls 요청이 다른 사람에게 권한을 부여하는 버킷 ACL이 있는 버킷에 적용되는 버킷 소유자를 설정하는 경우 요청이 실패합니다.

예 : 기존 버킷 ACL이 퍼블릭 읽기 액세스 권한 부여

예를 들어 기존 버킷 ACL이 퍼블릭 읽기 액세스 권한을 부여하는 경우 이러한 ACL 권한을 버킷 정책으로 마이그레이션하고 버킷 ACL을 기본 프라이빗 ACL로 재설정할 때까지 객체 소유권에 대해 버킷 소유자 적용 설정을 적용할 수 없습니다. 자세한 내용은 ACL 사용 중지를 위한 사전 조건 단원을 참조하십시오.

이 예제 버킷 ACL은 퍼블릭 읽기 액세스 권한을 부여합니다.

{ "Owner": { "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Grants": [ { "Grantee": { "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/global/AllUsers" }, "Permission": "READ" } ] }

다음 예시 put-bucket-ownership-controls AWS CLI 명령은 객체 소유권에 대해 버킷 소유자 적용 설정을 적용합니다.

aws s3api put-bucket-ownership-controls --bucket amzn-s3-demo-bucket --ownership-controls Rules=[{ObjectOwnership=BucketOwnerEnforced}]

버킷 ACL이 퍼블릭 읽기 액세스 권한을 부여하기 때문에 요청이 실패하고 다음 오류 코드를 반환합니다.

PutBucketOwnershipControls 작업을 호출할 때 오류(InvalidBucketAclWithObjectOwnership)가 발생했습니다. 버킷은 ObjectOwnership의 BucketOwnerEnforced 설정으로 ACL을 설정할 수 없습니다.