

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

# S3 Access Grants 跨帳户存取權
<a name="access-grants-cross-accounts"></a>

透過 S3 存取授權，您可以將 Amazon S3 資料存取權授予下列對象：
+ AWS Identity and Access Management 您帳戶中的 (IAM) 身分
+ 其他 AWS 帳戶中的 IAM 身分
+ 您 AWS IAM Identity Center 執行個體中的目錄使用者或群組

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

設定跨帳戶存取權之後，另一個帳戶可以向 Amazon S3 存取授權請求 S3 資料的臨時存取憑證。下圖顯示透過 S3 存取授權跨帳戶 S3 存取的使用者流程：

![S3 存取授權跨帳户使用者流程](http://docs.aws.amazon.com/zh_tw/AmazonS3/latest/userguide/images/access-grants-cross-account.png)


1. 第二個帳戶 (B) 中的使用者或應用程式會向 Amazon S3 資料儲存所在帳戶 (A) 中的 S3 存取授權執行個體請求憑證。如需詳細資訊，請參閱[透過 S3 Access Grants 請求存取 Amazon S3 資料](access-grants-credentials.md)。

1. 如果授權第二個帳戶存取您的 Amazon S3 資料，則您帳戶 (A) 中的 S3 存取授權執行個體會傳回臨時憑證。如需存取授權的詳細資訊，請參閱[在 S3 存取授權中使用授權](access-grants-grant.md)。

1. 第二個帳戶 (B) 中的使用者或應用程式使用 S3 存取授權提供的憑證來存取您帳戶 (A) 中的 S3 資料。

**設定 S3 存取授權的跨帳戶存取權**  
若要透過 S3 存取授權授予跨帳戶 S3 存取權，請遵循下列步驟：
+ **步驟 1：**在您的帳戶 (例如帳戶 ID `111122223333`) 中設定 S3 資料儲存所在的 S3 存取授權執行個體。
+ **步驟 2：**在您的帳戶 `111122223333` 中設定 S3 存取授權執行個體的資源政策，以授予第二個帳戶 (例如帳戶 ID `444455556666`) 的存取權。
+ **步驟 3：**在第二個帳戶 `444455556666` 中設定 IAM 主體的 IAM 許可，向您帳戶 `111122223333` 中的 S3 存取授權執行個體請求憑證。
+ **步驟 4：**在您的帳戶 `111122223333` 中建立授權，授權第二個帳戶 `444455556666` 中的 IAM 主體存取您帳戶 `111122223333` 中的一些 S3 資料。

## 步驟 1：在您的帳戶中設定 S3 存取授權執行個體
<a name="access-grants-cross-accounts-configure-1"></a>

首先，您的帳戶 `111122223333` 中必須具有 S3 存取授權執行個體，才能管理對 Amazon S3 資料的存取。您必須在要共用之 S3 資料儲存所在的每個 AWS 區域 中建立 S3 存取授權執行個體。如果您要在多個 中共用資料 AWS 區域，請為每個 重複這些組態步驟 AWS 區域。如果您在存放 S3 資料的 中已有 AWS 區域 S3 Access Grants 執行個體，請繼續下一個步驟。如果您尚未設定 S3 存取授權執行個體，請參閱[使用 S3 存取授權執行個體](access-grants-instance.md)以完成此步驟。

## 步驟 2：設定 S3 存取授權執行個體的資源政策，以授予跨帳戶存取權
<a name="access-grants-cross-accounts-configure-2"></a>

在您的帳戶 `111122223333` 中建立 S3 存取授權執行個體以取得跨帳戶存取權之後，請在您的帳戶 `111122223333` 中設定 S3 存取授權執行個體的資源型政策，以授予跨帳戶存取權。S3 Access Grants 執行個體本身可支援資源型政策。使用正確的資源型政策，您可以將 AWS Identity and Access Management (IAM) 使用者或角色的存取權從其他 授予 AWS 帳戶 S3 Access Grants 執行個體。跨帳戶存取權只會授予下列許可 (動作)：
+ `s3:GetAccessGrantsInstanceForPrefix` — 使用者、角色或應用程式可以擷取包含特定字首的 S3 存取授權執行個體。
+ `s3:ListAccessGrants`
+ `s3:ListAccessLocations`
+ `s3:ListCallerAccessGrants`
+ `s3:GetDataAccess` — 使用者、角色或應用程式可以根據您透過 S3 存取授權取得的存取權請求臨時憑證。使用這些憑證即可存取您已取得存取權的 S3 資料。

您可以選擇要將這些當中的哪些許可包含在資源政策中。S3 存取授權執行個體上的這個資源政策是一般資源型政策，可提供與 [IAM 政策語言](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)相同的支援。在相同的政策中，您可以使用 `aws:PrincipalArn` 條件等方式將存取權授予帳戶 `111122223333` 中的特定 IAM 主體，但使用 S3 存取授權就不需要這樣做。反之，在您的 S3 存取授權執行個體中，您可以為帳戶中的個別 IAM 身分以及為其他帳戶建立授權。透過 S3 存取授權管理每個存取授權，就可以擴展許可。

如果您已使用 [AWS Resource Access Manager](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) (AWS RAM)，則可以使用它來與其他帳戶或在組織內共用您的 [https://docs.aws.amazon.com/ram/latest/userguide/shareable.html#shareable-s3](https://docs.aws.amazon.com/ram/latest/userguide/shareable.html#shareable-s3) 資源。如需詳細資訊，請參閱[使用共用 AWS 資源](https://docs.aws.amazon.com/ram/latest/userguide/working-with.html)。如果您不使用 AWS RAM，也可以使用 S3 Access Grants API 操作或 AWS Command Line Interface () 新增資源政策AWS CLI。

### 使用 S3 主控台
<a name="access-grants-cross-accounts-console"></a>

我們建議您使用 AWS Resource Access Manager (AWS RAM) 主控台與其他帳戶或組織內的 共用`s3:AccessGrants`資源。若要跨帳戶共用 S3 存取授權，請執行下列步驟：

**若要設定 S3 存取授權執行個體資源政策：**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1.  AWS 區域 從選擇 AWS 區域 器中選取 。

1. 從左側導覽窗格，選取**存取授權**。

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

1. 選取**建立資源共用**。

1. 依照 AWS RAM 步驟建立資源共享。如需詳細資訊，請參閱[在 中建立資源共用 AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-create.html)。

### 使用 AWS CLI
<a name="access-grants-cross-accounts-cli"></a>

若要安裝 AWS CLI，請參閱*AWS Command Line Interface 《 使用者指南*[》中的安裝 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 。

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

如果您想要將帳戶 `111122223333` 中 S3 存取授權執行個體的跨帳戶存取權授予第二個帳戶 `444455556666`，您帳戶 `111122223333` 中 S3 存取授權執行個體的資源政策應授予第二個帳戶 `444455556666` 執行下列動作的許可：
+ `s3:ListAccessGrants`
+ `s3:ListAccessGrantsLocations`
+ `s3:GetDataAccess`
+ `s3:GetAccessGrantsInstanceForPrefix`

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

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

**Example 新增或更新 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
			  \"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"
	}
```

**Example 取得 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\",\"s3:GetAccessGrantsInstanceForPrefix\",\"s3:ListCallerAccessGrants\"],\"Resource\":\"arn:aws:
s3:{{us-east-2}}:{{111122223333}}:access-grants/default\"}]}",
"CreatedAt": "2023-06-16T00:07:47.473000+00:00"
}
```

**Example 刪除 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
```

### 使用 REST API
<a name="access-grants-cross-accounts-rest-api"></a>

您可以使用 [PutAccessGrantsInstanceResourcePolicy API](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessGrantsInstanceResourcePolicy.html) 來新增資源政策。

如果您想要將帳戶 `111122223333` 中 S3 存取授權執行個體的跨帳戶存取權授予第二個帳戶 `444455556666`，您帳戶 `111122223333` 中 S3 存取授權執行個體的資源政策應授予第二個帳戶 `444455556666` 執行下列動作的許可：
+ `s3:ListAccessGrants`
+ `s3:ListAccessGrantsLocations`
+ `s3:GetDataAccess`
+ `s3:GetAccessGrantsInstanceForPrefix`

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

```
{
"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](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessGrantsInstanceResourcePolicy.html) 來設定政策。

如需為 S3 存取授權執行個體更新、取得或刪除資源政策的 REST API 支援資訊，請參閱 Amazon Simple Storage Service API 參考**中的下列各節：
+  [PutAccessGrantsInstanceResourcePolicy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessGrantsInstanceResourcePolicy.html) 
+  [GetAccessGrantsInstanceResourcePolicy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessGrantsInstanceResourcePolicy.html) 
+  [DeleteAccessGrantsInstanceResourcePolicy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessGrantsInstanceResourcePolicy.html) 

### 使用 AWS SDKs
<a name="access-grants-cross-accounts-using-sdk"></a>

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

------
#### [ Java ]

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

**Example 新增或更新 S3 存取授權執行個體資源政策**  
如果您想要將帳戶 `111122223333` 中 S3 存取授權執行個體的跨帳戶存取權授予第二個帳戶 `444455556666`，您帳戶 `111122223333` 中 S3 存取授權執行個體的資源政策應授予第二個帳戶 `444455556666` 執行下列動作的許可：  
+ `s3:ListAccessGrants`
+ `s3:ListAccessGrantsLocations`
+ `s3:GetDataAccess`
+ `s3:GetAccessGrantsInstanceForPrefix`
在 S3 存取授權執行個體資源政策中，將 S3 存取授權執行個體的 ARN 指定為 `Resource`，並將第二個帳戶 `444455556666` 指定為 `Principal`。若要使用下列範例，請以您自己的資訊取代{{使用者輸入預留位置}}。  

```
{
"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 存取授權執行個體資源政策，請使用下列程式碼範例：  

```
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"
	}]
	}
	)
