トラブルシューティング
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
--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
amzn-s3-demo-bucket
--ownership-controls Rules=[{ObjectOwnership=BucketOwnerEnforced}]
バケット ACL は公開読み取りアクセスを許可するため、リクエストは失敗し、次のエラーコードを返します。
PutBucketOwnershipControls オペレーションを呼び出すときにエラーが発生しました。(InvalidBucketAclWithObjectOwnership): バケットに ObjectOwnership の BucketOwnerEnforced 設定で ACL を設定することはできません