存取控制清單 (ACL) 概觀 - Amazon Simple Storage Service

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

存取控制清單 (ACL) 概觀

Amazon S3 存取控制清單 (ACL) 可讓您管理對儲存貯體和物件的存取。每個儲存貯體與物件都會有一個與其連接的 ACL 作為子資源。它定義了哪些 AWS 帳戶 或組被授予訪問權限以及訪問的類型。收到針對資源的請求時,Amazon S3 會檢查對應的 ACL,以驗證請求者是否具有必要的存取許可。

S3 物件擁有權是一項 Amazon S3 儲存貯體層級設定,您可以用來同時控制上傳至儲存貯體之物件的擁有權,以及停用或啟用 ACL。根據預設,物件擁有權設定為「儲存貯體擁有者強制執行」設定,而且所有 ACL 都會停用。停用 ACL 時,儲存貯體擁有者會擁有儲存貯體中的所有物件,並使用存取管理政策專門管理對這些物件的存取。

Amazon S3 中的大多數新式使用案例不再需要使用 ACL。建議您將 ACL 保持停用狀態,除非在異常情況下必須個別控制每個物件的存取。停用 ACL 後,您可以使用政策來控制對儲存貯體中所有物件的存取,無論是誰將物件上傳到您的儲存貯體。如需詳細資訊,請參閱 控制物件的擁有權並停用儲存貯體的 ACL

重要

如果儲存貯體使用 S3 物件擁有權的儲存貯體擁有者強制執行設定,則您必須使用政策將存取權授予儲存貯體及其中的物件。在啟用儲存貯體擁有者強制執行設定的情況下,請求設定存取控制清單 (ACL) 或更新 ACL 失敗,並傳回 AccessControlListNotSupported 錯誤碼。仍支援讀取 ACL 的請求。

建立儲存貯體或物件時,Amazon S3 會建立預設 ACL 來授予資源擁有者完全控制資源。如下列範例儲存貯體 ACL 所示 (預設的物件 ACL 具有相同的結構):

<?xml version="1.0" encoding="UTF-8"?> <AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Owner> <ID>*** Owner-Canonical-User-ID ***</ID> <DisplayName>owner-display-name</DisplayName> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Canonical User"> <ID>*** Owner-Canonical-User-ID ***</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>

此範本 ACL 包含 Owner 元素,可依 AWS 帳戶的正式使用者 ID 來識別擁有者。如需尋找您的正式使用者 ID 說明,請參閱 尋找 AWS 帳戶 規範使用者 IDGrant元素會識別受權者 ( AWS 帳戶 或預先定義的群組) 以及授與的權限。此預設 ACL 包含擁有者的一個 Grant 元素。您可以新增 Grant 元素來授予許可,每個授予都會識別被授予者與許可。

注意

一個 ACL 最多可以有 100 個授予。

誰是被授予者?

受權者可以是預先定義的 Amazon S3 群組 AWS 帳戶 或其中一個。您授予 AWS 帳戶 使用電子郵件地址或規範用戶 ID 的權限。不過,如果您在授予請求中提供電子郵件地址,Amazon S3 會尋找該帳戶的正式使用者 ID 並新增至 ACL。產生的 ACL 一律包含的標準使用者識別碼 AWS 帳戶,而不是的電子郵件地址。 AWS 帳戶

當您授與存取權利時,您可以將每個授與者指定為 type="value" 組,其中 type 為下列其中一項:

  • id— 如果指定的值是 AWS 帳戶

  • uri – 如果您將許可授與給預先定義的群組

  • emailAddress – 如果指定的值是 AWS 帳戶的電子郵件地址

重要

使用電子郵件地址指定僅在以下 AWS 區域中支援的被授與者:

  • 美國東部 (維吉尼亞北部)

  • 美國西部 (加利佛尼亞北部)

  • 美國西部 (奧勒岡)

  • 亞太區域 (新加坡)

  • 亞太區域 (雪梨)

  • 亞太區域 (東京)

  • 歐洲 (愛爾蘭)

  • 南美洲 (聖保羅)

