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

创建授权

在 Amazon S3 Access Grants 实例中注册至少一个位置后,可以创建访问授权。访问授权向被授权者提供对已注册位置的访问权限。

被授权者可以是 Amazon Identity and Access Management(IAM)用户或角色,也可以是目录用户或组。目录用户是您添加到 Amazon IAM Identity Center 实例(该实例与 S3 Access Grants 实例关联)的公司目录或外部身份源中的用户。要从 IAM Identity Center 为特定用户或组创建授权,请在 IAM Identity Center 中找到 IAM Identity Center 用来识别该用户的 GUID,例如 a1b2c3d4-5678-90ab-cdef-EXAMPLE11111

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

子前缀

在授予对已注册位置的访问权限时,可以使用 Subprefix 字段将范围缩小到存储桶中的特定前缀或存储桶中的特定对象。

无法为默认位置 s3:// 创建访问授权,这将允许被授权者访问区域中的每个存储桶。如果您选择默认位置 s3:// 作为授权位置,则必须使用 Subprefix 字段缩小授权范围以指定下列项之一:

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

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

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

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

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

  • 存储桶中的前缀 – prefix*

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

  • 对象 – /object-key-name

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

如果要创建的访问授权仅授予对一个对象的访问权限,请在 API 调用或 CLI 命令中将 s3PrefixType 指定为 Object

注意

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

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

创建访问授权
  1. 登录到Amazon Web Services 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 权限,无法创建访问授权。请联系您的账户管理员。

要安装 Amazon CLI,请参阅 Amazon Command Line Interface 用户指南中的安装 Amazon 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 控制台或使用 Amazon CLI 或 Amazon 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="DOC-EXAMPLE-BUCKET/rafael/*" \ --permission READWRITE \ --grantee GranteeType=DIRECTORY_USER,GranteeIdentifier=83d43802-00b1-7054-db02-f1d683aacba5 \

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

此部分中的示例说明了如何使用 Amazon 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 )