本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
故障診斷
套用 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
請求設定儲存貯體擁有者強制執行,並指定提供外部存取權的儲存貯體 ACL AWS 帳戶,則您的請求會失敗並發生錯誤,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