如需 Amazon S3 支援的所有區域和端點的清單,請參閱《Amazon Web Services 一般參考》中的區域與端點

範例:電子郵件地址

例如,下列x-amz-grant-read標頭會授與「由電子郵件地址 AWS 帳戶 識別」讀取物件資料及其中繼資料的權限:

x-amz-grant-read: emailAddress="xyz@example.com", emailAddress="abc@example.com"
警告

當您授與資源的其他 AWS 帳戶 存取權時,請注意, AWS 帳戶 可以將其權限委派給其帳戶下的使用者。這稱為跨帳戶存取。如需有關使用跨帳戶存取的資訊,請參閱《IAM 使用者指南》中的建立角色將許可委派給 IAM 使用者

尋找 AWS 帳戶 規範使用者 ID

正式使用者 ID 與您的 AWS 帳戶相關聯。此 ID 是一長串字元,例如:

79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be

如需有關如何尋找帳戶的正式使用者 ID 的資訊,請參閱尋找 AWS 帳戶的正式使用者 ID

您也可以讀取值區的 ACL 或 AWS 帳戶 具有存取 AWS 帳戶 權限的物件,來查詢的標準使用者 ID。當授與要求授予 AWS 帳戶 個人權限時,會使用帳戶的標準使用者 ID 將授權項目新增至 ACL。

注意

如果您設定儲存貯體為公有 (不建議),任何授權使用者皆可上傳物件至此儲存貯體中。這些匿名使用者沒有 AWS 帳戶。當任何匿名使用者上傳物件至您的儲存貯體時,Amazon S3 會新增特別的正式使用者 ID (65a011a29cdf8ec533ec3d1ccaae921c) 當做在 ACL 的物件擁有者。如需詳細資訊,請參閱 Amazon S3 儲存貯體和物件擁有權

Amazon S3 預先定義的群組

Amazon S3 有一組預先定義的群組。將帳戶存取授予群組時,您會指定我們的其中一個 Amazon S3 URI,而不是正式使用者 ID。Amazon S3 提供下列預先定義的群組:

  • 「已驗證的使用者」群組 – 以 http://acs.amazonaws.com/groups/global/AuthenticatedUsers 表示。

    這個群組代表全部 AWS 帳戶。此群組的存取權限允許任 AWS 帳戶 何人存取資源。但是,所有請求都必須經過簽署 (身分驗證)。

    警告

    當您授予「已驗證的使用者」群組的存取權時,世界上任何 AWS 已驗證的使用者都可以存取您的資源。

  • 「所有使用者」群組 – 以 http://acs.amazonaws.com/groups/global/AllUsers 表示。

    此群組的存取許可允許世界上任何人存取資源。此請求可以經過簽署 (通過身分驗證) 或未經過簽署 (匿名)。未簽署的要求會省略要求中的身分驗證標頭。

    警告

    強烈建議您絕不要將 WRITEWRITE_ACPFULL_CONTROL 許可授予所有使用者群組。例如,雖然 WRITE 許可不允許非擁有者覆寫或刪除現有物件,但 WRITE 許可仍會允許任何人在儲存貯體中儲存物件,而導致您必須支付費用。如需這些許可的詳細資訊,請參閱下節「我可以授予哪些許可?」。

  • 「日誌交付」群組 – 以 http://acs.amazonaws.com/groups/s3/LogDelivery 表示。

    儲存貯體的 WRITE 許可允許此群組將伺服器存取日誌 (請參閱 使用伺服器存取記錄記錄要求) 寫入至儲存貯體。

注意

使用 ACL 時,受權者可以是預先定義的 Amazon S3 群組 AWS 帳戶 或其中一個。不過,被授予者不可以是 IAM 使用者。如需 IAM 中 AWS 使用者與許可的詳細資訊,請參閱使用 AWS Identity and Access Management

我可以授予哪些許可?

下表列出 Amazon S3 在 ACL 中支援的一組許可。物件 ACL 與儲存貯體 ACL 有相同的一組 ACL 許可。不過,視內容而定 (儲存貯體 ACL 或物件 ACL),這些 ACL 許可會授予許可進行特定儲存貯體或物件操作。下表列出這些許可,並說明其在物件與儲存貯體內容中所代表的意義。

