6
0

More than 1 year has passed since last update.

【AWS】AMIのアカウント間共有を検証

Last updated at Posted at 2022-12-20

概要

この記事は 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」というエラーが発生しました。
その後設定を追加してみたのですが、後からの設定ではボリューム作成の権限は設定は追加されず同様のエラーが発生したため、このチェックは最初の共有時に忘れずに設定が必要です。

  • 共有アカウントセクションで アカウントIDを追加 を選択する
    1-1.PNG
  • 共有先のアカウントIDを入力して AMIを共有 > 変更を保存 を選択する
    1-2.PNG

1-2. 共有先アカウントでの作業

  • [マネジメントコンソール] > [EC2] > [イメージ] > [AMI] を選択して、プライベートイメージに共有されたAMIが存在することを確認する
    1-3.PNG

2. EBS暗号化の検証

2-1. 非暗号化→暗号化(共有元の非暗号化EBSを、共有先で暗号化EBSとして使用する)

2-1-1.共有元アカウントでの作業

  • 「1. 共有方法の基本操作」と同様の手順で、AMI共有を設定する

2-1-2.共有先アカウントでの作業

  • マネジメントコンソール > EC2 > イメージ > AMI > <暗号化対象のAMI> > アクション > AMIをコピーを選択する
  • AMI コピーの EBS スナップショットを暗号化 にチェックを入れ、AMIをコピー を選択する
    2-1-1.PNG
  • コピーされたAMIを参照すると、EBSスナップショットが暗号化されていることが確認できます。
    2-1-2.PNG

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をコピー&再暗号化します
    2-2-2-1.PNG
  • コピーされたAMIを参照すると、EBSスナップショットが再暗号化されていることが確認できます。
    2-2-2-2.PNG

さいごに

共有元でEBS暗号化している場合はカスタマーマネージドキーにも許可設定が必要など、少し注意する点がありますね。
それでは、 NTTテクノクロス Advent Calendar 2022 22日目も、引き続きお楽しみください。

参考サイト

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0