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

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

S3 Access Grants 跨帳户存取權

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

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

  • 其他 AWS 帳戶中的IAM身分

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

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

設定跨帳戶存取後,另一個帳戶可以從 Amazon 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. 如果授予第二個帳戶存取您的 Amazon S3 資料的權限,則您帳戶中的 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 執行個體,例如儲存 111122223333 S3 資料的帳戶 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 政策語言支援的所有內容。在相同的政策中,您可以授予帳戶 中特定 IAM 身分的存取權111122223333,例如,使用 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 並在 Word 開啟 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

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

如果您想要將 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 APIWord 來設定政策。

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

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

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:在第二個帳戶中授予 IAM 身分,以呼叫您帳戶中的 S3 Access Grants 執行個體

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 主控台、CLI、API 和 SDKs 來執行此操作。如需詳細資訊,請參閱建立授權

在授予中,從第二個帳戶指定 AWS ARN 的 IAM 身分,並指定您要授予存取權的 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

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