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

Amazon S3 如何对存储桶操作请求进行授权

当 Amazon S3 收到存储桶操作请求时,Amazon S3 会将所有相关的权限转换为一组策略,以在运行时评估。相关权限包括基于资源的权限(例如,存储桶策略和存储桶访问控制列表)和用户策略(如果请求来自 IAM 主体)。然后,Amazon S3 将通过一系列步骤根据特定上下文(用户上下文或存储桶上下文)来评估生成的策略集。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

示例 3:IAM 主体请求的存储桶操作,其父 Amazon Web Services 账户也是存储桶拥有者

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

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

  1. 由于请求来自 IAM 主体,因此,在用户上下文中,Amazon S3 评估属于父 Amazon Web Services 账户的所有策略以确定 Jill 是否有权执行该操作。

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

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

示例 4:IAM 主体请求的存储桶操作,其父 Amazon Web Services 账户不是存储桶拥有者

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

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

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

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