特定の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マネージメントコンソールより、「Key Management Service (KMS)」サービスページに移動し、カスタマー管理型のキーを選択後、キーの作成を押します。
キーを設定
何も変更せず次へボタンをクリックします。
ラベルを追加
エイリアス項目に任意の分かりやすい名前を設定し、次へボタンをクリックします。
キーの管理アクセス許可を定義
何も変更せず次へボタンをクリックします。
キーの使用法アクセス許可を定義
何も変更せず次へボタンをクリックします。
確認
設定内容に問題ないことを確認し、完了ボタンをクリックします。
作成したカスタマーキーのキーポリシーを変更
ポリシービューへの切り替えをクリック後、編集をクリックします。
キーポリシーの編集
キーポリシーの編集より、以下内容に書き換え、変更を保存をクリックします。
{共有元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共有でエラーが出ず共有したいアカウントへ共有できます。
共有先注意事項
共有先では、AMIのプライベートイメージとして表示されます。
共有されたAMIを使用し、EC2インスタンスを立ち上げ後、立ち上げたEC2インスタンスのAMIを作成します。
その後、共有されたEC2インスタンスは削除し、先ほど作成したAMIを使用し、EC2インスタンスを立ち上げます。
このようにすることで、共有元のAWSアカウントID所有ではなく、自分自身AWSアカウントID所有のAMIとなります。