コピーした 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) のカスタマー管理型のキー (CMK) のキーポリシーに、リクエストしているアカウントのアクセスを許可する適切なプリンシパルがない。
  • リクエストしているアカウントの AWS Identity and Access Management (IAM) エンティティに、ボリュームのクロスアカウント CMK に必要な KMS アクセス許可がない。

解決方法

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

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

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

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

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

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

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

4.    [キーユーザー] セクションでアカウントまたはユーザーが見つからない場合は、[ポリシービュー] を選択します。

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

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

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

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

デフォルトのキーポリシー全体の概要と例については、「AWS KMS でキーポリシーを使用する-デフォルトのキーポリシー」を参照してください。

{
             "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.    [ポリシー] を選択します。

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

4.    [JSON] タブを選択します。次のサンプル JSON ポリシーをコピーし、[JSON] テキストボックスに貼り付けます。arn:aws:kms:REGION:MAINACCOUNTNUMBER:key/1a345678-1234-1234-1234-EXAMPLE を CMK の 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.    [ポリシーの確認] をクリックします。[ポリシー検証] は構文エラーを報告します。

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

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

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

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

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

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

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