如需 Amazon S3 主控台中 ACL 許可的詳細資訊,請參閱 設定 ACL

ACL 許可
許可 在儲存貯體上授予時 在物件上授予時
READ 允許被授予者列出儲存貯體中的物件 允許被授予者讀取物件資料及其中繼資料
WRITE 允許被授予者在儲存貯體中建立新物件。對於現有物件的儲存貯體和物件擁有者,還允許刪除和覆寫這些物件。 不適用
READ_ACP 允許被授予者讀取儲存貯體 ACL 允許被授予者讀取物件 ACL
WRITE_ACP 允許被授予者寫入適用儲存貯體的 ACL 允許被授予者寫入適用物件的 ACL
FULL_CONTROL 允許承授者對儲存貯體的 READWRITEREAD_ACPWRITE_ACP 許可 允許承授者對儲存貯體的 READREAD_ACPWRITE_ACP 許可
警告

授予 S3 儲存貯體與物件的存取許可時請小心。例如,將 WRITE 存取許可授予儲存貯體可允許被授予者在儲存貯體中建立物件。強烈建議您閱讀「存取控制清單 (ACL) 概觀」全節,再授予許可。

ACL 許可與存取政策許可的對應

如上表所示,相較於您可以在存取政策中設定的許可數目 (請參閱「Amazon S3 政策動作」),ACL 只允許一組有限的許可。其中每個許可都允許一或多個 Amazon S3 操作。

下表顯示每個 ACL 許可如何對應至對應的存取政策許可。如您所見,存取政策比 ACL 允許更多許可。您可以將 ACL 主要用來授予基本的讀取/寫入許可 (類似於檔案系統許可)。如需何時使用 ACL 的詳細資訊,請參閱 存取政策指導方針

如需 Amazon S3 主控台中 ACL 許可的詳細資訊,請參閱 設定 ACL

ACL 許可 在儲存貯體上授予 ACL 許可時的對應存取政策許可 在物件上授予 ACL 許可時的對應存取政策許可
READ s3:ListBuckets3:ListBucketVersionss3:ListBucketMultipartUploads s3:GetObjects3:GetObjectVersion
WRITE

s3:PutObject

儲存貯體擁有者可以建立、覆寫和刪除儲存貯體中的任何物件,並且物件擁有者擁有其物件的 FULL_CONTROL

此外,當被授予者是儲存貯體擁有者時,授予儲存貯體 ACL 中的 WRITE 許可允許在該儲存貯體中的任何版本上執行 s3:DeleteObjectVersion 動作。

不適用
READ_ACP s3:GetBucketAcl s3:GetObjectAcls3:GetObjectVersionAcl
WRITE_ACP s3:PutBucketAcl s3:PutObjectAcls3:PutObjectVersionAcl
FULL_CONTROL 相當於授予 READWRITEREAD_ACPWRITE_ACP ACL 許可。因此,此 ACL 許可會對應至一組對應的存取政策許可。 相當於授予 READREAD_ACPWRITE_ACP ACL 許可。因此,此 ACL 許可會對應至一組對應的存取政策許可。

條件索引鍵

當您授與存取政策許可時,您可以使用條件索引鍵來限制物件上使用儲存貯體原則的 ACL 值。下面的內容金鑰與 ACL 對應。您可以使用這些內容金鑰來強制在請求中使用特定 ACL:

  • s3:x-amz-grant-read ‐ 需要讀取存取權。

  • s3:x-amz-grant-write ‐ 需要寫入存取權。

  • s3:x-amz-grant-read-acp ‐ 需要對儲存貯體 ACL 的讀取存取權。

  • s3:x-amz-grant-write-acp ‐ 需要對儲存貯體 ACL 的寫入存取權。

  • s3:x-amz-grant-full-control ‐ 需要完全控制權。

  • s3:x-amz-acl ‐ 需要固定的 ACL

