本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 帳戶 正式使用者 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 使用者指南》中的建立角色將許可委派給 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 值 |
原因 |
---|---|---|---|---|---|---|
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 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_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。