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

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

存取控制清單 (ACL) 概觀

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

S3 物件擁有權是 Amazon S3 儲存貯體層級設定,可用來控制上傳到儲存貯體的物件擁有權,以及停用或啟用 ACLs。根據預設,物件擁有權設定為儲存貯體擁有者強制執行設定,且所有 ACLs 都會停用。停用 ACLs 時,儲存貯體擁有者會擁有儲存貯體中的所有物件,並僅使用存取管理政策來管理對這些物件的存取。

Amazon S3 中的大多數現代使用案例不再需要使用 ACLs。我們建議您停用 ACLs,除非在異常情況下,您需要個別控制每個物件的存取。在停用 ACLs 的情況下,您可以使用政策來控制對儲存貯體中所有物件的存取,無論物件上傳到儲存貯體的對象是誰。如需詳細資訊,請參閱控制物件的擁有權,並停用儲存貯體的 ACLs

重要

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

當您建立儲存貯體或物件時,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 個授予。

誰是被授予者?

承授者可以是 AWS 帳戶 或其中一個預先定義的 Amazon S3 群組。您可以使用 AWS 帳戶 電子郵件地址或正式使用者 ID 授予 許可。不過,如果您在授予請求中提供電子郵件地址,Amazon S3 會尋找該帳戶的正式使用者 ID,並將其新增至 ACL。產生的 ACLs 一律包含 的一般使用者 ID AWS 帳戶,而非 的電子郵件地址 AWS 帳戶。

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

  • id – 如果指定的值是 的一般使用者 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 使用者指南中的建立角色以將許可委派給 Word 使用者IAM

尋找 AWS 帳戶 正式使用者 ID

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

79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be

如需如何尋找帳戶正式使用者 ID 的詳細資訊,請參閱 AWS 帳戶管理參考指南中的尋找 正式使用者 ID AWS 帳戶

您也可以 AWS 帳戶 透過讀取 儲存貯體的 ACL 或 AWS 帳戶 具有存取許可的物件來查詢 的一般使用者 ID。當授予請求 AWS 帳戶 授予個人許可時,授予項目會新增至具有帳戶正式使用者 ID 的 ACL。

注意

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

Amazon S3 預先定義的群組

Amazon S3 有一組預先定義的群組。將帳戶存取權授予群組時,您可以指定其中一個 Amazon S3 URIs,而不是正式使用者 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 許可允許此群組將伺服器存取日誌 (請參閱 使用伺服器存取記錄記錄要求) 寫入至儲存貯體。

注意

使用 ACLs 時,承授者可以是 AWS 帳戶 或其中一個預先定義的 Amazon S3 群組。但是,承授者不能是 IAM 使用者。如需 AWS IAM 內使用者和許可的詳細資訊,請參閱使用 AWS Identity and Access Management

我可以授予哪些許可?

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

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

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

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

ACL 許可和存取政策許可的映射

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

下表顯示每個 ACL 許可如何對應至對應的存取政策許可。如您所見,存取政策允許比 ACL 更多的許可。您主要使用 ACLs 來授予基本的讀取/寫入許可,類似於檔案系統許可。如需何時使用 ACL 的詳細資訊,請參閱 Amazon S3 的身分和存取管理

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

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 等同於授予 READREAD_ACPWRITEWRITE_ACP ACL 許可。因此,此 ACL 許可會映射到對應的存取政策許可組合。 等同於授予 READREAD_ACPWRITE_ACP ACL 許可。因此,此 ACL 許可會映射到對應的存取政策許可組合。

條件索引鍵

當您授予存取政策許可時,您可以使用條件索引鍵來限制使用儲存貯體政策之物件上的 ACL 值。下列內容索引鍵對應至 ACLs。您可以使用這些內容索引鍵來強制在請求中使用特定 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 特定標頭的政策範例,請參閱 授予 s3:PutObject 許可,條件要求儲存貯體擁有者取得完全控制。如需 Amazon S3 特定條件金鑰的完整清單,請參閱服務授權參考中的 Amazon S3 的動作、資源和條件金鑰

如需 S3 資源類型對 S3 API 操作的許可的詳細資訊,請參閱 Amazon S3 API 操作的必要許可

常見 Amazon S3 請求的 aclRequired

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

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

注意

PutObject 除非另行指定,否則 操作會指出未設定 ACL 的請求,除非 ACL 是 bucket-owner-full-control ACL。的 null 值aclRequired表示 AWS CloudTrail 日誌中不存在 aclRequired

