Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

有关使用可用访问策略选项的准则

Amazon S3 支持使用基于资源的策略和用户策略来管理对 Amazon S3 资源的访问 (请参阅管理对资源的访问 (访问策略选项))。基于资源的策略包括存储桶策略、存储桶 ACL 和对象 ACL。本节介绍使用基于资源的访问策略管理对您的 Amazon S3 资源的访问的特定场景。

何时使用基于 ACL 的访问策略 (存储桶和对象 ACL)

存储桶和对象都有可用于授予权限的关联 ACL。以下各节描述使用对象 ACL 和存储桶 ACL 的场景。

何时使用对象 ACL

除对象 ACL 外,对象拥有者还有其他方法可以管理对象权限。例如:

  • 如果拥有对象的 AWS 账户还拥有存储桶,则可以编写存储桶策略来管理对象权限。

  • 如果拥有对象的 AWS 账户要向其账户内的一个用户授予权限,则可以使用用户策略。

那么,何时使用对象 ACL 管理对象权限?下面是使用对象 ACL 管理对象权限的一些场景。

  • 若存储桶拥有者不拥有对象,则只能通过对象 ACL 管理对象访问权限 – 拥有存储桶的 AWS 账户可以授予其他 AWS 账户上传对象的权限。存储桶拥有者不拥有这些对象。创建对象的 AWS 账户使用对象 ACL 授予权限。

    注意

    存储桶拥有者不能对其不拥有的对象授予权限。例如,授予对象权限的存储桶策略仅适用于存储桶拥有者拥有的对象。但是,无论存储桶中的对象归谁所有,支付账单的存储桶拥有者都可以编写存储桶策略来拒绝对存储桶中任何对象的访问。存储桶拥有者还可以删除存储桶内的任何对象。

  • 权限因对象而异,您需要在对象级别管理权限 – 您可以只编写一条策略语句,向一个 AWS 账户授予对数百万具有特定键名称前缀的对象的读取权限。例如,授予对以键名称前缀“logs”开头的对象的读取权限。但是,如果您的访问权限因对象而异,那么使用存储桶策略授予对各个对象的权限可能不太实际。此外,存储桶策略还有 20 KB 的大小限制。

    在这种情况下,使用对象 ACL 可能是比较合适的选择。但是,对象 ACL 也有最多 100 个授权的限制 (请参阅访问控制列表 (ACL) 概述)。

  • 对象 ACL 仅控制对象级权限 – 整个存储桶只有一个存储桶策略,但对象 ACL 是按对象指定的。

    拥有存储桶的 AWS 账户可以授予其他 AWS 账户权限来管理访问策略。它允许该账户更改该策略中的任何内容。为更好地管理权限,您可以选择不授予如此广泛的权限,而只授予对对象子集的 READ-ACP 和 WRITE-ACP 权限。这样可以限制该账户,使其只能通过更新各个对象 ACL 来管理对特定对象的权限。

何时使用存储桶 ACL

存储桶 ACL 的唯一建议的使用案例是授予 Amazon S3 日志传输组写入权限,以便将访问日志对象写入您的存储桶 (请参阅服务器访问日志记录)。如果希望 Amazon S3 将访问日志传输到您的存储桶,您需要向日志传输组授予对存储桶的写入权限。向日志传输组授予必要权限的唯一方法是通过存储桶 ACL,如下面的存储桶 ACL 片段所示。

Copy
<?xml version="1.0" encoding="UTF-8"?> <AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Owner> ... </Owner> <AccessControlList> <Grant> ... </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>

何时使用存储桶策略

如果拥有存储桶的 AWS 账户要向其账户中的用户授予权限,则使用存储桶策略或用户策略均可。但在以下情况下则需要使用存储桶策略。

  • 要管理所有 Amazon S3 权限的跨账户权限 – 您可以使用 ACL 授予其他账户跨账户权限,但 ACL 仅支持一组有限的权限 (我能授予哪些许可?),其中并不包括所有 Amazon S3 权限。例如,使用 ACL 不能授予对存储桶子资源 (请参阅管理对 Amazon S3 资源的访问权限) 的权限。

    虽然存储桶和用户策略都支持授予所有 Amazon S3 操作权限 (请参阅在策略中指定权限),但用户策略是用来管理您账户中用户的权限的。对于其他 AWS 账户或其他账户中用户的跨账户权限,则必须使用存储桶策略。

何时使用用户策略

一般情况下,您都可以使用用户策略或存储桶策略来管理权限。您可以选择通过创建用户并向用户 (或用户组) 附加策略来分别管理权限,或者也可能发现基于资源的策略 (如存储桶策略) 更适合您的场景。

请注意,使用 AWS Identity and Access Management (IAM) 可以在您的 AWS 账户中创建多个用户并通过用户策略管理其权限。IAM 用户必须拥有两种权限:一种权限来自其父账户,另一种权限来自拥有该用户要访问的资源的 AWS 账户。权限可通过以下方式授予:

  • 来自父账户的权限 – 父账户可以通过附加用户策略向其用户授予权限。

  • 来自资源拥有者的权限 – 资源拥有者可以向 IAM 用户 (使用存储桶策略) 或父账户 (使用存储桶策略、存储桶 ACL 或对象 ACL) 授予权限。

这类似于一个孩子想要玩别人的玩具。在这种情况下,这个孩子必须征得家长和玩具主人的同意才能玩这个玩具。

权限委托

如果某 AWS 账户拥有一项资源,它可以将这些权限授予其他 AWS 账户。然后这个账户就可以将这些权限或其子集委托给该账户中的用户。这称为权限委托。但从另一账户接收权限的账户不能向其他 AWS 账户跨账户委托权限。

我们建议您先阅读讲解如何管理对您的 Amazon S3 资源的访问的介绍性主题和相关指南。有关更多信息,请参阅 Amazon S3 资源访问权限管理介绍。然后再通过以下主题了解有关特定访问策略选项的更多信息。