S3 Access Grants 跨帳户存取權 - Amazon Simple Storage Service

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

S3 Access Grants 跨帳户存取權

使用 S3 Access Grants,您可以授予 Amazon S3 資料對下列項目的存取權:

  • AWS Identity and Access Management 帳戶中的 (IAM) 身分

  • IAM 其他 AWS 帳戶中的身分

  • 在您的 AWS IAM Identity Center 執行個體中目錄使用者或群組

首先,設定另一個帳戶的跨帳戶存取權。這包括使用資源政策授予對 S3 Access Grants 執行個體的存取權。然後,透過使用 授予來授予對 S3 資料的存取權 (儲存貯體、字首或物件)。

設定跨帳戶存取後,另一個帳戶可以從 Amazon S3 S3 資料的憑證。下圖顯示跨帳戶 S3 透過 S3 Access Grants S3存取的使用者流程:

S3 Access Grants 跨帳戶使用者流程
  1. 第二個 帳戶 (B) 中的使用者或應用程式會向儲存 Amazon S3 資料的帳戶 (A) 中的 S3 Access Grants 執行個體請求憑證。 Amazon S3 如需詳細資訊,請參閱透過 S3 Access Grants 請求存取 Amazon S3 資料

  2. 您帳戶中的 S3 Access Grants 執行個體 (A) 會在授予第二個帳戶存取 Amazon S3 資料的授予時傳回臨時憑證。如需存取授與的詳細資訊,請參閱 在 S3 Access Grants 中使用 授予

  3. 第二個帳戶 (B) 中的使用者或應用程式使用 S3 Access Grants-vended 憑證來存取您帳戶 (A) 中的 S3 資料。

設定 S3 Access Grants 跨帳戶存取

若要透過 S3 Access Grants 授予跨帳戶 S3 存取權,請遵循下列步驟:

  • 步驟 1:在帳戶中設定 S3 Access Grants 執行個體,例如儲存 S3 111122223333資料的帳戶 ID 。

  • 步驟 2:設定您帳戶中 S3 Access Grants 執行個體的資源政策111122223333,以授予第二個帳戶的存取權,例如帳戶 ID 444455556666

  • 步驟 3:設定第二個帳戶中IAM主體的IAM許可444455556666,以從您帳戶中的 S3 Access Grants 執行個體請求憑證111122223333

  • 步驟 4:在您的帳戶中建立授予111122223333,讓第二個帳戶中的IAM主體444455556666存取您帳戶中的一些 S3 資料111122223333

步驟 1:在帳戶中設定 S3 Access Grants 執行個體

首先,您的帳戶中必須有 S3 Access Grants 執行個體111122223333,才能管理對 Amazon S3 資料的存取。您必須在要共用的 S3 資料存放 AWS 區域 所在的每個 中建立 S3 Access Grants 執行個體。如果您要在多個 中共用資料 AWS 區域,請為每個 重複這些組態步驟 AWS 區域。如果您在存放 S3 資料的 中已有 AWS 區域 S3 Access Grants 執行個體,請繼續下一個步驟。如果您尚未設定 S3 Access Grants 執行個體,請參閱 使用 S3 Access Grants 執行個體 以完成此步驟。

步驟 2:設定 S3 Access Grants 執行個體的資源政策,以授予跨帳戶存取權

在帳戶中建立 S3 Access Grants 執行個體111122223333以進行跨帳戶存取後,請為帳戶中的 S3 Access Grants 執行個體設定資源型政策111122223333,以授予跨帳戶存取。S3 Access Grants 執行個體本身可支援資源型政策。使用正確的資源型政策時,您可以將 AWS Identity and Access Management (IAM) 個使用者或角色的存取權從其他 AWS 帳戶 授予 S3 Access Grants 執行個體。跨帳戶存取僅授予這些許可 (動作):

  • s3:GetAccessGrantsInstanceForPrefix — 使用者、角色或應用程式可以擷取包含特定字首的 S3 Access Grants 執行個體。

  • s3:ListAccessGrants

  • s3:ListAccessLocations

  • s3:ListCallerAccessGrants

  • s3:GetDataAccess — 使用者、角色或應用程式可以根據您透過 S3 Access Grants 授予的存取權來請求臨時憑證。使用這些憑證即可存取您已取得存取權的 S3 資料。

