Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

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

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

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

    注意

    如果父 AWS 账户拥有资源 (存储桶或对象),则它可通过使用用户策略或资源策略向其 IAM 用户授予资源权限。

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

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

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

    注意

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

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

示例 1:对象操作请求

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

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

  1. 由于该请求来自 IAM 用户,Amazon S3 将评估用户上下文以验证父 AWS 账户 1111-1111-1111 已授予 Jill 执行所请求的操作的权限。如果她拥有该权限,则 Amazon S3 评估存储桶上下文。否则,Amazon S3 拒绝该请求。

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

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