關於涉及 ACL 特定標頭的政策範例,請參閱 示例 1:授予 s3:PutObject 權限,條件要求存儲桶所有者獲得完全控制。如需 Amazon S3 特定條件金鑰的完整清單,請參閱服務授權參考適用於 Amazon S3 的動作、資源和條件金鑰

常見 Amazon S3 請求的 aclRequired

若要識別需要 ACL 進行授權的 Amazon S3 請求,您可以使用 Amazon S3 伺服器存取日誌或 AWS CloudTrail中的 aclRequired 值。顯示在 CloudTrail 或 Amazon S3 伺服器存取日誌中的aclRequired值取決於呼叫的操作以及有關請求者、物件擁有者和儲存貯體擁有者的特定資訊。如果不需要 ACL,或者您要設定bucket-owner-full-control固定 ACL,或者儲存貯體政策允許這些請求,則 Amazon S3 伺服器存取日誌中的aclRequired值字串為 - "",且在中不存在 CloudTrail。

下表列出各種 Amazon S3 API 操作的預期aclRequired值, CloudTrail 或 Amazon S3 伺服器存取日誌中的預期值。您可以使用此資訊來了解哪些 Amazon S3 操作依賴 ACL 進行授權。在下表中,A、B 和 C 代表與請求者、物件擁有者和儲存貯體擁有者相關聯的不同帳戶。帶星號 (*) 的項目表示任何帳戶 A、B 或 C。

注意

除非另有指定,否則下表中的 PutObject 作業指示不設定 ACL 的請求,除非 ACL 是 bucket-owner-full-control ACL。的空值表aclRequired示記aclRequired AWS CloudTrail 錄檔中不存在。

aclRequired值 CloudTrail
操作名稱 要求者 物件擁有者 儲存貯體擁有者 儲存貯體政策授予存取權 aclRequired 原因
GetObject A A A 是或否 null 相同帳戶的存取
A B A 是或否 null 強制執行儲存貯體擁有者的相同帳戶存取
A A B null 儲存貯體政策授予的跨帳戶存取權
A A B 跨帳戶存取權依賴 ACL
A A B null 儲存貯體政策授予的跨帳戶存取權
A B B 跨帳戶存取權依賴 ACL
A B C null 儲存貯體政策授予的跨帳戶存取權
A B C 跨帳戶存取權依賴 ACL
PutObject A 不適用 A 是或否 null 相同帳戶的存取
A 不適用 B null 儲存貯體政策授予的跨帳戶存取權
A 不適用 B 跨帳户存取權依賴 ACL
PutObject 具有 ACL (bucket-owner-full-control 除外) * 不適用 * 是或否 請求授與 ACL
ListObjects A 不適用 A 是或否 null 相同帳戶的存取
A 不適用 B null 儲存貯體政策授予的跨帳戶存取權
A 不適用 B 跨帳戶存取權依賴 ACL
DeleteObject A 不適用 A 是或否 null 相同帳戶的存取
A 不適用 B null 儲存貯體政策授予的跨帳戶存取權
A 不適用 B 跨帳戶存取權依賴 ACL
PutObjectAcl * * * 是或否 請求授與 ACL
PutBucketAcl * 不適用 * 是或否 請求授與 ACL

注意

除非另有指定,否則下表中的 REST.PUT.OBJECT 操作指示不設定 ACL 的請求,除非 ACL 是 bucket-owner-full-control ACL。「-」字串的 aclRequired 值表示 Amazon S3 伺服器存取日誌中的空值。

Amazon S3 伺服器存取日誌的 aclRequired
操作名稱 要求者 物件擁有者 儲存貯體擁有者 儲存貯體政策授予存取權 aclRequired 原因
REST.GET.OBJECT A A A 是或否 - 相同帳戶的存取
A B A 是或否 - 強制執行儲存貯體擁有者的相同帳戶存取
A A B - 儲存貯體政策授予的跨帳戶存取權
A A B 跨帳戶存取權依賴 ACL
A B B - 儲存貯體政策授予的跨帳戶存取權
A B B 跨帳戶存取權依賴 ACL
A B C - 儲存貯體政策授予的跨帳戶存取權
A B C 跨帳戶存取權依賴 ACL
REST.PUT.OBJECT A 不適用 A 是或否 - 相同帳戶的存取
A 不適用 B - 儲存貯體政策授予的跨帳戶存取權
A 不適用 B 跨帳户存取權依賴 ACL
REST.PUT.OBJECT 具有 ACL (bucket-owner-full-control 除外) * 不適用 * 是或否 請求授與 ACL
REST.GET.BUCKET A 不適用 A 是或否 - 相同帳戶的存取
A 不適用 B - 儲存貯體政策授予的跨帳戶存取權
A 不適用 B 跨帳戶存取權依賴 ACL
REST.DELETE.OBJECT A 不適用 A 是或否 - 相同帳戶的存取
A 不適用 B - 儲存貯體政策授予的跨帳戶存取權
A 不適用 B 跨帳戶存取權依賴 ACL
REST.PUT.ACL * * * 是或否 請求授與 ACL

ACL 範例

以下位於儲存貯體上的 ACL 範例會識別資源擁有者與一組授予。格式為 Amazon S3 REST API 中 ACL 的 XML 表示法。儲存貯體擁有者具備資源的 FULL_CONTROL。此外,ACL 還顯示如何將資源上的許可授與兩個 AWS 帳戶資源 (以標準使用者 ID 識別),以及前一節討論的兩個預先定義的 Amazon S3 群組。

<?xml version="1.0" encoding="UTF-8"?> <AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Owner> <ID>Owner-canonical-user-ID</ID> <DisplayName>display-name</DisplayName> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"> <ID>Owner-canonical-user-ID</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"> <ID>user1-canonical-user-ID</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>WRITE</Permission> </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"> <ID>user2-canonical-user-ID</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>READ</Permission> </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"> <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI> </Grantee> <Permission>READ</Permission> </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"> <URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI> </Grantee> <Permission>WRITE</Permission> </Grant> </AccessControlList> </AccessControlPolicy>

固定的 ACL

Amazon S3 支援一組預先定義的許可,稱為固定的 ACL。每個固定的 ACL 都有一組預先定義的被授與者和許可。下表列出一組固定的 ACL 及相關聯之預先定義的授予。

固定的 ACL 適用對象 新增至 ACL 的許可
private 儲存貯體與物件 擁有者取得 FULL_CONTROL。其他人則沒有存取權利 (預設)。
public-read 儲存貯體與物件 擁有者取得 FULL_CONTROLAllUsers 群組 (請參閱「誰是被授予者?」) 取得 READ 存取。
public-read-write 儲存貯體與物件 擁有者取得 FULL_CONTROLAllUsers 群組取得 READWRITE 存取。通常不建議在儲存貯體上授予此存取許可。
aws-exec-read 儲存貯體與物件 擁有者取得 FULL_CONTROL。Amazon EC2 取得 READ 存取,可從 Amazon S3 GET Amazon Machine Image (AMI) 套件。
authenticated-read 儲存貯體與物件 擁有者取得 FULL_CONTROLAuthenticatedUsers 群組取得 READ 存取許可。
bucket-owner-read 物件 物件擁有者取得 FULL_CONTROL。儲存貯體擁有者取得 READ 存取許可。如果您在建立儲存貯體時指定此固定的 ACL,Amazon S3 會予以忽略。
bucket-owner-full-control 物件 物件擁有者與儲存貯體擁有者都會取得物件的 FULL_CONTROL。如果您在建立儲存貯體時指定此固定的 ACL,Amazon S3 會予以忽略。
log-delivery-write 儲存貯體 LogDelivery 群組取得儲存貯體的 WRITEREAD_ACP 許可。如需日誌的詳細資訊,請參閱「使用伺服器存取記錄記錄要求」。
注意

您只能在要求中指定其中一個固定的 ACL。

您可以在請求中使用 x-amz-acl 請求標頭來指定固定 ACL。當 Amazon S3 收到含有固定 ACL 的請求時,就會將預先定義的授權新增至資源的 ACL。