Amazon S3 如何授权对象操作的请求 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Amazon S3 如何授权对象操作的请求

当 Amazon S3 接收对象操作的请求时,它会将所有相关权限转换为一组策略在运行时进行评估,这些相关权限包括:基于资源的权限(对象访问控制列表 (ACL)、存储桶策略、存储桶 ACL)和 IAM 用户策略。然后它会通过一系列步骤评估生成的策略集。在每个步骤中,它会在三个特定上下文 (用户上下文、存储桶上下文和对象上下文) 中评估一个策略子集。

  1. 用户上下文 – 如果请求者是 IAM 委托人,则委托人必须具有来自所属的父 Amazon Web Services 账户 的权限。在此步骤中,Amazon S3 会评估由父账户 (也称为上下文机构) 拥有的一个策略子集。该策略子集包括父账户附加到委托人的用户策略。如果父账户也拥有请求中的资源 (存储桶、对象),则 Amazon S3 还会同时评估相应资源策略 (存储桶策略、存储桶 ACL 和对象 ACL)。

    注意

    如果父 Amazon Web Services 账户 拥有资源(存储桶或对象),则该账户可以使用用户策略或资源策略为其 IAM 委托人授予资源权限。

  2. 存储桶上下文 – 在此上下文中,Amazon S3 评估拥有该存储桶的 Amazon Web Services 账户 所拥有的策略。

    如果拥有请求中的对象的 Amazon Web Services 账户 与存储桶拥有者不同,则 Amazon S3 会在存储桶上下文中检查策略,查看存储桶拥有者是否已显式拒绝对该对象的访问。如果对该对象设置了显式拒绝,则 Amazon S3 不对请求授权。

  3. 对象上下文 – 请求者必须拥有来自对象拥有者的权限才能执行特定对象操作。在此步骤中,Amazon S3 将评估对象 ACL。

    注意

    如果存储桶和对象拥有者相同,则可以在存储桶策略中授予对该对象的访问权限,并会在存储桶上下文中对此进行评估。如果拥有者不同,则对象拥有者必须使用对象 ACL 授予权限。如果拥有对象的 Amazon Web Services 账户 也是 IAM 委托人所属的父账户,则该账户可以在用户策略中配置对象权限,将在用户上下文中对其进行评估。有关使用这些备选访问策略的更多信息,请参阅访问策略指南

下面是基于上下文来评估对象操作的图解说明。

示例 1:对象操作请求

在此示例中,IAM 用户 Jill(父 Amazon Web Services 账户 是 1111-1111-1111)针对 Amazon Web Services 账户 3333-3333-3333 拥有的对象发送对象操作请求 (例如,Get object),该对象位于由 Amazon Web Services 账户 2222-2222-2222 拥有的存储桶中。

Jill 需要从父 Amazon Web Services 账户 、存储桶拥有者和对象拥有者获得权限。Amazon S3 通过以下方式评估上下文:

  1. 由于请求来自 IAM 委托人,因此,Amazon S3 评估用户上下文以验证父 Amazon Web Services 账户 1111-1111-1111 是否为 Jill 授予权限以执行请求的操作。如果她拥有该权限,则 Amazon S3 评估存储桶上下文。否则,Amazon S3 拒绝该请求。

  2. 在存储桶上下文中,存储桶拥有者( Amazon Web Services 账户 2222-2222-2222)是上下文机构。Amazon S3 对存储桶策略进行评估以确定存储桶拥有者是否显式拒绝了 Jill 对该对象的访问。

  3. 在对象上下文中,上下文机构是 Amazon Web Services 账户 3333-3333-3333,即对象拥有者。Amazon S3 评估对象 ACL 以确定 Jill 是否拥有访问该对象的权限。如果她拥有该权限,则 Amazon S3 对该请求进行授权。