コピーした AMI から EC2 インスタンスを起動できない理由は何ですか?

最終更新日: 2020 年 9 月 10 日

Amazon マシンイメージ (AMI) を別のアカウントまたはリージョンにコピーしました。コピーされた AMI から Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動できません。この問題を解決する方法を教えてください。

簡単な説明

以下が原因で、暗号化された Amazon Elastic Block Store (Amazon EBS) を使用してコピーされた AMI からインスタンスを起動できない場合があります。

  • AWS Key Management Service (KMS) カスタマーマネージドキー (KMS キー) のキーポリシーに、リクエスト元アカウントのアクセスを許可する適切なプリンシパルがない。
  • リクエスト元アカウントの AWS Identity and Access Management (IAM) エンティティに、ボリュームのクロスアカウント KMS キーに必要な KMS 許可がない。

解決方法

コピーした AMI の既存の KMS カスタムキーへのクロスアカウントアクセスを有効にする

詳細な手順については、「AWS Key Management Service を使用してアカウント間でカスタム暗号化キーをより安全に共有する」の「既存のカスタムキーへのクロスアカウントアクセスを有効にする方法」を参照してください。

EC2 インスタンスが KMS キーにアクセスするためのアクセス許可を設定する

1.    AWS KMS コンソールを開きます。

注意: 正しいリージョンにいることを確認してください。

2.    [カスタマー管理のキー] をクリックし、該当するキーを選択します。

3.    [Key policy] (キーポリシー) で、[Key users] (キーユーザー) までスクロールダウンします。[キーユーザー] セクションに、内部および外部のすべてのアカウントと、キーへのアクセスが必要なユーザーが表示されていることを確認します。

4.    [Key users] (キーユーザー) セクションからアカウントまたはユーザーが欠落している場合は、[Policy view] (ポリシービュー) を選択します。

注意: これまでに AWS KMS キーポリシーを手動で編集したことがあった場合、キーポリシーはポリシー (JSON) ビューのみで表示できます。

5.    キーポリシー中のキーの使用の許可ステートメントが正しいことを確認します。ステートメントには、アカウントと、キーへのアクセスが必要なすべてのユーザーの ARN を含める必要があります。

次に、デフォルトのキーポリシー中のキーの使用の許可ステートメントの例を示します。次の例のキーの使用の許可ステートメントには、以下の ARN が含まれます。

  • コピーされた AMI を含む外部 AWS アカウント。
  • AMI の親アカウント。
  • 外部アカウント内のユーザー。

既定のキーポリシー全体の概要と例については、「既定のキーポリシー」を参照してください

{
             "Sid": "Allow use of the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:root",
                    "arn:aws:iam::444455556666:root",
                    "arn:aws:iam::111122223333:user/UserA"
                ]
            },
            "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::111122223333:root",
                    "arn:aws:iam::444455556666:root",
                    "arn:aws:iam::111122223333:user/UserA"
                ]
            },
            "Action": [
                "kms:CreateGrant",
                "kms:ListGrants",
                "kms:RevokeGrant"
            ],
            "Resource": "*",
            "Condition": {
                "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                }
            }
        }
    ]
}

6.    IAM ポリシーをまだ作成していない場合は、次のセクションに進み、ポリシーを作成して割り当てます。

IAM ポリシーを作成し、IAM ユーザーまたはグループにアタッチする

1.    管理者権限を持つユーザーで IAM コンソールにサインインします。

2.    [Policies] を選択します。

3.    [Create policy] を選択します。

4.    [JSON] タブをクリックします。以下のサンプル JSON ポリシーをコピーして、[JSON] テキストボックスに貼り付けます。arn:aws:kms:REGION:MAINACCOUNTNUMBER:key/1a345678-1234-1234-1234-EXAMPLE を KMS キーの ARN に置き換えます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowUseOfTheKey",
            "Effect": "Allow",
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": [
                "arn:aws:kms:REGION:MAINACCOUNTNUMBER:key/1a345678-1234-1234-1234-EXAMPLE"
            ]
        },
        {
            "Sid": "AllowAttachmentOfPersistentResources",
            "Effect": "Allow",
            "Action": [
                "kms:CreateGrant",
                "kms:ListGrants",
                "kms:RevokeGrant"
            ],
            "Resource": [
                "arn:aws:kms:REGION:MAINACCOUNTNUMBER:key/1a345678-1234-1234-1234-EXAMPLE"
            ],
            "Condition": {
                "Bool": {
                    "kms:GrantIsForAWSResource": true
                }
            }
        }
    ]
}

5.    [Review policy] (ポリシーの確認) をクリックします。構文エラーがあれば、[Policy Validator] (ポリシー検証ツール) がそれらを報告します。

6.    [確認] ページで、ポリシー名として [KmsKeyUsagePolicy] と入力します。ポリシーの [概要] を見直して、許可がポリシーによって付与されていることを確認してから、[ポリシーの作成] をクリックしてポリシーを保存します。新しいポリシーが管理ポリシーのリストに表示され、IAM ユーザーまたはグループにアタッチする準備が整いました。

7.    IAM コンソールのナビゲーションペインで、[ポリシー] を選択します。

8.    ポリシーリストの上部にある検索ボックスに、ポリシーが表示されるまで KmsKeyUsagePolicy と入力します。次に、リストの KmsKeyUsagePolicy の横にあるチェックボックスをオンにします。

9.    [ポリシーアクション] を選択して、 [アタッチ] をクリックします。

10.    [フィルター] で、[ユーザー] を選択します。

11.    検索ボックスで、ユーザーがリストに表示されるまで username の入力を始めます。次に、リストからユーザーの横にあるチェックボックスをオンにします。

12.    ポリシーをアタッチを選択します。