创建授权 - Amazon Simple Storage Service

创建授权

S3 访问权限管控实例中的单个访问权限管控 可让特定身份 [AWS Identity and Access Management(IAM)主体或公司目录中的用户或组] 在 S3 访问权限管控实例中注册的位置内获得访问权限。位置将存储桶或前缀映射到 IAM 角色。S3 访问权限管控代入此 IAM 角色,来向被授权者提供临时凭证。

在 S3 访问权限管控实例中注册至少一个位置后,可以创建访问权限管控。

被授权者可以是 IAM 用户或角色,也可以是目录用户或组。目录用户是与 S3 访问权限管控实例关联的公司目录或外部身份源中的用户。有关更多信息,请参阅 S3 Access Grants 和公司目录身份。要从 IAM Identity Center 为特定目录用户或组创建授权,请在 IAM Identity Center 中找到 IAM Identity Center 用来标识该用户的 GUID,例如 a1b2c3d4-5678-90ab-cdef-EXAMPLE11111。有关如何使用 IAM Identity Center 来查看用户信息的更多信息,请参阅《AWS IAM Identity Center 用户指南》中的 View user and group assignments

您可以授予对存储桶、前缀或对象的访问权限。Amazon S3 中的前缀是用于整理存储桶中对象的对象密钥名称开头的字符串。这可以是任何支持的字符串,例如,存储桶中以 engineering/ 前缀开头的对象键名称。

子前缀