您可以選擇要將這些當中的哪些許可包含在資源政策中。S3 Access Grants 執行個體上的此資源政策是一般資源型政策,並支援IAM政策語言支援的所有內容。在相同的政策中,您可以授予帳戶 中特定身分的存取權111122223333,例如,使用 IAM aws:PrincipalArn條件,但您不必使用 S3 Access Grants 來執行此操作。相反地,在您的 S3 Access Grants IAM 執行個體中,您可以從您的帳戶和其他 帳戶為個別身分建立授予。透過 S3 Access Grants 管理每個存取授予,您可以擴展您的許可。

如果您已使用 AWS Resource Access Manager(AWS RAM),您可以使用它與其他帳戶或組織中的 共用s3:AccessGrants資源。如需詳細資訊,請參閱使用共用 AWS 資源。如果您不使用 AWS RAM,也可以使用 S3 Access Grants API操作或 AWS Command Line Interface () 新增資源政策AWS CLI。

我們建議您使用 AWS Resource Access Manager (AWS RAM) 主控台與其他帳戶或組織中的 共用s3:AccessGrants資源。若要共用跨帳戶 S3 Access Grants,請執行下列動作:

若要設定 S3 Access Grants 執行個體資源政策:
  1. 登入 AWS Management Console 並在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. AWS 區域 從 AWS 區域 選取器中選取 。

  3. 從左側導覽窗格中,選取存取授予

  4. 在存取授與執行個體頁面上,在此帳戶區段的執行個體中,選取共用執行個體 。這會將您重新導向至 AWS RAM 主控台。

  5. 選取建立資源共用

  6. 依照 AWS RAM 步驟建立資源共用。如需詳細資訊,請參閱在 中建立資源共用 AWS RAM

若要安裝 AWS CLI,請參閱 使用者指南 中的安裝 AWS CLIAWS Command Line Interface

您可以使用 put-access-grants-instance-resource-policyCLI命令來新增資源政策。

如果您想要將 S3 Access Grants 執行個體的跨帳戶存取權授予111122223333第二個帳戶 444455556666,則帳戶中 S3 Access Grants 執行個體的資源政策111122223333應授予第二個帳戶執行下列動作的444455556666許可:

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

在 S3 Access Grants 執行個體資源政策中,將 S3 Access Grants 執行個體ARN的 指定為 Resource,將第二個帳戶指定444455556666Principal。若要使用下列範例,請取代 user input placeholders 使用您自己的資訊。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "444455556666" }, "Action": [ "s3:ListAccessGrants", "s3:ListAccessGrantsLocations", "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" } ] }

若要新增或更新 S3 Access Grants 執行個體資源政策,請使用下列命令。當您使用下列範例命令時,請將 取代user input placeholders為您自己的資訊。

範例 新增或更新 S3 Access Grants 執行個體資源政策
aws s3control put-access-grants-instance-resource-policy \ --account-id 111122223333 \ --policy file://resourcePolicy.json \ --region us-east-2 { "Policy": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"AWS\": \"444455556666\"\n },\n \"Action\": [\n \"s3:ListAccessGrants\",\n \"s3:ListAccessGrantsLocations\",\n \"s3:GetDataAccess\",\n \"s3:GetAccessGrantsInstanceForPrefix\",\n \"s3:ListCallerAccessGrants"\n ],\n \"Resource\": \"arn:aws:s3:us-east-2:111122223333:access-grants/default\"\n }\n ]\n }\n", "CreatedAt": "2023-06-16T00:07:47.473000+00:00" }
範例 取得 S3 Access Grants 資源政策

您也可以使用 CLI來取得或刪除 S3 Access Grants 執行個體的資源政策。

若要取得 S3 Access Grants 資源政策,請使用下列範例命令。若要使用此範例命令,請以您自己的資訊取代 user input placeholders

aws s3control get-access-grants-instance-resource-policy \ --account-id 111122223333 \ --region us-east-2 { "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::111122223333:root\"},\"Action\":[\"s3:ListAccessGrants\",\"s3:ListAccessGrantsLocations\",\"s3:GetDataAccess\",\"s3:GetAccessGrantsInstanceForPrefix\",\"s3:ListCallerAccessGrants\"],\"Resource\":\"arn:aws: s3:us-east-2:111122223333:access-grants/default\"}]}", "CreatedAt": "2023-06-16T00:07:47.473000+00:00" }
範例 刪除 S3 Access Grants 資源政策

