本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
S3 物件擁有權是一項 Amazon S3 儲存貯體層級設定,您可以用來控制上傳至儲存貯體之物件的擁有權,以及停用或啟用存取控制清單 (ACL)。根據預設,物件擁有權設定為「儲存貯體擁有者強制執行」設定,而且所有 ACL 都會停用。停用 ACL 時,儲存貯體擁有者會擁有儲存貯體中的所有物件,並使用存取管理政策專門管理對資料的存取。
Amazon S3 中的大多數現代使用案例不再需要使用 ACL,建議您將 ACL 保持停用狀態,除非在異常情況下必須個別控制每個物件的存取權。停用 ACL 後,您可以使用政策,更輕鬆地控制對儲存貯體中每個物件的存取,無論是誰上傳了您儲存貯體中的物件。
「物件擁有權」有三項設定,可讓您用來控制對上傳至儲存貯體之物件的擁有權,以及停用或啟用 ACL:
已停用 ACL
-
儲存貯體擁有者強制執行 (預設) - 停用 ACL,儲存貯體擁有者會自動擁有並完全控制儲存貯體中的每個物件。ACL 不再影響 S3 儲存貯體中資料的許可。儲存貯體使用政策來定義存取控制。
已啟用 ACL
-
儲存貯體擁有者偏好 – 儲存貯體擁有者擁有並完全控制其他帳戶使用
bucket-owner-full-control
標準 ACL 寫入儲存貯體的新物件。 -
Object writer (物件寫入者) – 上傳物件的 AWS 帳戶 ,上傳的物件可擁有物件、完全控制該物件,並且可以透過 ACL 授權其他使用者存取該物件。
對於 S3 中的大多數現代使用案例,建議您將 ACL 保持停用狀態,方法為套用儲存貯體擁有者強制執行設定,並視需要使用您的儲存貯體政策與帳戶外的使用者共用資料。這種方法可簡化許可管理。您可以在新建立和現有儲存貯體上停用 ACL。針對新建立的儲存貯體,預設會停用 ACL。在現有儲存貯體中已有物件的情況下,停用 ACL 之後,物件和儲存貯體 ACL 不再是存取評估的一部分,並根據政策授予或拒絕存取。對於現有儲存貯體,您可以在停用 ACL 之後隨時重新啟用,並還原之前存在的儲存貯體和物件 ACL。
在停用 ACL 之前,建議您檢閱儲存貯體政策,以確保其涵蓋您打算將存取權授予帳戶外儲存貯體的所有方式。停用 ACL 之後,儲存貯體只接受未指定 ACL 的 PUT
請求或儲存貯體擁有者完全控制 ACL 的 PUT
請求,例如 bucket-owner-full-control
標準 ACL 或以 XML 表達此 ACL 的同等形式。支援儲存貯體擁有者完全控制 ACLs現有應用程式不會有任何影響。包含其他 ACLs(例如,對特定 的自訂授予 AWS 帳戶) 的PUT
請求會失敗,並傳回400
錯誤碼為 的錯誤AccessControlListNotSupported
。
相比之下,具有「儲存貯體擁有者偏好」設定的儲存貯體會繼續接受並遵循儲存貯體和物件 ACL。使用此設定時,儲存貯體擁有者會自動擁有使用 bucket-owner-full-control
標準 ACL 寫入的新物件,而不是物件寫入者。所有其他 ACL 行為都會保留在原位。若要要求所有 Amazon S3 PUT
操作包含 bucket-owner-full-control
標準 ACL,您可以新增儲存貯體政策,只允許使用此 ACL 上傳物件。
若要查看哪些物件擁有權設定套用至儲存貯體,您可以使用 Amazon S3 Storage Lens 指標。S3 Storage Lens 是一種雲端儲存體分析功能,您可以用來了解整個組織使用物件儲存體的情況及其活動情形。如需詳細資訊,請參閱使用 S3 Storage Lens 尋找物件擁有權設定。
注意
如需將 Amazon S3 Express One Zone 儲存類別與目錄儲存貯體搭配使用的詳細資訊,請參閱 S3 Express One Zone 和 使用目錄儲存貯體。
「物件擁有權」設定
此資料表顯示每個「物件擁有權」設定對 ACL、物件、物件擁有權和物件上傳的影響。
設定 | 適用對象 | 對物件所有權的影響 | 對 ACL 的影響 | 已接受上傳 |
---|---|---|---|---|
儲存貯體擁有者強制執行 (預設) | 全部新的和現有物件 | 儲存貯體擁有者擁有每個物件。 |
ACL 已停用,不再影響儲存貯體的存取許可。設定或更新 ACL 的請求失敗。不過,仍支援讀取 ACL 的請求。 儲存貯體擁有者擁有完整的擁有權和控制權。 物件寫入者不再擁有完整的擁有權和控制權。 |
儲存貯體擁有者完全控制 ACL 的上傳或未指定 ACL 的上傳 |
儲存貯體擁有者偏好 | 新物件 | 如果物件上傳包含 bucket-owner-full-control 標準 ACL,則儲存貯體擁有者會擁有物件。與其他 ACL 一起上傳的物件是由寫入帳戶所擁有。 |
ACL 可以更新,而且可以授予許可。 如果物件上傳包含 |
所有上傳 |
物件寫入器 | 新物件 | 物件寫入者擁有物件。 |
ACL 可以更新,而且可以授予許可。 物件寫入者具有完整的存取控制權。 |
所有上傳 |
透過停用 ACL 引入的變更
套用物件擁有權的「儲存貯體擁有者強制執行」設定時,ACL 會停用,而且您會自動擁有並完全控制儲存貯體中的每個物件,而不會採取任何其他動作。儲存貯體擁有者強制執行是所有新建儲存貯體的預設設定。在套用儲存貯體擁有者強制執行設定之後,您會看到三個變更:
-
會停用所有儲存貯體 ACL 和物件 ACL,這可讓您身為儲存貯體擁有者擁有完整的存取權。在儲存貯體或物件上執行讀取 ACL 請求時,您會看到完整存取權僅提供給儲存貯體擁有者。
-
您身為儲存貯體擁有者會自動擁有並完全控制儲存貯體中的每個物件。
-
ACL 不再影響儲存貯體的存取許可。因此,資料的存取控制是以政策為基礎,例如 AWS Identity and Access Management (IAM) 身分型政策、Amazon S3 儲存貯體政策、VPC 端點政策,以及 Organizations 服務控制政策 (SCPs) 或資源控制政策 RCPs)。

