菜单
Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)

访问控制列表 (ACL) 概述

Amazon S3 访问控制列表 (ACL) 使您可以管理对存储桶和对象的访问权限。每个存储桶和对象都有一个作为子资源而附加的 ACL。它定义了哪些 AWS 账户或组将被授予访问权限以及访问的类型。收到针对某个资源的请求后,Amazon S3 将检查相应的 ACL 以验证请求者是否拥有所需的访问权限。

创建存储桶或对象时,Amazon S3 将创建一个默认 ACL,以授予资源拥有者对资源的完全控制权限,如下面的示例存储桶 ACL 中所示 (默认的对象 ACL 拥有相同的结构)。

Copy
<?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 包含一个可通过 AWS 账户的规范用户 ID 识别所有者的 Owner 元素。Grant 元素可以识别被授权者 (AWS 账户或预定义的组) 和所授予的许可。此默认的 ACL 拥有一个适用于所有者的 Grant 元素。您可以通过添加 Grant 元素授予许可,每个授权都可以识别被授权者和许可。

注意

ACL 可以拥有最多 100 个授权。

谁是被授权者?

被授权者可以是 AWS 账户或某个预定义的 Amazon S3 组。您可以通过电子邮件地址或规范用户 ID 将许可授予 AWS 账户。但是,如果您在授权请求中提供电子邮件,Amazon S3 将为该账户查找规范用户 ID 并将它添加到 ACL。生成的 ACL 将始终包含 AWS 账户的规范用户 ID,而不是 AWS 账户的电子邮件地址。

重要

您无法使用电子邮件地址为在 2014 年 12 月 8 日以后创建的任何 AWS 区域指定被授权者。以下区域是在 2014 年 12 月 8 日以后创建的:美国东部(俄亥俄州)、加拿大 (中部)、亚太地区(孟买)、亚太区域(首尔)、欧洲(法兰克福)、欧洲 (伦敦)、中国(北京) 和 AWS GovCloud (US) 区域。

查找 AWS 账户的规范用户 ID

规范用户 ID 与您的 AWS 账户关联。您只能在登录到 AWS 管理控制台时使用 AWS 账户的根凭证获取规范用户 ID。您无法使用任何其他凭证,例如,您无法使用 IAM 用户或联合身份用户凭证获取此 ID。有关安全证书的更多信息,请参阅如何获取安全证书?

查找您的 AWS 账户的规范用户 ID

  1. 使用 AWS 根凭证 (不要使用 IAM 或联合身份用户凭证) 通过 https://aws.amazon.com/console 登录到 AWS 管理控制台。

  2. 参阅安全证书

  3. Account Identifiers 部分,查找与您的 AWS 账户关联的规范用户 ID。

您也可以通过读取 AWS 账户有权访问的存储桶或对象的 ACL,查找 AWS 账户的规范用户 ID。如果某个 AWS 账户通过授权请求被授予了许可,ACL 中将新增一个授权条目和 AWS 账户的规范用户 ID。有关规范用户 ID 的更多信息,请参阅 AWS 账户标识符

Amazon S3 预定义的组

Amazon S3 拥有一系列预定义的组。将账户访问权限授予某个组时,您可以指定我们的一个 URI,而不是规范用户 ID。我们提供以下预定义的组:

  • 经身份验证的用户组 – 由 http://acs.amazonaws.com/groups/global/AuthenticatedUsers 表示。

    该组代表了所有的 AWS 账户。该组的访问许可允许任何 AWS 账户访问资源。但是,所有的请求必须是已签名的 (经身份验证)。

  • 所有的用户组 – 由 http://acs.amazonaws.com/groups/global/AllUsers 表示。

    该组的访问许可允许任何人访问资源。请求可以是已签名的 (经身份验证),也可以是未签名的 (匿名)。未签名的请求将省略请求中的 Authentication 标头。

  • 日志传输组 – 由 http://acs.amazonaws.com/groups/s3/LogDelivery 表示。

    存储桶上的 WRITE 许可使该组可以将服务器访问日志 (参阅 服务器访问日志记录) 写入存储桶。

注意

使用 ACL 时,被授权者可以是 AWS 账户或是某个预定义的 Amazon S3 组。但是,被授权者不能是 Identity and Access Management (IAM) 用户。有关 IAM 中 AWS 用户和许可的更多信息,请参阅使用 AWS Identity and Access Management

注意

当您需要向其他 AWS 账户授权访问您的资源时,注意 AWS 账户可以向其账户下的用户授予权限。这称为交叉账户访问。有关使用跨账户访问的信息,请参阅 IAM 用户指南 中的创建角色以向 IAM 用户委派权限

我能授予哪些许可?

下表列出了 Amazon S3 在 ACL 中支持的权限集。注意,对于对象 ACL 和存储桶 ACL,ACL 权限集相同。但根据上下文 (存储桶 ACL 或对象 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 许可

ACL 权限和访问策略权限的映射

如先前表中所示,相比于在访问策略中可设置的权限数目 (请参阅在策略中指定权限),ACL 仅允许授予有限数量的权限。其中的每个权限允许一个或多个 Amazon S3 操作。下表显示每个 ACL 权限如何映射到相应的访问策略权限。正如所能够看到的,访问策略允许的权限多于 ACL,ACL 主要用于授予基本读/写权限,这与文件系统权限类似。有关何时使用 ACL 的更多信息,请参阅有关使用可用访问策略选项的准则

ACL 权限 当在存储桶上授予 ACL 权限时的相应访问策略 当在对象上授予 ACL 权限时的相应访问策略
READ s3:ListBuckets3:ListBucketVersionss3:ListBucketMultipartUploads s3:GetObjects3:GetObjectVersions3:GetObjectTorrent
WRITE

s3:PutObjects3:DeleteObject

此外,如果被授权者是存储桶拥有者,使用存储桶 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 可识别资源所有者和一系列的授权。格式是 Amazon S3 REST API 中的 ACL 的 XML 表示形式。存储桶拥有者拥有资源的 FULL_CONTROL。此外,ACL 演示了如何将某个资源的权限授予两个 AWS 账户、规范用户 ID 如何识别权限,以及上一节讨论的两个预定义 Amazon S3 组。

Copy
<?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 从 Amazon S3 获取对 GET Amazon 系统映像 (AMI) 捆绑的 READ 访问权限。
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 添加预定义的授权。

如何指定 ACL

Amazon S3 API 使您可以在创建存储桶或对象时设置 ACL。Amazon S3 还提供 API 以在现有存储桶或对象上设置 ACL。这些 API 向您提供了以下方法来设置 ACL:

  • 使用请求标头设置 ACL – 发送创建资源 (存储桶或对象) 的请求时,您可以使用请求标头设置 ACL。使用这些标头时,您可以指定一个标准 ACL 或者显式指定授权 (显式识别被授权者和许可)。

  • 使用请求正文设置 ACL – 当您发送在现有资源上设置 ACL 的请求时,您可以在请求标头或正文中设置 ACL。

有关更多信息,请参阅 管理 ACL