概要
この記事は NTTテクノクロス Advent Calendar 2022 21日目の記事です。
こんにちは。NTTテクノクロスの木村です。
本記事では AMI(Amazon Machine Image)のアカウント間共有 について、共有方法や暗号化時の注意点を共有します。
複数のAWSアカウントを用いて運用する際に、特定のAWSアカウントで作成したAMIを別のアカウントで利用したい、という場面があるかと思います。
そのような時は、AMIの共有機能を用いると、アカウント間で手軽にAMIを共有することが可能です。
今回は以下の内容でのAMIのアカウント共有方法について検証してみます。
- 共有方法の基本操作
- EBS暗号化の検証
- 非暗号化→暗号化(共有元の非暗号化EBSを、共有先で暗号化EBSとして使用する)
- 暗号化→暗号化(共有元の暗号化EBSを、共有先で暗号化EBSとして使用する)
手順
1. 共有方法の基本操作
1-1. 共有元アカウントでの作業
-
マネジメントコンソール
>EC2
>イメージ
>AMI
><共有対象のAMI>
>アクション
>AMI許可を編集
を選択する -
アカウント許可を作成するときに、関連付けられたスナップショットに [ボリュームを作成] の許可を追加します。
をチェックする
検証でこちらのチェックの設定漏れがあったのですが、その際に共有先でAMIのコピーを試みると「You do not have permission to access the storage of this ami」というエラーが発生しました。
その後設定を追加してみたのですが、後からの設定ではボリューム作成の権限は設定は追加されず同様のエラーが発生したため、このチェックは最初の共有時に忘れずに設定が必要です。
1-2. 共有先アカウントでの作業
2. EBS暗号化の検証
2-1. 非暗号化→暗号化(共有元の非暗号化EBSを、共有先で暗号化EBSとして使用する)
2-1-1.共有元アカウントでの作業
- 「1. 共有方法の基本操作」と同様の手順で、AMI共有を設定する
2-1-2.共有先アカウントでの作業
-
マネジメントコンソール
>EC2
>イメージ
>AMI
><暗号化対象のAMI>
>アクション
>AMIをコピー
を選択する -
AMI コピーの EBS スナップショットを暗号化
にチェックを入れ、AMIをコピー
を選択する
- コピーされたAMIを参照すると、EBSスナップショットが暗号化されていることが確認できます。
2-2. 暗号化→暗号化(共有元の暗号化EBSを、共有先で暗号化EBSとして使用する)
2-2-1.共有元アカウントでの作業
- 「1. 共有方法の基本操作」と同様の手順で、暗号化EBSに紐づくAMIに対して、AMI共有を設定する
前提として、共有元のEBSスナップショットはAWS マネージドキー(aws/ebs)で暗号化されたスナップショットでは共有不可のため、カスタマーマネージドキーで暗号化します。
-
マネジメントコンソール
>KMS
>カスタマー管理型のキー
><暗号化に使用したCMK>
>キーポリシー
セクションで編集
を選択し、以下ポリシーのように共有先アカウントのユーザーのアクセス許可を設定する
暗号化EBSスナップショットを共有する場合、暗号化に使用したカスタマーマネージド型キーに共有先アカウントのユーザーにアクセス権限を設定する必要があります
{
"Version": "2012-10-17",
"Id": "key-consolepolicy-3",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<共有元アカウントID>:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "Allow access for Key Administrators",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::<共有元アカウントID>:user/<User>",
"arn:aws:iam::<共有先アカウントID>:user/<User>"
]
},
"Action": [
"kms:Create*",
"kms:Describe*",
"kms:Enable*",
"kms:List*",
"kms:Put*",
"kms:Update*",
"kms:Revoke*",
"kms:Disable*",
"kms:Get*",
"kms:Delete*",
"kms:TagResource",
"kms:UntagResource",
"kms:ScheduleKeyDeletion",
"kms:CancelKeyDeletion"
],
"Resource": "*"
},
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::<共有元アカウントID>:user/<User>",
"arn:aws:iam::<共有先アカウントID>:user/<User>"
]
},
"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::<共有元アカウントID>:user/<User>",
"arn:aws:iam::<共有先アカウントID>:user/<User>"
]
},
"Action": [
"kms:CreateGrant",
"kms:ListGrants",
"kms:RevokeGrant"
],
"Resource": "*",
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": "true"
}
}
}
]
}
2-2-2.共有先アカウントでの作業
- 「2-1. 非暗号化→暗号化(共有元の非暗号化EBSを、共有先で暗号化EBSとして使用する)」と同様の手順で、共有されたAMIをコピー&再暗号化します
- コピーされたAMIを参照すると、EBSスナップショットが再暗号化されていることが確認できます。
さいごに
共有元でEBS暗号化している場合はカスタマーマネージドキーにも許可設定が必要など、少し注意する点がありますね。
それでは、 NTTテクノクロス Advent Calendar 2022 22日目も、引き続きお楽しみください。
参考サイト