在授予对已注册位置的访问权限时,可以使用 Subprefix 字段将访问权限范围缩小到位置范围的子集。如果您为授权选择的已注册位置是默认 S3 路径 (s3://),则必须缩小授权范围。无法为默认位置 (s3://) 创建访问权限管控,这将向被授权者授予访问 AWS 区域中每个存储桶的权限。相反,您必须将授权范围缩小到以下各项之一:

  • 存储桶:s3://bucket/*

  • 存储桶中的前缀:s3://bucket/prefix*

  • 前缀中的前缀:s3://bucket/prefixA/prefixB*

  • 对象:s3://bucket/object-key-name

如果您要在已注册位置为存储桶的情况下创建访问权限管控,则可在 Subprefix 字段中传递下列项之一来缩小授权范围:

  • 存储桶中的前缀:prefix*

  • 前缀中的前缀:prefixA/prefixB*

  • 对象:/object-key-name

在创建授权后,Amazon S3 控制台中显示的授权范围或者 API 或 AWS Command Line Interface(AWS CLI)响应中返回的 GrantScope 是将位置路径与 Subprefix 连接后的结果。确保此连接的路径正确映射到要授予其访问权限的 S3 存储桶、前缀或对象。

注意
  • 如果要创建的访问权限管控仅授予对一个对象的访问权限,则必须指定授权类型是针对某个对象的。要在 API 调用或 CLI 命令中执行此操作,请传递带有 Object 值的 s3PrefixType 参数。在 Amazon S3 控制台中,当您创建授权时,在选择位置后,在授权范围下,选中授权范围是一个对象复选框。

  • 如果存储桶尚不存在,则无法创建存储桶的授权。但是,您可以创建对尚不存在的前缀的授权。

  • 有关您可以在 S3 访问权限管控实例中创建的最大授权数量,请参阅 S3 Access Grants 限制

您可以使用 Amazon S3 控制台、AWS CLI、Amazon S3 REST API 和 AWS SDK 创建访问授权。

创建访问授权
  1. 登录到AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在左侧导航窗格中,选择 Access Grants

  3. S3 Access Grants 页面上,选择包含要使用的 S3 Access Grants 实例的区域。

    如果您是首次使用 S3 Access Grants 实例,请确保已完成步骤 2 - 注册位置,并导航到设置 Access Grants 实例向导的步骤 3。如果您已拥有 S3 Access Grants 实例,请选择查看详细信息,然后从授权选项卡中选择创建授权

    1. 授权范围部分中,选择或输入已注册位置。

      如果您选择了默认 s3:// 位置,请使用子前缀框来缩小访问授权的范围。有关更多信息,请参阅子前缀。如果您只授予一个对象的访问权限,请选择授权范围为对象

    2. 权限和访问下,选择权限级别,即读取和/或写入

      然后选择被授权者类型。如果您已将公司目录添加到 IAM Identity Center,并将此 IAM Identity Center 实例与 S3 Access Grants 实例关联,则可以选择 IAM Identity Center 中的目录身份。如果您选择此选项,请从 IAM Identity Center 获取用户或组的 ID,然后在此部分中输入此 ID。

      如果被授权者类型是 IAM 用户或角色,请选择 IAM 主体。在 IAM 主体类型下,选择用户角色。然后,在 IAM 主体用户下,从列表中进行选择或输入身份的 ID。

    3. 要创建 S3 Access Grants 授权,请选择下一步创建授权

  4. 如果已禁用下一步创建授权,则:

    无法创建授权
    • 您可能需要先在 S3 Access Grants 实例中注册位置

    • 您可能没有 s3:CreateAccessGrant 权限,无法创建访问授权。请联系您的账户管理员。

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

以下示例说明如何为 IAM 主体创建访问授权请求以及如何为公司目录用户或组创建访问授权请求。

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

注意

如果要创建的访问授权仅授予对一个对象的访问权限,请包括必需参数 --s3-prefix-type Object

例 为 IAM 主体创建访问授权请求
aws s3control create-access-grant \ --account-id 111122223333 \ --access-grants-location-id a1b2c3d4-5678-90ab-cdef-EXAMPLE22222 \ --access-grants-location-configuration S3SubPrefix=prefixB* \ --permission READ \ --grantee GranteeType=IAM,GranteeIdentifier=arn:aws:iam::123456789012:user/data-consumer-3
例 创建访问授权响应
{"CreatedAt": "2023-05-31T18:41:34.663000+00:00", "AccessGrantId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "AccessGrantArn": "arn:aws:s3:us-east-2:111122223333:access-grants/default/grant/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "Grantee": { "GranteeType": "IAM", "GranteeIdentifier": "arn:aws:iam::111122223333:user/data-consumer-3" }, "AccessGrantsLocationId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "AccessGrantsLocationConfiguration": { "S3SubPrefix": "prefixB*" }, "GrantScope": "s3://DOC-BUCKET-EXAMPLE/prefix*", "Permission": "READ" }
为目录用户或组创建访问授权请求

要为目录用户或组创建访问授权请求,您必须先运行下列命令之一来获取目录用户或组的 GUID。

例 获取目录用户或组的 GUID

您可以通过 IAM Identity Center 控制台或使用 AWS CLI 或 AWS SDK 来查找 IAM Identity Center 用户的 GUID。以下命令列出指定的 IAM Identity Center 实例中的用户及其名称和标识符。

aws identitystore list-users --identity-store-id d-1a2b3c4d1234

此命令列出指定的 IAM Identity Center 实例中的组。

aws identitystore list-groups --identity-store-id d-1a2b3c4d1234
例 为目录用户或组创建访问授权

此命令类似于用来为 IAM 用户或角色创建授权的命令,只是被授权者类型为 DIRECTORY_USERDIRECTORY_GROUP,并且被授权者标识符为目录用户或组的 GUID。

aws s3control create-access-grant \ --account-id 123456789012 \ --access-grants-location-id default \ --access-grants-location-configuration S3SubPrefix="amzn-s3-demo-bucket/rafael/*" \ --permission READWRITE \ --grantee GranteeType=DIRECTORY_USER,GranteeIdentifier=83d43802-00b1-7054-db02-f1d683aacba5 \

有关用于管理访问授权的 Amazon S3 REST API 支持的信息,请参阅《Amazon Simple Storage Service API 参考》中的以下部分:

此部分中的示例说明了如何使用 AWS SDK 创建访问授权。

Java

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

注意

如果要创建的访问授权仅授予对一个对象的访问权限,请包括必需参数 .s3PrefixType(S3PrefixType.Object)

例 创建访问授权请求
public void createAccessGrant() { CreateAccessGrantRequest createRequest = CreateAccessGrantRequest.builder() .accountId("111122223333") .accessGrantsLocationId("a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa") .permission("READ") .accessGrantsLocationConfiguration(AccessGrantsLocationConfiguration.builder().s3SubPrefix("prefixB*").build()) .grantee(Grantee.builder().granteeType("IAM").granteeIdentifier("arn:aws:iam::111122223333:user/data-consumer-3").build()) .build(); CreateAccessGrantResponse createResponse = s3Control.createAccessGrant(createRequest); LOGGER.info("CreateAccessGrantResponse: " + createResponse); }
例 创建访问授权响应
CreateAccessGrantResponse( CreatedAt=2023-06-07T05:20:26.330Z, AccessGrantId=a1b2c3d4-5678-90ab-cdef-EXAMPLE33333, AccessGrantArn=arn:aws:s3:us-east-2:444455556666:access-grants/default/grant/a1b2c3d4-5678-90ab-cdef-EXAMPLE33333, Grantee=Grantee( GranteeType=IAM, GranteeIdentifier=arn:aws:iam::111122223333:user/data-consumer-3 ), AccessGrantsLocationId=a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa, AccessGrantsLocationConfiguration=AccessGrantsLocationConfiguration( S3SubPrefix=prefixB* ), GrantScope=s3://DOC-BUCKET-EXAMPLE/prefixB, Permission=READ )