注册位置 - Amazon Simple Storage Service

注册位置

在您的账户中的 AWS 区域中创建 Amazon S3 Access Grants 实例后,可以在该实例中注册 S3 位置。位置是一种 S3 资源,其中包含要授予其访问权限的数据。您可以注册默认位置 s3://,即 AWS 区域中的所有存储桶,然后在创建个人访问授权时缩小访问范围。您也可以将特定的存储桶或存储桶和前缀注册为位置。

您必须先在 S3 Access Grants 实例中注册至少一个位置,然后才能创建访问授权。在注册位置时,您还必须指定 S3 Access Grants 代入的 AWS Identity and Access Management(IAM)角色来完成该位置的运行时系统请求,并将权限范围缩小到运行时系统的特定授权。

S3 URI IAM 角色 描述
s3:// Default-IAM-role

默认位置 s3:// 包括 AWS 区域中的所有存储桶。

s3://example-s3-bucket1/ IAM-role-For-bucket

此位置包括指定存储桶中的所有对象。

您必须先执行以下操作,之后才能注册位置:

  • 创建一个或多个存储桶,其中包含要授予其访问权限的数据。这些存储桶必须位于您的 S3 Access Grants 实例所在的 AWS 区域中。有关更多信息,请参阅创建存储桶

    要向存储桶添加前缀,请参阅创建对象密钥名称

  • 创建一个 IAM 角色并在资源策略文件中向 S3 Access Grants 服务主体授予该角色的访问权限。为此,您可以创建一个包含以下语句的 JSON 文件。要将资源策略添加到您的账户,请参阅创建和附加您的第一个客户管理型策略

    TestRolePolicy.json

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1234567891011", "Action": ["sts:AssumeRole", "sts:SetSourceIdentity", "sts:SetContext"], "Effect": "Allow", "Principal": {"Service":"access-grants.s3.amazonaws.com"} } ] }
  • 创建一个 IAM 策略,将 Amazon S3 权限附加到 IAM 角色。请查看以下示例 iam-policy.json 文件,并将 user input placeholders 替换为您自己的信息。

    注意
    • 如果您使用采用 AWS Key Management Service(AWS KMS)密钥的服务器端加密来加密数据,则以下示例将在策略中包含 IAM 角色的必要 AWS KMS 权限。如果您不使用此功能,则可以从 IAM 策略中删除这些权限。

    • 仅当凭证由 S3 Access Grants 出售时,您才能将 IAM 角色限制为访问 S3 数据。此示例说明如何为特定 S3 Access Grants 实例添加 Condition 语句。为此,请将条件语句中的 S3 Access Grants 实例 ARN 替换为您的 S3 Access Grants 实例 ARN,其格式为:arn:aws:s3:region:accountId:access-grants/default

    iam-policy.json

    { "Version":"2012-10-17", "Statement": [ { "Sid": "ObjectLevelReadPermissions", "Effect":"Allow", "Action":[ "s3:GetObject", "s3:GetObjectVersion", "s3:GetObjectAcl", "s3:GetObjectVersionAcl", "s3:ListMultipartUploadParts" ], "Resource":[ "arn:aws:s3:::*" ], "Condition":{ "StringEquals": { "aws:ResourceAccount": "accountId" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": ["arn:aws:s3:region:accountId:access-grants/default"] } } }, { "Sid": "ObjectLevelWritePermissions", "Effect":"Allow", "Action":[ "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectVersionAcl", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:AbortMultipartUpload" ], "Resource":[ "arn:aws:s3:::*" ], "Condition":{ "StringEquals": { "aws:ResourceAccount": "accountId" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": ["arn:aws:s3:AWS 区域:accountId:access-grants/default"] } } }, { "Sid": "BucketLevelReadPermissions", "Effect":"Allow", "Action":[ "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::*" ], "Condition":{ "StringEquals": { "aws:ResourceAccount": "accountId" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": ["arn:aws:s3:AWS 区域:accountId:access-grants/default"] } } }, { "Sid": "KMSPermissions", "Effect":"Allow", "Action":[ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource":[ "*" ] } ] }

您可以使用 Amazon S3 控制台、AWS Command Line Interface(AWS CLI)、Amazon S3 REST API 和 AWS SDK 在 S3 Access Grants 实例中注册位置。

您必须先注册至少一个位置,之后才能使用 S3 Access Grants 授予对 S3 数据的访问权限。

在 S3 Access Grants 实例中注册位置
  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 实例,请确保已完成步骤 1 - 创建 S3 Access Grants 实例,并导航到设置 Access Grants 实例向导的步骤 2。如果您已拥有 S3 Access Grants 实例,请选择查看详细信息,然后从位置选项卡中选择注册位置

    1. 对于位置范围,请选择浏览 S3 或输入要注册的位置的 S3 URI 路径。有关 S3 URI 格式,请参阅位置格式表。输入 URI 后,您可以选择查看来浏览该位置。

    2. 对于 IAM 角色,请选择下列选项之一:

      • 从现有 IAM 角色中选择

        从下拉列表中选择 IAM 角色。选择一个角色后,选择查看,确保该角色具有管理要注册的位置所需的权限。具体而言,请确保此角色向 S3 Access Grants 授予 sts:AssumeRolests:SetSourceIdentity 权限。

      • 输入 IAM 角色 ARN

        导航到 IAM 控制台。复制 IAM 角色的 Amazon 资源名称(ARN),并将它粘贴到此框中。

    3. 要完成此操作,请选择下一步注册位置

  4. 故障排除:

    无法注册位置
    • 该位置可能已被注册。

      您可能没有 s3:CreateAccessGrantsLocation 权限,无法注册位置。请联系您的账户管理员。

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

您可以在 S3 Access Grants 实例中注册默认位置 s3:// 或自定义位置。请确保先创建一个具有该位置的主体访问权限的 IAM 角色,然后确保授予 S3 Access Grants 权限以代入此角色。

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

例 创建资源策略

创建允许 S3 Access Grants 代入 IAM 角色的策略。为此,您可以创建一个包含以下语句的 JSON 文件。要将资源策略添加到您的账户,请参阅创建和附加您的第一个客户管理型策略

TestRolePolicy.json

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1234567891011", "Action": ["sts:AssumeRole", "sts:SetSourceIdentity"], "Effect": "Allow", "Principal": {"Service":"access-grants.s3.amazonaws.com"} } ] }
例 创建角色

运行以下 IAM 命令以创建该角色。

aws iam create-role --role-name accessGrantsTestRole \ --region us-east-2 \ --assume-role-policy-document file://TestRolePolicy.json

运行 create-role 命令将返回策略:

{ "Role": { "Path": "/", "RoleName": "accessGrantsTestRole", "RoleId": "AROASRDGX4WM4GH55GIDA", "Arn": "arn:aws:iam::111122223333:role/accessGrantsTestRole", "CreateDate": "2023-05-31T18:11:06+00:00", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1685556427189", "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity" ], "Effect": "Allow", "Principal": { "Service":"access-grants.s3.amazonaws.com" } } ] } } }

创建一个 IAM 策略,将 Amazon S3 权限附加到 IAM 角色。请查看以下示例 iam-policy.json 文件,并将 user input placeholders 替换为您自己的信息。

注意

如果您使用具有 AWS Key Management Service(AWS KMS)密钥的服务器端加密来加密数据,则以下示例将在策略中添加 IAM 角色的必要 AWS KMS 权限。如果您不使用此功能,则可以从 IAM 策略中删除这些权限。

为了确保在凭证由 S3 Access Grants 分发时,IAM 角色只能用于访问 S3 中的数据,此示例向您说明了如何在 IAM 策略中添加一个指定 S3 Access Grants 实例(s3:AccessGrantsInstance: InstanceArn)的 Condition 语句。在使用以下示例策略时,请将 user input placeholders 替换为您自己的信息。

iam-policy.json

{ "Version":"2012-10-17", "Statement": [ { "Sid": "ObjectLevelReadPermissions", "Effect":"Allow", "Action":[ "s3:GetObject", "s3:GetObjectVersion", "s3:GetObjectAcl", "s3:GetObjectVersionAcl", "s3:ListMultipartUploadParts" ], "Resource":[ "arn:aws:s3:::*" ], "Condition":{ "StringEquals": { "aws:ResourceAccount": "accountId" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": ["arn:aws:s3:region:accountId:access-grants/default"] } } }, { "Sid": "ObjectLevelWritePermissions", "Effect":"Allow", "Action":[ "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectVersionAcl", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:AbortMultipartUpload" ], "Resource":[ "arn:aws:s3:::*" ], "Condition":{ "StringEquals": { "aws:ResourceAccount": "accountId" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": ["arn:aws:s3:AWS 区域:accountId:access-grants/default"] } } }, { "Sid": "BucketLevelReadPermissions", "Effect":"Allow", "Action":[ "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::*" ], "Condition":{ "StringEquals": { "aws:ResourceAccount": "accountId" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": ["arn:aws:s3:AWS 区域:accountId:access-grants/default"] } } }, { "Sid": "KMSPermissions", "Effect":"Allow", "Action":[ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource":[ "*" ] } ] }

运行以下命令:

aws iam put-role-policy \ --role-name accessGrantsTestRole \ --policy-name accessGrantsTestRole \ --policy-document file://iam-policy.json
例 注册默认位置
aws s3control create-access-grants-location \ --account-id 111122223333 \ --location-scope s3:// \ --iam-role-arn arn:aws:iam::111122223333:role/accessGrantsTestRole

响应:

{"CreatedAt": "2023-05-31T18:23:48.107000+00:00", "AccessGrantsLocationId": "default", "AccessGrantsLocationArn": "arn:aws:s3:us-east-2:111122223333:access-grants/default/location/default", "LocationScope": "s3://” "IAMRoleArn": "arn:aws:iam::111122223333:role/accessGrantsTestRole" }
例 注册自定义位置
aws s3control create-access-grants-location \ --account-id 111122223333 \ --location-scope s3://DOC-BUCKET-EXAMPLE/ \ --iam-role-arn arn:aws:iam::123456789012:role/accessGrantsTestRole

响应:

{"CreatedAt": "2023-05-31T18:23:48.107000+00:00", "AccessGrantsLocationId": "635f1139-1af2-4e43-8131-a4de006eb456", "AccessGrantsLocationArn": "arn:aws:s3:us-east-2: 111122223333:access-grants/default/location/635f1139-1af2-4e43-8131-a4de006eb888", "LocationScope": "s3://DOC-BUCKET-EXAMPLE/", "IAMRoleArn": "arn:aws:iam::111122223333:role/accessGrantsTestRole" }

有关用于管理 S3 Access Grants 实例的 Amazon S3 REST API 支持的信息,请参阅《Amazon Simple Storage Service API 参考》中的以下部分:

此部分中的示例说明了如何使用 AWS SDK 注册位置。

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

Java

您可以在 S3 Access Grants 实例中注册默认位置 s3:// 或自定义位置。请确保先创建一个具有该位置的主体访问权限的 IAM 角色,然后确保授予 S3 Access Grants 权限以代入此角色。

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

例 注册默认位置

请求:

public void createAccessGrantsLocation() { CreateAccessGrantsLocationRequest createRequest = CreateAccessGrantsLocationRequest.builder() .accountId("111122223333") .locationScope("s3://") .iamRoleArn("arn:aws:iam::123456789012:role/accessGrantsTestRole") .build(); CreateAccessGrantsLocationResponse createResponse = s3Control.createAccessGrantsLocation(createRequest); LOGGER.info("CreateAccessGrantsLocationResponse: " + createResponse); }

响应:

CreateAccessGrantsLocationResponse( CreatedAt=2023-06-07T04:35:11.027Z, AccessGrantsLocationId=default, AccessGrantsLocationArn=arn:aws:s3:us-east-2:111122223333:access-grants/default/location/default, LocationScope=s3://, IAMRoleArn=arn:aws:iam::111122223333:role/accessGrantsTestRole )
例 注册自定义位置

请求:

public void createAccessGrantsLocation() { CreateAccessGrantsLocationRequest createRequest = CreateAccessGrantsLocationRequest.builder() .accountId("111122223333") .locationScope("s3://DOC-BUCKET-EXAMPLE/") .iamRoleArn("arn:aws:iam::111122223333:role/accessGrantsTestRole") .build(); CreateAccessGrantsLocationResponse createResponse = s3Control.createAccessGrantsLocation(createRequest); LOGGER.info("CreateAccessGrantsLocationResponse: " + createResponse); }

响应:

CreateAccessGrantsLocationResponse( CreatedAt=2023-06-07T04:35:10.027Z, AccessGrantsLocationId=18cfe6fb-eb5a-4ac5-aba9-8d79f04c2012, AccessGrantsLocationArn=arn:aws:s3:us-east-2:111122223333:access-grants/default/location/18cfe6fb-eb5a-4ac5-aba9-8d79f04c2666, LocationScope= s3://test-bucket-access-grants-user123/, IAMRoleArn=arn:aws:iam::111122223333:role/accessGrantsTestRole )