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 收到存储桶操作请求时,Amazon S3 会将基于资源的所有相关 权限 (存储桶策略、存储桶访问控制列表 (ACL)) 和 IAM 用户策略 (如果请求来自用户) 转换为一组用于在运行时进行评估的策略。然后它将通过一系列步骤根据特定上下文 (用户上下文或存储桶上下文) 来评估生成的策略集。

  1. 用户上下文 – 如果请求者是 IAM 用户,则该用户必须拥有来自其所属的父 AWS 账户的权限。在此步骤中,Amazon S3 将评估由父账户 (也称为上下文机构) 拥有的一个策略子集。该策略子集包含父账户附加到该用户的用户策略。如果父级也拥有请求中的资源 (在本例中为存储桶),则 Amazon S3 还会同时评估相应资源策略 (存储桶策略和存储桶 ACL)。只要发出存储桶操作的请求,服务器访问日志就会记录请求者的规范用户 ID。有关更多信息,请参阅 服务器访问日志记录

  2. 存储桶上下文 – 请求者必须拥有来自存储桶拥有者的权限才能执行特定存储桶操作。在此步骤中,Amazon S3 对由拥有该存储桶的 AWS 账户拥有的策略子集进行评估。

    存储桶拥有者可通过使用存储桶策略或存储桶 ACL 来授予权限。请注意,如果拥有存储桶的 AWS 账户也是 IAM 用户的父账户,则该 AWS 账户可以在用户策略中配置存储桶权限。

下面是基于上下文对存储桶操作进行评估的图解说明。

下面的示例演示了评估逻辑。

示例 1:由存储桶拥有者请求的存储桶操作

在此示例中,存储桶拥有者使用 AWS 账户的根凭证发送存储桶操作请求。

Amazon S3 通过以下方式执行上下文评估:

  1. 由于请求是通过使用 AWS 账户的根凭证发出的,因此不评估用户上下文。

  2. 在存储桶上下文中,Amazon S3 检查存储桶策略以确定请求者是否拥有执行该操作的权限。Amazon S3 对该请求进行授权。

示例 2:由不是存储桶拥有者的 AWS 账户请求的存储桶操作

在此示例中,使用 AWS 账户 1111-1111-1111 的根凭证发出请求,请求执行由 AWS 账户 2222-2222-2222 拥有的存储桶操作。该请求不涉及任何 IAM 用户。

在此情况下,Amazon S3 通过以下方式评估上下文:

  1. 由于该请求是使用 AWS 账户的根凭证发出的,因此不评估用户上下文。

  2. 在存储桶上下文中,Amazon S3 检查存储桶策略。如果存储桶拥有者 (AWS 账户 2222-2222-2222) 尚未授权 AWS 账户 1111-1111-1111 执行请求的操作,则 Amazon S3 拒绝该请求。否则,Amazon S3 授权该请求并执行该操作。

示例 3:由父 AWS 账户同时也是存储桶拥有者的 IAM 用户请求的存储桶操作

在此示例中,请求由 AWS 账户 1111-1111-1111 中的 IAM 用户 Jill 发送,该账户同时也拥有该存储桶。

Amazon S3 执行以下上下文评估:

  1. 由于该请求来自用户上下文中的 IAM 用户,Amazon S3 将对属于父 AWS 账户的所有策略进行评估,以确定 Jill 是否拥有执行该操作的权限。

    在此示例中,该用户所属的父 AWS 账户 1111-1111-1111 也是存储桶拥有者。因此,除用户策略外,Amazon S3 还要评估同一上下文中的存储桶策略和存储桶 ACL,因为它们属于同一账户。

  2. 由于 Amazon S3 已将存储桶策略和存储桶 ACL 作为用户上下文的一部分进行了评估,因此它不会评估存储桶上下文。

示例 4:由父 AWS 账户并非存储桶拥有者的 IAM 用户请求的存储桶操作

在此示例中,请求是由父 AWS 账户是 1111-1111-1111 的 IAM 用户 Jill 发送的,但存储桶由另一个 AWS 账户 2222-2222-2222 拥有。

Jill 将需要来自父 AWS 账户和存储桶拥有者双方的权限。Amazon S3 通过以下方式评估上下文:

  1. 由于该请求来自 IAM 用户,Amazon S3 通过检查由该账户授权的策略以验证 Jill 是否拥有所需的权限,从而对用户上下文进行评估。如果 Jill 拥有权限,则 Amazon S3 进一步评估存储桶上下文;否则,Amazon S3 拒绝该请求。

  2. 在存储桶上下文中,Amazon S3 验证存储桶拥有者 2222-2222-2222 是否已授予 Jill (或她的父 AWS 账户) 执行所请求的操作的权限。如果她拥有该权限,则 Amazon S3 授权该请求并执行该操作;否则,Amazon S3 拒绝该请求。