techblog

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

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

目次

概要

アカウント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となります。