如果您使用 S3 版本控制,則儲存貯體擁有者會擁有並且可以完全控制儲存貯體中的所有物件版本。套用「儲存貯體擁有者強制執行」設定不會新增物件的版本。
只有在使用儲存貯體擁有者完全控制 ACL 或未指定 ACL 時,新物件才能上傳到儲存貯體。如果物件指定任何其他 ACL,則物件上傳會失敗。如需詳細資訊,請參閱故障診斷。
因為以下使用 AWS Command Line Interface
(AWS CLI) 的範例 PutObject
操作包含 bucket-owner-full-control
標準 ACL,所以可將物件上傳至已停用 ACL 的儲存貯體。
aws s3api put-object --bucket
amzn-s3-demo-bucket
--keykey-name
--bodypath-to-file
--acl bucket-owner-full-control
因為以下 PutObject
操作未指定 ACL,所以對於已停用 ACL 的儲存貯體也會成功。
aws s3api put-object --bucket
amzn-s3-demo-bucket
--keykey-name
--bodypath-to-file
注意
如果其他 AWS 帳戶 需要在上傳後存取物件,您必須透過儲存貯體政策授予這些帳戶額外的許可。如需詳細資訊,請參閱使用政策來管理 Amazon S3 資源存取的逐步解說。
重新啟用 ACL
您可以隨時從「儲存貯體擁有者強制執行」設定變更為另一個「物件擁有權」設定,以重新啟用 ACL。如果您在套用「儲存貯體擁有者強制執行」設定之前,先使用物件 ACL 進行許可管理,而且未將這些物件 ACL 許可遷移至儲存貯體政策,則重新啟用 ACL 之後,這些許可會還原。此外,在套用「儲存貯體擁有者強制執行」設定時寫入儲存貯體的物件仍然由儲存貯體擁有者擁有。
例如,如果您從「儲存貯體擁有者強制執行」設定變更回「物件寫入器」設定,身為儲存貯體擁有者,您就不再擁有之前由其他 AWS 帳戶擁有的物件,且不對其擁有完整控制權。相反,上傳帳戶再次擁有這些物件。其他帳戶擁有的物件會使用 ACL 來取得許可,因此您無法使用政策為這些物件授予許可。此外,您身為儲存貯體擁有者,仍然擁有在套用「儲存貯體擁有者強制執行」設定時寫入儲存貯體的任何物件。即使您重新啟用 ACL,這些物件也不屬於物件寫入者。
如需使用、 AWS Command Line Interface (CLI) AWS Management Console、REST API 或 AWS SDKs 啟用和管理 ACLs 的說明,請參閱 設定 ACL。
停用 ACL 的先決條件
停用現有儲存貯體的 ACL 之前,請先完成下列先決條件。
「物件擁有權」許可
若要套用、更新或刪除儲存貯體的「物件擁有權」設定,您需要 s3:PutBucketOwnershipControls
許可。若要退回儲存貯體的「物件擁有權」設定,您需要 s3:GetBucketOwnershipControls
許可。如需更多詳細資訊,請參閱 在建立儲存貯體時設定「物件擁有權」 及 檢視 S3 儲存貯體的「物件擁有權」設定。
停用所有新儲存貯體的 ACL
根據預設,所有新的儲存貯體是在套用儲存貯體擁有者強制執行設定,並停用 ACL 的情況下建立。建議將 ACL 保持停用狀態。一般而言,我們建議使用 S3 以資源為基礎的政策 (儲存貯體政策與存取點原則) 或 IAM 政策來獲取存取控制而非 ACL。政策是一種簡化且更具彈性的存取控制選項。使用儲存貯體政策和存取點政策,您可以定義若干規則,廣泛應用於 Amazon S3 資源的所有請求。
複寫與物件所有權
當您使用 S3 複寫,且來源和目的地儲存貯體由不同的 擁有時 AWS 帳戶,您可以停用 ACLs (使用儲存貯體擁有者強制執行的物件擁有權設定),將複本擁有權變更為 AWS 帳戶 擁有目的地儲存貯體的 。此設定會模擬現有的擁有者覆寫行為,而無需 s3:ObjectOwnerOverrideToBucketOwner
許可。使用「儲存貯體擁有者強制執行」設定複寫至目的地儲存貯體的所有物件都由目的地儲存貯體擁有者所擁有。如需複寫組態之擁有者覆寫選項的詳細資訊,請參閱 變更複本擁有者。
設定「物件擁有權」
您可以使用 Amazon S3 主控台、 AWS CLI、 AWS SDKs、Amazon S3 REST API 或 來套用物件擁有權設定 AWS CloudFormation。下列 REST API 和 AWS CLI 命令支援物件擁有權:
REST API | AWS CLI | 描述 |
---|---|---|
PutBucketOwnershipControls | put-bucket-ownership-controls |
建立或修改現有 S3 儲存貯體的「物件擁有權」設定。 |
CreateBucket | create-bucket |
使用 x-amz-object-ownership 請求標頭建立儲存貯體,以指定「物件所有權」設定。 |
GetBucketOwnershipControls | get-bucket-ownership-controls |
抓取 Amazon S3 儲存貯體的「物件擁有權」設定。 |
DeleteBucketOwnershipControls | delete-bucket-ownership-controls |
刪除 Amazon S3 儲存貯體的「物件擁有權」設定。 |
如需有關套用和使用「物件擁有權」設定的更多資訊,請參閱以下主題。