

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

# 使用映像建置器設定跨帳戶 AMI 分佈
<a name="cross-account-dist"></a>

本節說明如何設定分佈設定，將映像建置器 AMI 交付至您指定的其他帳戶。

然後，目的地帳戶可以視需要啟動或修改 AMI。

**注意**  
AWS CLI 本節中的 命令範例假設您先前已建立映像配方和基礎設施組態 JSON 檔案。若要為映像配方建立 JSON 檔案，請參閱 [使用 建立映像配方 AWS CLI](create-image-recipes.md#create-image-recipe-cli)。若要建立基礎設施組態的 JSON 檔案，請參閱 [建立基礎架構組態](create-infra-config.md)。

## 跨帳戶 AMI 分佈的先決條件
<a name="cross-account-dist-prereqs"></a>

為了確保目標帳戶可以從映像建置器映像成功啟動執行個體，您必須為所有區域中的所有目的地帳戶設定適當的許可。

如果您使用 AWS Key Management Service (AWS KMS) 加密 AMI，您必須 AWS KMS key 為用來加密新映像的帳戶設定 。

當 Image Builder 為加密AMIs 執行跨帳戶分佈時，來源帳戶中的映像會解密並推送到目標區域，並在該區域使用指定的金鑰重新加密。由於 Image Builder 代表目標帳戶，並使用您在目的地區域中建立的 IAM 角色，因此該帳戶必須能夠存取來源和目的地區域中的金鑰。

### 加密金鑰
<a name="cross-account-prereqs-encryption"></a>

如果您的映像是使用 加密，則需要下列先決條件 AWS KMS。下一章節將介紹 IAM 先決條件。

**來源帳戶需求**
+ 在您建置和分發 AMI 的所有區域中，在您的 帳戶中建立 KMS 金鑰。您也可以使用現有的金鑰。
+ 更新所有這些金鑰的金鑰政策，以允許目的地帳戶使用您的金鑰。

**目的地帳戶需求**
+ 將內嵌政策新增至 `EC2ImageBuilderDistributionCrossAccountRole` ，以允許角色執行必要動作來分發加密的 AMI。如需 IAM 組態步驟，請參閱[IAM 政策](#cross-account-prereqs-iam)先決條件一節。

如需使用 跨帳戶存取的詳細資訊 AWS KMS，請參閱《 *AWS Key Management Service 開發人員指南*》[中的允許其他帳戶中的使用者使用 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)。

在映像配方中指定您的加密金鑰，如下所示：
+ 如果您使用的是映像建置器主控台，請從配方的儲存 **（磁碟區） 區段中的加密 (KMS 別名**) 下拉式清單中選擇您的加密金鑰。 ****
+ 如果您使用 **CreateImageRecipe** API 動作或 中的 **create-image-recipe**命令 AWS CLI，請在 JSON 輸入中的 `ebs`區段`blockDeviceMappings`中設定您的金鑰。

  下列 JSON 程式碼片段顯示映像配方的加密設定。除了提供加密金鑰之外，您還必須將 `encrypted`旗標設定為 `true`。

  ```
  {
  	...
  	"blockDeviceMappings": [
  	{
  		"deviceName": "Example root volume",
  		"ebs": { 
  			"deleteOnTermination": true,
  			"encrypted": true,
  			"iops": 100,
  			"kmsKeyId": "image-owner-key-id",
  			...
  		},
  		...
  	}],
  	...
  }
  ```

### IAM 政策
<a name="cross-account-prereqs-iam"></a>

若要在 AWS Identity and Access Management (IAM) 中設定跨帳戶分佈許可，請遵循下列步驟：

1. 若要使用跨帳戶分佈的映像建置器 AMIs，目的地帳戶擁有者必須在其帳戶中建立新的 IAM 角色，稱為 `EC2ImageBuilderDistributionCrossAccountRole`。

1. 他們必須將 [Ec2ImageBuilderCrossAccountDistributionAccess 政策](security-iam-awsmanpol.md#sec-iam-manpol-Ec2ImageBuilderCrossAccountDistributionAccess) 連接至角色，才能啟用跨帳戶分佈。如需 受管政策的詳細資訊，請參閱*AWS Identity and Access Management 《 使用者指南*》中的 [受管政策和內嵌政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

1. 確認來源帳戶 ID 已新增至連接到目的地帳戶的 IAM 角色的信任政策。下列範例顯示目的地帳戶中的信任政策，指定來自來源帳戶的帳戶 ID。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [{
           "Effect": "Allow",
           "Principal": {
               "AWS": "arn:aws:iam::444455556666:root"
           },
           "Action": "sts:AssumeRole"
       }]
   }
   ```

------

   如需信任政策的詳細資訊，請參閱*AWS Identity and Access Management 《 使用者指南*》中的以[資源為基礎的政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based)。

1. 如果您分發的 AMI 已加密，目的地帳戶擁有者必須將下列內嵌政策新增至其帳戶中`EC2ImageBuilderDistributionCrossAccountRole`的 ，以便他們可以使用您的 KMS 金鑰。`Principal` 區段包含其帳戶號碼。這可讓 Image Builder 在使用 AWS KMS 來加密和解密每個區域的 AMI 時，代表他們採取行動。

------
#### [ JSON ]

****  

   ```
   {
   	"Version":"2012-10-17",		 	 	 
   	"Statement": [
   		{
   			"Sid": "AllowRoleToPerformKMSOperationsOnBehalfOfTheDestinationAccount",
   			"Effect": "Allow",
   			"Action": [
   				"kms:Encrypt",
   				"kms:Decrypt",
   				"kms:ReEncrypt*",
   				"kms:GenerateDataKey*",
   				"kms:DescribeKey",
   				"kms:CreateGrant",
   				"kms:ListGrants",
   				"kms:RevokeGrant"
   			],
   			"Resource": "*"
   		}
   	]
   }
   ```

------

   如需內嵌政策的詳細資訊，請參閱*AWS Identity and Access Management 《 使用者指南*》中的[內嵌政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#inline-policies)。

1. 如果您使用 `launchTemplateConfigurations`指定 Amazon EC2 啟動範本，您還必須在`EC2ImageBuilderDistributionCrossAccountRole`每個目的地帳戶中將下列政策新增至您的 。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:CreateLaunchTemplateVersion",
                   "ec2:ModifyLaunchTemplate"
               ],
               "Resource": "*",
               "Condition": {
                   "StringEquals": {
                       "aws:ResourceTag/CreatedBy": "EC2 Image Builder"
                   }
               }
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:DescribeLaunchTemplates"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:CreateTags"
               ],
               "Resource": "arn:aws:ec2:*:*:launch-template/*",
               "Condition": {
                   "StringEquals": {
                       "aws:RequestTag/CreatedBy": "EC2 Image Builder"
                   }
               }
           }
       ]
   }
   ```

------

1. 如果您使用 AWS Systems Manager 參數存放區參數來存放分佈帳戶和區域的輸出 AMI AMI 的 AMI ID，則必須將下列政策新增至每個目的地帳戶中`EC2ImageBuilderDistributionCrossAccountRole`的 。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ssm:PutParameter"
               ],
               "Resource": "arn:aws:ssm:*:111122223333:parameter/ImageBuilder-*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:DescribeImages"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

## 跨帳戶分佈的限制
<a name="cross-account-dist-limits"></a>

跨帳戶分佈映像建置器映像時有一些限制：
+ 目的地帳戶限制為每個目的地區域 50 個並行 AMI 複本。
+ 如果您想要將全虛擬化 (PV) 虛擬化 AMI 複製到另一個區域，則目的地區域必須支援 PV 虛擬化 AMIs。如需詳細資訊，請參閱 [Linux AMI 虛擬化類型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html)。
+ 您無法建立加密快照的未加密複本。如果您未為 `KmsKeyId` 參數指定 AWS Key Management Service (AWS KMS) 客戶受管金鑰，Image Builder 會使用 Amazon Elastic Block Store (Amazon EBS) 的預設金鑰。如需詳細資訊，請參閱《[Amazon Elastic Compute Cloud 使用者指南》中的 Amazon EBS 加密](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html)。 **

如需詳細資訊，請參閱 *EC2 Image Builder API 參考*中的 [CreateDistributionConfiguration](https://docs.aws.amazon.com/imagebuilder/latest/APIReference/API_CreateDistributionConfiguration.html)。

## 從主控台設定映像建置器 AMI 的跨帳戶分佈
<a name="cross-account-dist-console-create-ami"></a>

本節說明如何使用 建立和設定映像建置器 AMIs 跨帳戶分佈的分佈設定 AWS 管理主控台。設定跨帳戶分佈需要特定的 IAM 許可。您必須完成本節[跨帳戶 AMI 分佈的先決條件](#cross-account-dist-prereqs)的 ，才能繼續。

若要在映像建置器主控台中建立分佈設定，請遵循下列步驟：

1. 開啟 EC2 Image Builder 主控台，位於 [https://console.aws.amazon.com/imagebuilder/](https://console.aws.amazon.com/imagebuilder/)。

1. 從導覽窗格中選擇**分佈設定**。這會顯示在您帳戶下建立的分佈設定清單。

1. 在**分佈設定**頁面頂端，選擇**建立分佈設定**。這會帶您前往**建立分佈設定**頁面。

1. 在**映像類型**區段中，選擇 **Amazon Machine Image (AMI)** 作為**輸出類型**。這是預設設定。

1. 在**一般**區段中，輸入您要建立的分佈設定資源**名稱** (*必要*)。

1. 在**區域設定**區段中，輸入您要在所選區域**的目標帳戶中將 AMI 分配到**的 12 位數帳戶 ID，然後按 **Enter** 鍵。這會檢查格式是否正確，然後在方塊下方顯示您輸入的帳戶 ID。重複此程序以新增更多帳戶。

   若要移除您輸入的帳戶，請選擇帳戶 ID 右側的 **X**。

   輸入每個區域的**輸出 AMI 名稱**。

1. 繼續指定您需要的任何其他設定，然後選擇**建立設定**以建立新的分佈設定資源。

## 從 設定映像建置器 AMI 的跨帳戶分佈 AWS CLI
<a name="cross-account-dist-cli-ami-create"></a>

本節說明如何設定分佈設定檔案，並使用 中的 **create-image**命令 AWS CLI ，在帳戶之間建置和分佈映像建置器 AMI。

設定跨帳戶分佈需要特定的 IAM 許可。您必須先完成本節[跨帳戶 AMI 分佈的先決條件](#cross-account-dist-prereqs)的 ，才能執行 **create-image**命令。

1. 

**設定分佈設定檔案**

   在 中使用 **create-image**命令 AWS CLI 來建立分佈到另一個帳戶的映像建置器 AMI 之前，您必須先建立 `DistributionConfiguration` JSON 結構，在`AmiDistributionConfiguration`設定中指定目標帳戶 IDs。您必須在`AmiDistributionConfiguration`來源區域中指定至少一個。

   下列名為 的範例檔案`create-distribution-configuration.json`顯示來源區域中跨帳戶映像分佈的組態。

   ```
   {
   	"name": "cross-account-distribution-example",
   	"description": "Cross Account Distribution Configuration Example",
   	"distributions": [
   		{
   			"amiDistributionConfiguration": {
   				"targetAccountIds": ["123456789012", "987654321098"],
   				"name": "Name {{ imagebuilder:buildDate }}", 
   				"description": "ImageCopy Ami Copy Configuration"
   			}, 
   			"region": "us-west-2"
   		}
   	]
   }
   ```

1. 

**建立分佈設定**

   若要使用 中的 [create-distribution-configuration](https://docs.aws.amazon.com/cli/latest/reference/imagebuilder/create-distribution-configuration.html) 命令建立 Image Builder 分佈設定資源 AWS CLI，請在 命令中提供下列參數：
   + 在 `--name` 參數中輸入分佈的名稱。
   + 連接您在 `--cli-input-json` 參數中建立的分佈組態 JSON 檔案。

   ```
   aws imagebuilder create-distribution-configuration --name my distribution name --cli-input-json file://create-distribution-configuration.json
   ```
**注意**  
您必須在 JSON 檔案路徑的開頭包括 `file://` 標記。
JSON 檔案的路徑應遵循執行命令之基礎作業系統的適當慣例。例如，Windows 使用反斜線 (\$1) 來參考目錄路徑，而 Linux 和 macOS 則使用正斜線 (/)。

*您也可以使用 `--distributions` 參數，直接在 命令中提供 JSON。*