若要刪除 S3 Access Grants 資源政策,請使用下列範例命令。若要使用此範例命令,請以您自己的資訊取代 user input placeholders

aws s3control delete-access-grants-instance-resource-policy \ --account-id 111122223333 \ --region us-east-2 // No response body

您可以使用 新增資源政策PutAccessGrantsInstanceResourcePolicy API

如果您想要將 S3 Access Grants 執行個體的跨帳戶存取權授予111122223333第二個帳戶 444455556666,則帳戶中 S3 Access Grants 執行個體的資源政策111122223333應授予第二個帳戶執行下列動作的444455556666許可:

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

在 S3 Access Grants 執行個體資源政策中,將 S3 Access Grants 執行個體ARN的 指定為 Resource,將第二個帳戶指定444455556666Principal。若要使用下列範例,請取代 user input placeholders 使用您自己的資訊。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "444455556666" }, "Action": [ "s3:ListAccessGrants", "s3:ListAccessGrantsLocations", "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" } ] }

然後,您可以使用 PutAccessGrantsInstanceResourcePolicy API來設定政策。

如需有關RESTAPI支援更新、取得或刪除 S3 Access Grants 執行個體的資源政策的資訊,請參閱 Amazon Simple Storage Service API參考 中的下列章節:

本節提供 AWS SDK範例,說明如何設定 S3 Access Grants 資源政策,以授予第二個 AWS 帳戶存取某些 S3 資料。

Java

新增、更新、取得或刪除資源政策,以管理對 S3 Access Rents 執行個體的跨帳户存取權。

範例 新增或更新 S3 Access Grants 執行個體資源政策

如果您想要將 S3 Access Grants 執行個體的跨帳戶存取權授予111122223333第二個帳戶 444455556666,則帳戶中 S3 Access Grants 執行個體的資源政策111122223333應授予第二個帳戶執行下列動作的444455556666許可:

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

在 S3 Access Grants 執行個體資源政策中,將 S3 Access Grants 執行個體ARN的 指定為 Resource,將第二個帳戶指定444455556666Principal。若要使用下列範例,請取代 user input placeholders 使用您自己的資訊。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "444455556666" }, "Action": [ "s3:ListAccessGrants", "s3:ListAccessGrantsLocations", "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" } ] }

若要新增或更新 S3 Access Grants 執行個體資源政策,請使用下列程式碼範例:

public void putAccessGrantsInstanceResourcePolicy() { PutAccessGrantsInstanceResourcePolicyRequest putRequest = PutAccessGrantsInstanceResourcePolicyRequest.builder() .accountId(111122223333) .policy(RESOURCE_POLICY) .build(); PutAccessGrantsInstanceResourcePolicyResponse putResponse = s3Control.putAccessGrantsInstanceResourcePolicy(putRequest); LOGGER.info("PutAccessGrantsInstanceResourcePolicyResponse: " + putResponse); }

回應:

PutAccessGrantsInstanceResourcePolicyResponse( Policy={ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "AWS": "444455556666" }, "Action": [ "s3:ListAccessGrants", "s3:ListAccessGrantsLocations", "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix", "s3:ListCallerAccessGrants" ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" }] } )
範例 取得 S3 Access Grants 資源政策

若要取得 S3 Access Grants 資源政策,請使用下列程式碼範例。若要使用下列範例命令,請以您自己的資訊取代 user input placeholders

public void getAccessGrantsInstanceResourcePolicy() { GetAccessGrantsInstanceResourcePolicyRequest getRequest = GetAccessGrantsInstanceResourcePolicyRequest.builder() .accountId(111122223333) .build(); GetAccessGrantsInstanceResourcePolicyResponse getResponse = s3Control.getAccessGrantsInstanceResourcePolicy(getRequest); LOGGER.info("GetAccessGrantsInstanceResourcePolicyResponse: " + getResponse); }

回應:

GetAccessGrantsInstanceResourcePolicyResponse( Policy={"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::444455556666:root"},"Action":["s3:ListAccessGrants","s3:ListAccessGrantsLocations","s3:GetDataAccess","s3:GetAccessGrantsInstanceForPrefix","s3:ListCallerAccessGrants"],"Resource":"arn:aws:s3:us-east-2:111122223333:access-grants/default"}]}, CreatedAt=2023-06-15T22:54:44.319Z )
範例 刪除 S3 Access Grants 資源政策

