本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
存取控制清單 (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> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Canonical User"> <ID>*** Owner-Canonical-User-ID ***</ID> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>
此範本 ACL 包含 Owner 元素,可依 AWS 帳戶的正式使用者 ID 來識別擁有者。如需尋找您的正式使用者 ID 說明,請參閱 尋找 AWS 帳戶 正式使用者 ID。Grant 元素可識別承授者 ( AWS 帳戶 或預先定義的群組) 和授予的許可。此預設 ACL 包含擁有者的一個 Grant 元素。您可以新增 Grant 元素來授予許可,每個授予都會識別被授予者與許可。
注意
一個 ACL 最多可以有 100 個授予。
誰是被授予者?
當您授與存取權利時,您可以將每個授與者指定為 組,其中 type="value" 為下列其中一項:type
id– 如果指定的值是 的正式使用者 ID AWS 帳戶uri– 如果您將許可授與給預先定義的群組
警告
當您授予資源的其他 AWS 帳戶 存取權時,請注意 AWS 帳戶 可以將他們的許可委派給其帳戶下的使用者。這稱為跨帳戶存取。如需有關使用跨帳戶存取的資訊,請參閱《IAM 使用者指南》中的建立角色將許可委派給 IAM 使用者。
尋找 AWS 帳戶 正式使用者 ID
正式使用者 ID 與您的 AWS 帳戶相關聯。此 ID 是一長串字元,例如:
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
如需如何尋找您帳戶之正式使用者 ID 的資訊,請參閱《AWS 帳戶管理參考指南》中的尋找 AWS 帳戶的正式使用者 ID。
您也可以讀取 AWS 帳戶 具有存取許可之儲存貯體或物件的 ACL, 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表示。此群組的存取許可允許世界上任何人存取資源。此請求可以經過簽署 (通過身分驗證) 或未經過簽署 (匿名)。未簽署的要求會省略要求中的身分驗證標頭。
警告
強烈建議您絕不要將
WRITE、WRITE_ACP或FULL_CONTROL許可授予所有使用者群組。例如,雖然WRITE權限不允許非擁有者覆寫或刪除現有物件,但WRITE權限仍會允許任何人在儲存貯體中儲存物件,而致使您必須支付費用。如需這些許可的詳細資訊,請參閱下節「我可以授予哪些許可?」。 -
「日誌交付」群組 – 以
http://acs.amazonaws.com/groups/s3/LogDelivery表示。儲存貯體的
WRITE許可允許此群組將伺服器存取日誌 (請參閱 使用伺服器存取記錄記錄要求) 寫入至儲存貯體。
注意
使用 ACLs 時,承授者可以是 AWS 帳戶 或其中一個預先定義的 Amazon S3 群組。不過,被授予者不可以是 IAM 使用者。如需 IAM 中 AWS 使用者與許可的詳細資訊,請參閱使用 AWS Identity and Access Management。
我可以授予哪些許可?
下表列出 Amazon S3 在 ACL 中支援的一組許可。物件 ACL 與儲存貯體 ACL 有相同的一組 ACL 許可。不過,視內容而定 (儲存貯體 ACL 或物件 ACL),這些 ACL 許可會授予許可進行特定儲存貯體或物件操作。下表列出這些許可,並說明其在物件與儲存貯體內容中所代表的意義。
如需 Amazon S3 主控台中 ACL 許可的詳細資訊,請參閱 設定 ACL。
| 許可 | 在儲存貯體上授予時 | 在物件上授予時 |
|---|---|---|
READ |
允許被授予者列出儲存貯體中的物件 | 允許被授予者讀取物件資料及其中繼資料 |
WRITE |
允許被授予者在儲存貯體中建立新物件。對於現有物件的儲存貯體和物件擁有者,還允許刪除和覆寫這些物件。 | 不適用 |
READ_ACP |
允許被授予者讀取儲存貯體 ACL | 允許被授予者讀取物件 ACL |
WRITE_ACP |
允許被授予者寫入適用儲存貯體的 ACL | 允許被授予者寫入適用物件的 ACL |
FULL_CONTROL |
允許承授者對儲存貯體的 READ、WRITE、READ_ACP 和 WRITE_ACP 許可 |
允許承授者對儲存貯體的 READ、READ_ACP 和 WRITE_ACP 許可 |
警告
授予 S3 儲存貯體與物件的存取許可時請小心。例如,將 WRITE 存取許可授予儲存貯體可允許被授予者在儲存貯體中建立物件。強烈建議您閱讀「存取控制清單 (ACL) 概觀」全節,再授予許可。
ACL 許可與存取政策許可的對應
如上表所示,相較於您可以在存取政策中設定的許可數目 (請參閱「Amazon S3 的政策動作」),ACL 只允許一組有限的許可。其中每個許可都允許一或多個 Amazon S3 操作。
下表顯示每個 ACL 許可如何對應至對應的存取政策許可。如您所見,存取政策比 ACL 允許更多許可。您可以將 ACL 主要用來授予基本的讀取/寫入許可 (類似於檔案系統許可)。如需何時使用 ACL 的詳細資訊,請參閱 Amazon S3 的身分和存取管理。
如需 Amazon S3 主控台中 ACL 許可的詳細資訊,請參閱 設定 ACL。
| ACL 許可 | 在儲存貯體上授予 ACL 許可時的對應存取政策許可 | 在物件上授予 ACL 許可時的對應存取政策許可 |
|---|---|---|
READ |
s3:ListBucket、s3:ListBucketVersions 與 s3:ListBucketMultipartUploads |
s3:GetObject 和 s3:GetObjectVersion |
WRITE |
儲存貯體擁有者可以建立、覆寫和刪除儲存貯體中的任何物件,並且物件擁有者擁有其物件的 此外,當被授予者是儲存貯體擁有者時,授予儲存貯體 ACL 中的 |
不適用 |
READ_ACP |
s3:GetBucketAcl
|
s3:GetObjectAcl 和 s3:GetObjectVersionAcl |
WRITE_ACP |
s3:PutBucketAcl |
s3:PutObjectAcl 和 s3:PutObjectVersionAcl |
FULL_CONTROL |
相當於授予 READ、WRITE、READ_ACP 與 WRITE_ACP ACL 許可。因此,此 ACL 許可會對應至一組對應的存取政策許可。 |
相當於授予 READ、READ_ACP 與 WRITE_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 特定標頭的政策範例,請參閱 授予條件為要求儲存貯體擁有者取得完全控制權的 s3:PutObject 許可。如需 Amazon S3 特定條件索引鍵的完整清單,請參閱服務授權參考中的 Amazon S3 的動作、資源和條件索引鍵。
如需依 S3 資源類型列出 S3 API 操作許可的詳細資訊,請參閱Amazon S3 API 操作所需的許可。
常見 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 操作的 CloudTrail 或 Amazon S3 伺服器存取日誌中的預期 aclRequired 值。您可以使用此資訊來了解哪些 Amazon S3 操作依賴 ACL 進行授權。在下表中,A、B 和 C 代表與請求者、物件擁有者和儲存貯體擁有者相關聯的不同帳戶。帶星號 (*) 的項目表示任何帳戶 A、B 或 C。
注意
除非另有指定,否則下表中的 PutObject 作業指示不設定 ACL 的請求,除非 ACL 是 bucket-owner-full-control ACL。的 null 值aclRequired表示 AWS CloudTrail 日誌中不存在 aclRequired 。
下表顯示 CloudTrail 的 aclRequired 值。
| 操作名稱 | 要求者 | 物件擁有者 | 儲存貯體擁有者 | 儲存貯體政策授予存取權 | aclRequired 值 |
Reason |
|---|---|---|---|---|---|---|
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 值 |
Reason |
|---|---|---|---|---|---|---|
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 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> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"> <ID>Owner-canonical-user-ID</ID> </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> </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> </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_CONTROL。AllUsers 群組 (請參閱「誰是被授予者?」) 取得 READ 存取。 |
public-read-write |
儲存貯體與物件 | 擁有者取得 FULL_CONTROL。AllUsers 群組取得 READ 與 WRITE 存取。通常不建議在儲存貯體上授予此存取許可。 |
aws-exec-read |
儲存貯體與物件 | 擁有者取得 FULL_CONTROL。Amazon EC2 取得 READ 存取,可從 Amazon S3 GET Amazon Machine Image (AMI) 套件。 |
authenticated-read |
儲存貯體與物件 | 擁有者取得 FULL_CONTROL。AuthenticatedUsers 群組取得 READ 存取許可。 |
bucket-owner-read |
物件 | 物件擁有者取得 FULL_CONTROL。儲存貯體擁有者取得 READ 存取許可。如果您在建立儲存貯體時指定此固定的 ACL,Amazon S3 會予以忽略。 |
bucket-owner-full-control |
物件 | 物件擁有者與儲存貯體擁有者都會取得物件的 FULL_CONTROL。如果您在建立儲存貯體時指定此固定的 ACL,Amazon S3 會予以忽略。 |
log-delivery-write |
儲存貯體 | LogDelivery 群組取得儲存貯體的 WRITE 與 READ_ACP 許可。如需日誌的詳細資訊,請參閱「使用伺服器存取記錄記錄要求」。 |
注意
您只能在要求中指定其中一個固定的 ACL。
您可以在請求中使用 x-amz-acl 請求標頭來指定固定 ACL。當 Amazon S3 收到含有固定 ACL 的請求時,就會將預先定義的授權新增至資源的 ACL。