註冊位置 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

註冊位置

在您的帳戶中建立 Amazon S3 存取授與執行個體後,您可以 AWS 區域 在該執行個體中註冊 S3 位置。位置是 S3 資源,當中包含您要授予存取權的資料。您可以註冊預設位置 (即中的所有值區) AWS 區域,然後在稍後建立個別存取權授與時縮小存取範圍。s3://您也可以註冊特定儲存貯體或儲存貯體和字首作為位置。

您必須先在 S3 Access Grants 執行個體至少註冊一個位置,然後才能建立存取授權。當您註冊位置時,也必須指定 S3 Access Grants 擔任的 AWS Identity and Access Management (IAM) 角色,以便履行該位置的執行期請求,並將許可範圍縮小到執行期的特定授權。

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

預設位置 s3:// 包括 AWS 區域中的所有儲存貯體。

s3://DOC-EXAMPLE-BUCKET1/ IAM-role-For-bucket

此位置包括所指定儲存貯體中的所有物件。

請先確認執行下列作業,才能註冊位置:

  • 建立一或多個儲存貯體,其中包含您要授予存取權的資料。這些儲存貯體必須與 S3 存取授權執行個體位於相同 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 存取授權提供資源時,您才可以限制 IAM 角色存取 S3 資料。此範例說明如何為特定 S3 存取授與執行個體新增Condition陳述式。若要這麼做,請將條件陳述式中的 S3 存取授與執行個體 ARN 取代為 S3 存取授與執行個體 ARN,格式如下:arn:aws:s3:region:accountId:access-grants/default

    家居政策

    { "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 開發套件,在 S3 存取授予執行個體中註冊一個位置。

您必須至少先註冊一個位置,才能透過 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 角色。選擇角色後,請選擇檢視以確定此角色具有管理您要註冊之位置的必要許可。具體而言,請確認此角色將 sts:AssumeRolests:SetSourceIdentity 許可授予 S3 Access Grants。

      • 輸入 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 政策中移除這些許可。

為了確保 IAM 角色只能在憑證由 S3 Access Grants 供應時用來存取 S3 中的資料,此範例將示範如何在 IAM 政策中新增 Condition 陳述式來指定 S3 Access Grants 執行個體 (s3:AccessGrantsInstance: InstanceArn)。使用下列範例政策時,請將 user input placeholders 取代為您自己的資訊。

家居政策

{ "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 )