若要刪除 S3 Access Grants 資源政策,請使用下列程式碼範例。若要使用下列範例命令,請以您自己的資訊取代 user input placeholders

public void deleteAccessGrantsInstanceResourcePolicy() { DeleteAccessGrantsInstanceResourcePolicyRequest deleteRequest = DeleteAccessGrantsInstanceResourcePolicyRequest.builder() .accountId(111122223333) .build(); DeleteAccessGrantsInstanceResourcePolicyResponse deleteResponse = s3Control.putAccessGrantsInstanceResourcePolicy(deleteRequest); LOGGER.info("DeleteAccessGrantsInstanceResourcePolicyResponse: " + deleteResponse); }

回應:

DeleteAccessGrantsInstanceResourcePolicyResponse()

步驟 3:授予第二個帳戶中的身分許可,以呼叫您帳戶中的 S3 Access Grants IAM 執行個體

在 Amazon S3 資料的擁有者為帳戶 中的 S3 Access Grants 執行個體設定跨帳戶政策之後111122223333,第二個帳戶的擁有者444455556666必須為其IAM使用者或角色建立身分型政策,且擁有者必須授予他們 S3 Access Grants 執行個體的存取權。在身分型政策中,根據 S3 Access Grants 執行個體資源政策中授予的內容和您要授予的許可,包含下列一或多個動作:

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

  • s3:ListCallerAccessGrants

AWS 跨帳戶存取模式 之後,第二個帳戶中IAM的使用者或角色444455556666必須明確具有一或多個這些許可。例如,授予s3:GetDataAccess許可,讓使用者IAM或角色可以呼叫 帳戶中的 S3 Access Grants 執行個體111122223333來請求憑證。

若要使用此範例命令,請以您自己的資訊取代 user input placeholders

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetDataAccess", ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" } ] }

如需編輯IAM身分型政策的相關資訊,請參閱 AWS Identity and Access Management 指南中的編輯IAM政策

步驟 4:在帳戶的 S3 Access Grants 執行個體中建立授予,讓第二個帳戶中的IAM身分能夠存取您的某些 S3 資料

對於最終組態步驟,您可以在帳戶 111122223333 中的 S3 Access Grants 執行個體中建立授予,讓第二個帳戶 444455556666 中的IAM身分能夠存取您帳戶中的某些 S3 資料。您可以使用 Amazon S3 主控台、API、 CLI和 來執行此操作SDKs。如需詳細資訊,請參閱建立授權

在授予中,指定第二個帳戶中IAM身分的 AWS ARN,並指定您要授予存取權之 S3 資料 (儲存貯體、字首或物件) 中的哪個位置。此位置必須已向 S3 Access Grants 執行個體註冊。如需詳細資訊,請參閱註冊位置。您可以選擇性地指定子字首。例如,如果您授予存取權的位置是儲存貯體,而且您想要將存取權進一步限制為該儲存貯體中的特定物件,請在 S3SubPrefix 欄位中傳遞物件金鑰名稱。或者,如果您想要限制對儲存貯體中物件的存取,其金鑰名稱開頭為特定字首,例如 2024-03-research-results/,則傳遞 S3SubPrefix=2024-03-research-results/

以下是在第二個 帳戶中建立身分存取授予的範例CLI命令。如需更多資訊,請參閱建立授權。若要使用此範例命令,請以您自己的資訊取代 user input placeholders

aws s3control create-access-grant \ --account-id 111122223333 \ --access-grants-location-id default \ --access-grants-location-configuration S3SubPrefix=prefixA* \ --permission READ \ --grantee GranteeType=IAM,GranteeIdentifier=arn:aws:iam::444455556666:role/data-consumer-1

設定跨帳戶存取後,第二個帳戶中的使用者或角色可以執行下列動作: