トラブルシューティング - 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 を設定することはできません