techblog

特定のAWSアカウントとのAMIの共有

AWSアカウント間でAMIイメージを共有する方法を解説。カスタマー管理キーの作成から、キーポリシーの編集、AMIのコピー作成まで、画面キャプチャ付きで分かりやすくまとめました。AMI共有の際のポイントもアドバイスしています。

特定のAWSアカウントとのAMIの共有

目次

  1. 概要
  2. AMI共有
  3. カスタマーキー作成
    1. キーを設定
    2. ラベルを追加
    3. キーの管理アクセス許可を定義
    4. キーの使用法アクセス許可を定義
    5. 確認
  4. 作成したカスタマーキーのキーポリシーを変更
    1. キーポリシーの編集
  5. AMIを作成したKMSキーでコピー
  6. 共有先注意事項

概要

アカウントAに作成したAMIをアカウントBに共有する方法について気になったので備忘録として記録する。

AMI共有

AWSマネージメントコンソールより、EC2サービスページに移動し、共有したいEC2インスタンスを選択し、AMIを作成します。

作成した、AMI権限の編集を選択し、共有アカウント欄に共有したいAWSアカウントID 12桁を入れ、変更を保存することでAMIを対象アカウントに共有することができる。

以下、エラーが出る場合、カスタマー管理ポリシーで作成する必要がありますので、カスタマーキー作成の項目をおこなってから実施します。


イメージ属性を変更できませんでした

Snapshots encrypted with the AWS Managed CMK can’t be shared. Specify another snapshot.


aws ami share image 画像をホバー/タップすると拡大表示されます

aws ami share image 画像をホバー/タップすると拡大表示されます

カスタマーキー作成

AWSマネージメントコンソールより、「Key Management Service (KMS)」サービスページに移動し、カスタマー管理型のキーを選択後、キーの作成を押します。

aws ami kms share image 画像をホバー/タップすると拡大表示されます

キーを設定

何も変更せず次へボタンをクリックします。

aws ami kms share image 画像をホバー/タップすると拡大表示されます

ラベルを追加

エイリアス項目に任意の分かりやすい名前を設定し、次へボタンをクリックします。

aws ami kms share image 画像をホバー/タップすると拡大表示されます

キーの管理アクセス許可を定義

何も変更せず次へボタンをクリックします。

キーの使用法アクセス許可を定義

何も変更せず次へボタンをクリックします。

確認

設定内容に問題ないことを確認し、完了ボタンをクリックします。

aws ami kms share image 画像をホバー/タップすると拡大表示されます

作成したカスタマーキーのキーポリシーを変更

ポリシービューへの切り替えをクリック後、編集をクリックします。

aws ami kms share image 画像をホバー/タップすると拡大表示されます

キーポリシーの編集

キーポリシーの編集より、以下内容に書き換え、変更を保存をクリックします。

{共有元AWSアカウントID12桁}

{共有元AWS IAMユーザ名}

{共有先AWSアカウントID12桁}

上記項目は、適宜自分の環境に置き換えてください。

{
    "Id": "key-consolepolicy-3",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{共有元AWSアカウントID12桁}:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow use of the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::{共有元AWSアカウントID12桁}:user/{共有元AWS IAMユーザ名}",
                    "arn:aws:iam::{共有先AWSアカウントID12桁}:root"
                ]
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": "*"
        },
        {
            "Sid": "Allow attachment of persistent resources",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::{共有元AWSアカウントID12桁}:user/{共有元AWS IAMユーザ名}",
                    "arn:aws:iam::{共有先AWSアカウントID12桁}:root"
                ]
            },
            "Action": [
                "kms:CreateGrant",
                "kms:ListGrants",
                "kms:RevokeGrant"
            ],
            "Resource": "*",
            "Condition": {
                "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                }
            }
        }
    ]
}

AMIを作成したKMSキーでコピー

AWSマネージメントコンソールより、EC2のサービスページに行き、AMIの画面から、AMIのコピーを先ほど作成したKMSキーを使用しておこないます。

コピーしたAMIから冒頭記載のAMI共有でエラーが出ず共有したいアカウントへ共有できます。

aws ami kms share image 画像をホバー/タップすると拡大表示されます

共有先注意事項

共有先では、AMIのプライベートイメージとして表示されます。

共有されたAMIを使用し、EC2インスタンスを立ち上げ後、立ち上げたEC2インスタンスのAMIを作成します。

その後、共有されたEC2インスタンスは削除し、先ほど作成したAMIを使用し、EC2インスタンスを立ち上げます。

このようにすることで、共有元のAWSアカウントID所有ではなく、自分自身AWSアカウントID所有のAMIとなります。