トラブルシューティング
S3 オブジェクト所有権のバケット所有者強制設定を適用すると、アクセスコントロールリスト (ACL) が無効になり、バケット所有者として、バケット内のすべてのオブジェクトを自動的に所有します。ACL は、バケット内のオブジェクトの許可に影響を与えなくなりました。ポリシーを使用してアクセス許可を付与できます。すべての S3 PUT リクエストは、バケット所有者の完全制御 ACL を指定するか、ACL を指定しない必要があります。そうしないと失敗します。詳細については、オブジェクトの所有権の制御とバケットの ACL の無効化。 を参照してください。
無効なACLが指定されているか、バケット ACL 許可が AWS アカウント の外部へのアクセスを許可している場合、次のエラー応答が表示されることがあります。
アクセスコントロールリストはサポートされていません
オブジェクト所有権のバケット所有者強制設定を適用すると、ACL は無効になります。ACL の設定または ACL の更新の要求は 400
エラーで失敗し、AccessControlListNotSupported
エラーコードを返します。ACL の読み取り要求は引き続きサポートされています。ACL の読み取りリクエストは、バケット所有者の完全制御を示すレスポンスを常に返します。PUT オペレーションでは、バケット所有者の完全制御 ACL を指定するか、ACL を指定しない必要があります。そうしないと、失敗します。
次に、put-object
既定 ACL を含む AWS CLI を使用した public-read
オペレーションの例を示します。
aws s3api put-object --bucket
DOC-EXAMPLE-BUCKET
--keyobject-key-name
--bodydoc-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
DOC-EXAMPLE-BUCKET
--ownership-controls Rules=[{ObjectOwnership=BucketOwnerEnforced}]
バケット ACL は公開読み取りアクセスを許可するため、リクエストは失敗し、次のエラーコードを返します。
PutBucketOwnershipControls オペレーションを呼び出すときにエラーが発生しました。(InvalidBucketAclWithObjectOwnership): バケットに ObjectOwnership の BucketOwnerEnforced 設定で ACL を設定することはできません