

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Image Builder でクロスアカウント AMI ディストリビューションのセットアップ
<a name="cross-account-dist"></a>

このセクションでは、指定した他のアカウントに Image Builder 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>

ターゲットアカウントが Image Builder イメージからインスタンスを正常に起動できるようにするには、すべてのリージョンのすべての宛先アカウントに適切な権限を設定する必要があります。

 AWS Key Management Service (AWS KMS) を使用して AMI を暗号化する場合は、新しいイメージの暗号化に使用される AWS KMS key アカウントの を設定する必要があります。

Image Builder が暗号化された AMI のクロスアカウント配信を実行すると、ソースアカウントのイメージが復号化されてターゲットリージョンにプッシュされ、そのリージョンに指定されたキーを使用して再暗号化されます。Image Builder はターゲットアカウントに代わって動作し、宛先リージョンで作成した IAM ロールを使用するため、そのアカウントはソースリージョンとターゲットリージョンの両方のキーにアクセスできる必要があります。

### 暗号化キー
<a name="cross-account-prereqs-encryption"></a>

 AWS KMSを使用してイメージを暗号化する場合、以下の前提条件が必要です。IAM の前提条件として以下で説明します。

**ソースアカウント要件**
+ AMI を構築して配布するすべてのリージョンのアカウントに KMS キーを作成します。既存のグループを使用することもできます。
+ 宛先アカウントがキーを使用できるように、これらすべてのキーのキーポリシーを更新してください。

**送信先アカウント要件**
+ 暗号化された AMI を配布するために、必要なアクションをロールが実行できるようにするインラインポリシーを `EC2ImageBuilderDistributionCrossAccountRole` に追加します。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)」を参照してください。

以下のように、イメージレシピに暗号化キーを指定します。
+ Image Builder コンソールを使用している場合は、レシピの **[ストレージ (ボリューム)]** セクションにある **[暗号化 (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. 複数のアカウントに分散されている Image Builder AMI を使用するには、宛先アカウントの所有者が自分の `EC2ImageBuilderDistributionCrossAccountRole` というアカウントで新しい IAM ロールを作成する必要があります。

1. アカウント間の配信を有効にするには、「[Ec2ImageBuilderCrossAccountDistributionAccess ポリシー](security-iam-awsmanpol.md#sec-iam-manpol-Ec2ImageBuilderCrossAccountDistributionAccess)」をロールにアタッチする必要があります。マネージドポリシーの詳細については、AWS Identity and Access Management IAM ユーザーガイドの「[マネージドポリシーとインラインポリシー](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 User Guide の [Resource-Based Policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based) を参照してください。

1. 配布する AMI が暗号化されている場合、宛先アカウントの所有者は、KMS キーを使用できるように、アカウントで `EC2ImageBuilderDistributionCrossAccountRole` に次のインラインポリシーを追加する必要があります。`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 Parameter Store パラメータを使用してディストリビューションアカウントとリージョンの出力 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>

Image Builder イメージを複数のアカウントに配布する場合、いくつかの制限があります。
+ 宛先アカウントは、宛先リージョンごとに同時 AMI コピーが 50 個に制限されています。
+ 準仮想化 (PV) 仮想化 AMI を別のリージョンにコピーする場合、コピー先のリージョンが PV 仮想化 AMI をサポートしている必要があります。詳細については、「[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 Encryption](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html)」を参照してください。

詳細については、EC2 Image Builder API リファレンスの「[ディストリビューション設定の作成](https://docs.aws.amazon.com/imagebuilder/latest/APIReference/API_CreateDistributionConfiguration.html)」を参照してください。

## コンソールでの Image Builder AMI のクロスアカウント配信の設定
<a name="cross-account-dist-console-create-ami"></a>

このセクションでは、 AWS マネジメントコンソールを使用して Image Builder AMI のクロスアカウント配信用のディストリビューション設定を作成および設定する方法について説明します。クロスアカウント配信を設定するには、特定の IAM 権限が必要です。続行する前に、このセクションの「[クロスアカウント AMI ディストリビューションの前提条件](#cross-account-dist-prereqs)」を完了する必要があります。

Image Builder コンソールでディストリビューション設定を作成するには、次の手順に従います。

1. [https://console.aws.amazon.com/imagebuilder/](https://console.aws.amazon.com/imagebuilder/) で、EC2 Image Builder コンソールを開きます。

1. ナビゲーションペインから**配信設定**を選択します。これにより、アカウントで作成されたディストリビューション設定のリストが表示されます。

1. **ディストリビューション設定**ページの上部で、**ディストリビューション設定を作成**を選択します。これにより、**ディストリビューション設定の作成** ページが表示されます。

1. **イメージタイプ** セクションで、**出力タイプ** として **Amazon マシンイメージ (AMI)** を選択します。これはデフォルトの設定です。

1. **全般**セクションに、作成する配布設定リソースの**名前**を入力します（必須）。

1. **リージョン設定**で、選択したリージョンのターゲットアカウントに AMI を配布したい 12 桁のアカウント ID を入力し、**Enter** を押す。これにより正しい形式が確認され、入力したアカウント ID がボックスの下に表示されます。このプロセスを繰り返して、さらにアカウントを追加します。

   入力したアカウントを削除するには、アカウント ID の右に表示される **X** を選択します。

   各リージョンの**出力 AMI 名**を入力します。

1. 必要な追加設定を続けて指定し、**設定の作成**を選択して新しい配布設定リソースを作成します。

## から Image Builder AMI のクロスアカウントディストリビューションを設定する AWS CLI
<a name="cross-account-dist-cli-ami-create"></a>

このセクションでは、ディストリビューション設定ファイルを設定し、 の **create-image** コマンドを使用して、アカウント間で Image Builder AMI AWS CLI を構築して配布する方法について説明します。

クロスアカウント配信を設定するには、特定の IAM 権限が必要です。**create-image** コマンドを実行する前に、このセクションの [クロスアカウント AMI ディストリビューションの前提条件](#cross-account-dist-prereqs) を完了する必要があります。

1. 

**ディストリビューション設定ファイルを設定する**

   で **create-image** コマンドを使用して、別のアカウントに配布される Image Builder AMI AWS CLI を作成する前に、`AmiDistributionConfiguration`設定でターゲットアカウント IDs を指定する `DistributionConfiguration` JSON 構造を作成する必要があります。ソースリージョンで、少なくとも 1 つの`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 ではディレクトリパスを表すためにバックスプラッシュ (\\) が使用され、Linux と macOS ではフォーワードスラッシュ (/) が使用されます。

また、`--distributions` パラメータを使用して、コマンドで直接 JSON を指定することもできます。