通过 S3 Access Grants 请求访问 Amazon S3 数据 - Amazon Simple Storage Service

通过 S3 Access Grants 请求访问 Amazon S3 数据

在使用 Amazon S3 Access Grants 创建访问授权来向 AWS Identity and Access Management(IAM)主体、公司目录身份或授权应用程序授予对您的 S3 数据的访问权限之后,您的被授权者可以请求用于访问这些数据的凭证。

当应用程序或 AWS 服务 使用 GetDataAccess API 操作代表被授权者向 S3 Access Grants 请求对 S3 数据的访问权限时,S3 Access Grants 首先验证您是否已向该身份授予对此数据的访问权限。然后,S3 Access Grants 使用 AssumeRole API 操作来获取临时凭证令牌并将其出售给请求方。此临时凭证令牌是 AWS Security Token Service(AWS STS)令牌。

GetDataAccess 请求必须包含 target 参数,该参数指定临时凭证适用于的 S3 数据的范围。此 target 范围可以是授权的范围,也可以是该范围的子集,但 target 范围必须在已向请求者提供的授权的范围内。请求还必须指定 permission 参数以指示临时凭证的权限级别,即 READWRITEREADWRITE

请求者可以在其凭证请求中指定临时令牌的权限级别。通过使用 privilege 参数,请求者可以在授权范围边界内缩小或增大临时凭证的访问范围。privilege 参数的默认值为 Default,这意味着返回的凭证的目标范围是原始授权范围。privilege 的另一个可能值是 Minimal。如果 target 范围从最初的授权范围缩小,则只要 target 范围在授权范围内,就会解除临时凭证的范围以匹配 target 范围。

下表详细说明了 privilege 参数对两个授权的影响。一个授权具有范围 S3://example-s3-bucket1/bob/*,其中包括 example-s3-bucket1 存储桶中的整个 bob/ 前缀。另一个授权具有范围 S3://example-s3-bucket1/bob/reports/*,其中仅包括 example-s3-bucket1 存储桶中的 bob/reports/ 前缀。

授权范围 请求的范围 特权 返回的范围 效果
S3://example-s3-bucket1/bob/* example-s3-bucket1/bob/* Default example-s3-bucket1/bob/*

请求者有权访问 example-s3-bucket1 存储桶中所有带以前缀 bob/ 开始的密钥名称的对象。

S3://example-s3-bucket1/bob/* example-s3-bucket1/bob/ Minimal example-s3-bucket1/bob/

如果前缀名称 bob/ 后面没有通配符 *,则请求者只能访问 example-s3-bucket1 存储桶中名为 bob/ 的对象。此类对象并不常见。请求者无权访问任何其他对象,包括那些带以 bob/ 前缀开头的密钥名称的对象。

S3://example-s3-bucket1/bob/* example-s3-bucket1/bob/images/* Minimal example-s3-bucket1/bob/images/*

请求者有权访问 example-s3-bucket1 存储桶中所有带以前缀 bob/images/* 开始的密钥名称的对象。

S3://example-s3-bucket1/bob/reports/* example-s3-bucket1/bob/reports/file.txt Default example-s3-bucket1/bob/reports/*

请求者有权访问 example-s3-bucket1 存储桶中所有带以前缀 bob/reports 开始的密钥名称的对象,它是匹配授权的范围。

S3://example-s3-bucket1/bob/reports/* example-s3-bucket1/bob/reports/file.txt Minimal example-s3-bucket1/bob/reports/file.txt

请求者只能访问 example-s3-bucket1 存储桶中具有密钥名称 bob/reports/file.txt 的对象。请求者无权访问任何其他对象。

durationSeconds 参数设置临时凭证的持续时间(以秒为单位)。默认值为 3600 秒(1 小时),但请求者(被授权者)可以指定介于 900 秒(15 分钟)和 43200 秒(12 小时)之间的范围。如果被授权者请求的值高于此最大值,请求将失败。

注意

在对临时令牌的请求中,如果位置是对象,请将请求中的 targetType 参数值设置为 Object。仅当位置为对象且权限级别为 Minimal 时需要此参数。如果位置是存储桶或前缀,则无需指定此参数。

有关更多信息,请参阅《Amazon Simple Storage Service API 参考》中的 GetDataAccess

您可以使用 AWS Command Line Interface(AWS CLI)、Amazon S3 REST API 和 AWS SDK 请求临时凭证。

要安装 AWS CLI,请参阅 AWS Command Line Interface 用户指南中的安装 AWS CLI

要使用以下示例命令,请将 user input placeholders 替换为您自己的信息。

例 请求临时凭证

请求:

aws s3control get-data-access \ --account-id 111122223333 \ --target s3://example-s3-bucket/prefixA* \ --permission READ \ --privilege Default \ --region us-east-2

响应:

{ "Credentials": { "AccessKeyId": "Example-key-id", "SecretAccessKey": "Example-access-key", "SessionToken": "Example-session-token", "Expiration": "2023-06-14T18:56:45+00:00"}, "MatchedGrantTarget": "s3://example-s3-bucket/prefixA**" }

有关用于请求 S3 Access Grants 中的临时凭证的 Amazon S3 REST API 支持的信息,请参阅《Amazon Simple Storage Service API 参考》中的 GetDataAccess

此部分中的示例说明被授权者如何使用 AWS SDK 从 S3 Access Grants 请求临时凭证。

Java

以下代码示例返回被授权者用于访问您的 S3 数据的临时凭证。要使用此代码示例,请将 user input placeholders 替换为您自己的信息。

例 获取临时凭证

请求:

public void getDataAccess() { GetDataAccessRequest getDataAccessRequest = GetDataAccessRequest.builder() .accountId("111122223333") .permission(Permission.READ) .privilege(Privilege.MINIMAL) .target("s3://example-s3-bucket/prefixA*") .build(); GetDataAccessResponse getDataAccessResponse = s3Control.getDataAccess(getDataAccessRequest); LOGGER.info("GetDataAccessResponse: " + getDataAccessResponse); }

响应:

GetDataAccessResponse( Credentials=Credentials( AccessKeyId="Example-access-key-id", SecretAccessKey="Example-secret-access-key", SessionToken="Example-session-token", Expiration=2023-06-07T06:55:24Z ))