S3 Access Grants 的概念 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

S3 Access Grants 的概念

S3 Access Grants 为其简化的访问方案引入了以下概念:

S3 Access Grants 实例

S3 Access Grants 实例是单个授权的逻辑容器,用于定义哪些用户对哪些 Amazon S3 数据具有何种级别的访问权限。您的每个 Amazon Web Services 账户在每个 Amazon Web Services 区域中可具有一个 S3 Access Grants 实例。可以使用此 S3 Access Grants 实例来控制对同一账户和 Amazon Web Services 区域中所有存储桶的访问权限。如果您想使用 S3 Access Grants 向公司目录中的用户和组身份授予访问权限,还必须将 S3 Access Grants 实例与 Amazon Identity and Access Management(IAM)Identity Center 实例关联。

位置

位置定义 S3 Access Grants 实例可以授予对哪些数据的访问权限。S3 Access Grants 的工作原理是分发只可用于访问特定 S3 前缀、存储桶或对象的 IAM 凭证。可以将 S3 Access Grants 位置与从中创建这些临时会话的 IAM 角色相关联。最常见的位置配置是 s3:// 上整个 S3 Access Grants 实例的单一位置,它可以涵盖对账户和 Amazon Web Services 区域中的所有 S3 存储桶的访问权限。您也可以在 S3 Access Grants 实例中创建多个位置。例如,可以将存储桶注册为要限制到此存储桶的授权的位置 s3://DOC-EXAMPLE-BUCKET1,也可以注册默认位置 s3://

授权

要缩小某个位置的访问范围,可以创建单个授权。S3 Access Grants 实例中的单个授权允许特定实体(IAM 主体或公司目录中的用户或组)访问 Amazon S3 前缀、存储桶或对象。您可以为每个授权定义不同的范围(前缀、存储桶或对象)和访问级别(READWRITEREADWRITE)。例如,您可能拥有允许特定公司目录组 01234567-89ab-cdef-0123-456789abcdefs3://DOC-EXAMPLE-BUCKET1/projects/items/* 进行 READ 访问的授权。此授权允许该组中的用户对每个对象进行 READ 访问,这些对象在名为 DOC-EXAMPLE-BUCKET1 的存储桶中均具有一个前缀为 projects/items/ 的密钥名称。

S3 Access Grants 临时凭证

应用程序可以通过调用新的 S3 API 操作 GetDataAccess 来请求实时访问凭证,从而请求访问权限级别为 READWRITEREADWRITE 的单个对象、前缀或存储桶。S3 Access Grants 实例根据其拥有的授权来评估 GetDataAccess 请求。如果存在匹配的授权,则 S3 Access Grants 将代入与匹配授权位置关联的 IAM 角色。之后,S3 Access Grants 将 IAM 会话的权限范围限定为由授权范围指定的 S3 存储桶、前缀或对象。虽然临时访问凭证的到期时间默认为 1 小时,但可以将到期时间设置为介于 15 分钟和 36 小时之间的任意值。

工作方式

在下图中,范围为 s3:// 的默认 Amazon S3 位置已注册到 IAM 角色 s3ag-location-role。当通过 S3 Access Grants 获取凭证时,此 IAM 角色有权在账户内执行 Amazon S3 操作。

在此位置,为两个 IAM 用户创建两个单独的访问授权。向 IAM 用户 Bob 授予对 DOC-BUCKET-EXAMPLE 存储桶中的 bob/ 前缀的 READWRITE 访问权限。仅向另一个 IAM 角色 Alice 授予对 DOC-BUCKET-EXAMPLE 桶中 alice/ 前缀的 READ 访问权限。为 Bob 定义了用于访问 DOC-BUCKET-EXAMPLE 存储桶中的前缀 bob/ 的授权(蓝色)。为 Alice 定义了用于访问 DOC-BUCKET-EXAMPLE 存储桶中的前缀 alice/ 的授权(绿色)。

当 Bob 需要对数据进行 READ 访问时,与其授权所在位置关联的 IAM 角色会调用 S3 Access Grants GetDataAccess API 操作。如果 Bob 尝试对任何以 s3://DOC-BUCKET-EXAMPLE/bob/* 开头的 S3 前缀或对象进行 READ 访问,则 GetDataAccess 请求将返回一组具有对 s3://DOC-BUCKET-EXAMPLE/bob/* 的访问权限的临时 IAM 会话凭证。同样,Bob 可以对任何以 s3://DOC-BUCKET-EXAMPLE/bob/* 开头的 S3 前缀或对象进行 WRITE 访问,因为该授权也允许这样做。

同样,Alice 可以对任何以 s3://DOC-BUCKET-EXAMPLE/alice/ 开头的项进行 READ 访问。但是,如果她尝试对 s3:// 中的任何存储桶、前缀或对象进行任何 WRITE 访问,她将收到“拒绝访问(403 禁止)”错误,因为没有允许她对任何数据进行 WRITE 访问的授权。此外,如果 Alice 请求对 s3://DOC-BUCKET-EXAMPLE/alice/ 外部的数据进行任何级别的访问(READWRITE),她将再次收到“拒绝访问”错误。

S3 Access Grants 的工作原理

此模式可以扩展到大量的用户和存储桶,并简化对这些权限的管理。您可以添加和删除单个离散授权,而不是在每次需要添加或删除单个用户前缀访问关系时编辑可能很大的 S3 存储桶策略。