故障診斷 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

故障診斷

當您套用 S3 物件擁有權的儲存貯體擁有者強制執行設定時,存取控制清單 (ACLs) 會停用,而身為儲存貯體擁有者的您會自動擁有儲存貯體中的所有物件。ACLs不再影響儲存貯體中物件的許可。您可以使用政策來授予許可。所有 S3 PUT請求都必須指定bucket-owner-full-control固定 ACL 或未指定 ACL,否則這些請求將會失敗。如需詳細資訊,請參閱控制物件的擁有權,並停用儲存貯體的 ACLs

如果指定了無效的 ACL 或儲存貯體 ACL 許可授予 外部的存取權 AWS 帳戶,您可能會看到下列錯誤回應。

AccessControlListNotSupported

套用物件擁有權的儲存貯體擁有者強制執行設定後,ACLs 會停用。設定 ACLs 或更新 ACLs 的請求失敗,400並傳回 AccessControlListNotSupported 錯誤碼。仍然支援讀取 ACLs 的請求。讀取 ACLs 的請求一律會傳回回應,顯示儲存貯體擁有者的完整控制權。在PUT操作中,您必須指定儲存貯體擁有者完全控制 ACLs,或不指定 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

如果儲存貯體使用儲存貯體擁有者強制執行設定來停用 ACLs,則此操作會失敗,上傳者會收到下列錯誤訊息:

呼叫 AccessControlListNotSupported 操作時發生錯誤 (PutObject ):儲存貯體不允許 ACLs

InvalidBucketAclWithObjectOwnership

如果您想要套用儲存貯體擁有者強制執行設定來停用 ACLs,則儲存貯體 ACL 必須僅對儲存貯體擁有者提供完全控制。您的儲存貯體 ACL 無法授予外部 AWS 帳戶 或任何其他群組的存取權。例如,如果您的CreateBucket請求設定儲存貯體擁有者強制執行,並指定提供外部存取權的儲存貯體 ACL AWS 帳戶,則您的請求會失敗並發生錯誤,400並傳回 InvalidBucketAclWithObjectOwnership 錯誤碼。同樣地,如果您的PutBucketOwnershipControls請求設定儲存貯體擁有者強制執行的儲存貯體具有將許可授予他人的儲存貯體 ACL,則請求會失敗。

範例 :現有儲存貯體 ACL 授予公有讀取存取權

例如,如果現有的儲存貯體 ACL 授予公有讀取存取權,則您必須先將這些 ACL 許可遷移至儲存貯體政策,並將儲存貯體 ACL 重設為預設私有 ACL,才能套用儲存貯體擁有者強制執行的物件擁有權設定。如需詳細資訊,請參閱停用 ACLs 的先決條件

此範例儲存貯體 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 會授予公有讀取存取權,因此請求會失敗並傳回下列錯誤碼:

呼叫 InvalidBucketAclWithObjectOwnership 操作時發生錯誤 ( PutBucketOwnershipControls ):儲存貯體無法以 ACLs 設定設定 BucketOwnerEnforced ObjectOwnership