本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
存取控制清單 (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 帳戶 正式使用者 ID。Grant
元素會識別承授者 ( 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
表示。此群組的存取許可允許世界上任何人存取資源。此請求可以經過簽署 (通過身分驗證) 或未經過簽署 (匿名)。未簽署的要求會省略要求中的身分驗證標頭。
警告
強烈建議您絕不要將
WRITE
、WRITE_ACP
或FULL_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 |
允許承授者對儲存貯體的 READ 、WRITE 、READ_ACP 和 WRITE_ACP 許可 |
允許承授者對儲存貯體的 READ 、READ_ACP 和 WRITE_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: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 、READ_ACP 、 WRITE 和 WRITE_ACP ACL 許可。因此,此 ACL 許可會映射到對應的存取政策許可組合。 |
等同於授予 READ 、 READ_ACP 和 WRITE_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_CONTROL 。AllUsers 群組 (請參閱「誰是被授予者?」) 取得 READ 存取。 |
public-read-write |
儲存貯體與物件 | 擁有者取得 FULL_CONTROL 。AllUsers 群組取得 READ 與 WRITE 存取。通常不建議在儲存貯體上授予此存取許可。 |
aws-exec-read |
儲存貯體與物件 | 擁有者取得 FULL_CONTROL 。Amazon EC2 可從 GET Amazon S3 READ 存取 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 許可。如需日誌的詳細資訊,請參閱「使用伺服器存取記錄記錄要求」。 |
注意
您只能在請求中指定其中一個固定 ACLs。
您可以使用請求標頭在x-amz-acl
請求中指定固定 ACL。當 Amazon S3 在請求中收到具有固定 ACL 的請求時,它會將預先定義的授予新增至資源的 ACL。