```

**Example 取得 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","s3:GetAccessGrantsInstanceForPrefix","s3:ListCallerAccessGrants"],"Resource":"arn:aws:s3:{{us-east-2}}:{{111122223333}}:access-grants/default"}]},
	CreatedAt=2023-06-15T22:54:44.319Z
	)
```

**Example 刪除 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 存取授權執行個體的許可
<a name="access-grants-cross-accounts-configure-3"></a>

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

依照 [AWS 跨帳戶存取模式](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)，第二個帳戶 `444455556666` 中的 IAM 使用者或角色必須明確具有上述一或多個許可。例如，授予 `s3:GetDataAccess` 許可，以便 IAM 使用者或角色能夠呼叫帳戶 `111122223333` 中的 S3 存取授權執行個體來請求憑證。

若要使用此範例命令，請以您自己的資訊取代 `{{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 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html)。

## 步驟 4：在您帳戶的 S3 存取授權執行個體中建立授權，讓第二個帳戶中的 IAM 身分能夠存取您的部分 S3 資料
<a name="access-grants-cross-accounts-configure-4"></a>

在最終組態步驟中，您可以在帳戶 111122223333 的 S3 存取授權執行個體中建立授權，讓第二個帳戶 444455556666 中的 IAM 身分能夠存取您帳戶中的一些 S3 資料。您可以使用 Amazon S3 主控台、CLI、API 和 SDK 來執行這項操作。如需詳細資訊，請參閱[建立授權](access-grants-grant-create.md)。

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

以下是範例 CLI 命令，可為第二個帳戶中的身分建立存取授權。如需詳細資訊，請參閱[建立授權](access-grants-grant-create.md)。若要使用此範例命令，請以您自己的資訊取代 `{{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}}
```

設定跨帳戶存取權之後，第二個帳戶中的使用者或角色可以執行下列動作：
+ 呼叫 `ListAccessGrantsInstances`，列出透過 AWS RAM與其共用的 S3 存取授權執行個體。如需詳細資訊，請參閱[取得 S3 存取授權執行個體的詳細資訊](access-grants-instance-view.md)。
+ 向 S3 存取授權請求臨時憑證。若要如何提出這些請求的詳細資訊，請參閱[透過 S3 Access Grants 請求存取 Amazon S3 資料](access-grants-credentials.md)。