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

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

S3 Access Grants 跨帳户存取權

使用 S3 存取授權,您可以授與 Amazon S3 資料存取權給下列項目:

  • AWS Identity and Access Management (IAM) 您帳戶內的身分識別

  • 其他 AWS 帳戶中的 IAM 身分識別

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

首先,設定另一個帳戶的跨帳戶存取權限。這包括使用資源政策授予對 S3 存取授與執行個體的存取權。然後,使用授權授予對 S3 資料 (儲存貯體、前置詞或物件) 的存取權。

設定跨帳戶存取後,另一個帳戶可以向 S3 存取授權請求對 Amazon S3 資料的臨時存取登入資料。下圖顯示透過 S3 存取授權跨帳戶 S3 存取的使用者流程:

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

  2. 如果有授權可讓第二個帳戶存取您的 Amazon S3 資料,則帳戶中的 S3 存取授權執行個體 (A) 會傳回臨時登入資料。如需詳細資訊,請參閱 建立授權

  3. 第二個帳戶 (B) 中的使用者或應用程式會使用由 S3 Access 授予授權的登入資料存取您帳戶 (A) 中的 S3 資料。

設定 S3 存取權授予跨帳戶存取權

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

  • 步驟 1:在您的帳戶中設定 S3 存取授與執行個體,例如存放 S3 資料的帳戶 ID 111122223333

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

  • 步驟 3:在第二個帳戶中設定 IAM 主體的 IAM 許可,以444455556666向您帳戶中的 S3 Access 授予執行個體請求登入資料111122223333

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

步驟 1:在您的帳戶中設定 S3 存取授與執行個體

首先,您的帳戶中必須有 S3 存取授與執行個體,111122223333才能管理對 Amazon S3 資料的存取。您必須在每個儲存您要共用的 S3 資料的 AWS 區域 位置建立 S3 存取授與執行個體。如果您要共用多個資料 AWS 區域,請針對每個步驟重複上述每個設定步驟 AWS 區域。如果您的 S3 資料存放 AWS 區域 位置已有 S3 存取授與執行個體,請繼續執行下一個步驟。如果您尚未設定 S3 存取授與執行個體,請參建立 S3 Access Grants 執行個體閱完成此步驟。

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

在您的帳戶中建立 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:GetDataAccess— 使用者、角色或應用程式可以根據您透過 S3 Access Grants 授予的存取權限要求臨時登入資料。使用這些憑證即可存取您已取得存取權的 S3 資料。

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

如果您已經使用 AWS Resource Access Manager(AWS RAM),則可以使用它與其他帳號或組織內部共用s3:AccessGrants資源。如需詳細資訊,請參閱使用共用 AWS 資源。如果您不使用 AWS RAM,您也可以使用 S3 存取授予 API 操作或 AWS Command Line Interface (AWS CLI) 來新增資源政策。

建議您使用 AWS Resource Access Manager (AWS RAM) Console 與其他帳戶或組織內部共用您的s3:AccessGrants資源。若要跨帳戶共用 S3 存取授與,請執行下列動作:

若要設定 S3 存取授與執行個體資源政策:
  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 Command Line Interface 使用者指南》 AWS CLI中的〈裝〉

您可以使用 put-access-grants-instance-resource-policy CLI 命令新增資源策略。

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

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

在 S3 存取授與執行個體資源政策中,將 S3 存取授與執行個體的 ARN 指定為Resource,第二個帳戶指定444455556666Principal為。若要使用下列範例,請以您自己的資訊取代使用者輸入預留位置

{ "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 授與執行個體資源政策,請使用下列命令。當您使用下列範例指令時,請以您自己user input placeholders的資訊取代。

範例 新增或更新 S3 存取授與執行個體資源政策
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 ],\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 存取授與執行個體的資源政策。

若要取得 S3 存取授與資源政策,請使用下列範例命令。若要使用此範例命令,請以您自己的資訊取代 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\"],\"Resource\":\"arn:aws:s3:us-east-2:111122223333:access-grants/default\"}]}", "CreatedAt": "2023-06-16T00:07:47.473000+00:00" }
範例 刪除 S3 Access Grants 資源政策

若要刪除 S3 存取授與資源政策,請使用下列範例命令。若要使用此範例命令,請以您自己的資訊取代 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 執行個體的跨帳戶存取權授予第二個帳戶 111122223333444455556666,則您帳戶中 S3 Access Grants 執行個體的資源政策111122223333應授予第二個帳戶執行下列動作的444455556666權限:

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

在 S3 存取授與執行個體資源政策中,將 S3 存取授與執行個體的 ARN 指定為Resource,第二個帳戶指定444455556666Principal為。若要使用下列範例,請以您自己的資訊取代使用者輸入預留位置

{ "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 來設定原則。

如需 REST API 支援以更新、取得或刪除 S3 存取授與執行個體的資源政策的相關資訊,請參閱 Amazon 簡單儲存服務 API 參考中的以下各節:

本節提供 AWS SDK 範例,說明如何設定 S3 存取授權資源政策,以授予第二個 AWS 帳戶存取部分 S3 資料的權限。

Java

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

範例 新增或更新 S3 存取授與執行個體資源政策

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

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

在 S3 存取授與執行個體資源政策中,將 S3 存取授與執行個體的 ARN 指定為Resource,第二個帳戶指定444455556666Principal為。若要使用下列範例,請以您自己的資訊取代使用者輸入預留位置

{ "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 授與執行個體資源政策,請使用下列程式碼範例:

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" ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" }] } )
範例 取得 S3 Access Grants 資源政策

若要取得 S3 存取授與資源政策,請使用下列程式碼範例。若要使用下列範例命令,請以您自己的資訊取代 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"],"Resource":"arn:aws:s3:us-east-2:111122223333:access-grants/default"}]}, CreatedAt=2023-06-15T22:54:44.319Z )
範例 刪除 S3 Access Grants 資源政策

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

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

回應:

DeleteAccessGrantsInstanceResourcePolicyResponse()

步驟 3:在第二個帳戶中授予 IAM 身分,以呼叫帳戶中的 S3 存取授權執行個體

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

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

遵循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 存取授權執行個體中建立授權,讓第二個帳戶中的 IAM 身分可存取部分 S3 資料

對於最後一個組態步驟,您可以在帳戶 111122223333 的 S3 存取授權執行個體中建立授權,以便將第二個帳戶 444455556666 中的 IAM 身分存取至您帳戶中的某些 S3 資料。您可以使用 Amazon S3 主控台、CLI、API 和開發套件來執行此操作。如需詳細資訊,請參閱 建立授權

在授權中,從第二個帳戶指定 IAM 身分的 AWS ARN,並指定要授與存取權的 S3 資料 (儲存貯體、前綴或物件) 中的哪個位置。此位置必須已向 S3 存取授予執行個體註冊。如需詳細資訊,請參閱 註冊位置。您可以選擇性地指定子首碼。例如,如果您授與存取權的位置是值區,而您想要進一步限制存取該值區中特定物件的存取權,請在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

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