下表顯示 CloudTrail aclRequired的值。

操作名稱 要求者 物件擁有者 儲存貯體擁有者 儲存貯體政策授予存取權 aclRequired 原因
GetObject A A A 是或否 null 相同帳戶的存取
GetObject A B A 是或否 null 強制執行儲存貯體擁有者的相同帳戶存取
GetObject A A B null 儲存貯體政策授予的跨帳戶存取權
GetObject A A B 跨帳戶存取依賴 ACL
GetObject A A B null 儲存貯體政策授予的跨帳戶存取權
GetObject A B B 跨帳戶存取依賴 ACL
GetObject A B C null 儲存貯體政策授予的跨帳戶存取權
GetObject A B C 跨帳戶存取依賴 ACL
PutObject A 不適用 A 是或否 null 相同帳戶的存取
PutObject A 不適用 B null 儲存貯體政策授予的跨帳戶存取權
PutObject A 不適用 B 跨帳戶存取依賴 ACL
PutObject 使用 ACL ( 除外bucket-owner-full-control) * 不適用 * 是或否 請求授予 ACL
ListObjects A 不適用 A 是或否 null 相同帳戶的存取
ListObjects A 不適用 B null 儲存貯體政策授予的跨帳戶存取權
ListObjects A 不適用 B 跨帳戶存取依賴 ACL
DeleteObject A 不適用 A 是或否 null 相同帳戶的存取
DeleteObject A 不適用 B null 儲存貯體政策授予的跨帳戶存取權
DeleteObject 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 是或否 - 相同帳戶的存取
REST.GET.OBJECT A B A 是或否 - 強制執行儲存貯體擁有者的相同帳戶存取
REST.GET.OBJECT A A B - 儲存貯體政策授予的跨帳戶存取權
REST.GET.OBJECT A A B 跨帳戶存取依賴 ACL
REST.GET.OBJECT A B B - 儲存貯體政策授予的跨帳戶存取權
REST.GET.OBJECT A B B 跨帳戶存取依賴 ACL
REST.GET.OBJECT A B C - 儲存貯體政策授予的跨帳戶存取權
REST.GET.OBJECT A B C 跨帳戶存取依賴 ACL
REST.PUT.OBJECT A 不適用 A 是或否 - 相同帳戶的存取
REST.PUT.OBJECT A 不適用 B - 儲存貯體政策授予的跨帳戶存取權
REST.PUT.OBJECT A 不適用 B 跨帳戶存取依賴 ACL
REST.PUT.OBJECT 使用 ACL ( 除外bucket-owner-full-control) * 不適用 * 是或否 請求授予 ACL
REST.GET.BUCKET A 不適用 A 是或否 - 相同帳戶的存取
REST.GET.BUCKET A 不適用 B - 儲存貯體政策授予的跨帳戶存取權
REST.GET.BUCKET A 不適用 B 跨帳戶存取依賴 ACL
REST.DELETE.OBJECT A 不適用 A 是或否 - 相同帳戶的存取
REST.DELETE.OBJECT A 不適用 B - 儲存貯體政策授予的跨帳戶存取權
REST.DELETE.OBJECT A 不適用 B 跨帳戶存取依賴 ACL
REST.PUT.ACL * * * 是或否 請求授予 ACL

範例 ACL

下列儲存貯體上的 ACL 範例會識別資源擁有者和一組授予。格式是 Amazon S3 ACL 中 API 的 REST 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 支援一組預先定義的授予,稱為固定 ACLs。每個固定 ACL 都有一組預先定義的承授者和許可。下表列出一組固定 ACLs 和相關聯的預先定義授予。

固定ACL 適用對象 新增至 ACL 的許可
private 儲存貯體與物件 擁有者取得 FULL_CONTROL。其他人則沒有存取權利 (預設)。
public-read 儲存貯體與物件 擁有者取得 FULL_CONTROLAllUsers 群組 (請參閱「誰是被授予者?」) 取得 READ 存取。
public-read-write 儲存貯體與物件 擁有者取得 FULL_CONTROLAllUsers 群組取得 READWRITE 存取。通常不建議在儲存貯體上授予此存取許可。
aws-exec-read 儲存貯體與物件 擁有者取得 FULL_CONTROL。Amazon EC2 可從 GET Amazon S3 READ存取 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 許可。如需日誌的詳細資訊,請參閱「使用伺服器存取記錄記錄要求」。
注意

您只能在請求中指定其中一個固定 ACLs。

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