Amazon EC2 の完全な許可を持つ IAM ユーザーまたはロールが EC2 インスタンスを起動できないのはなぜですか?

最終更新日: 2022 年 5 月 18 日

私の AWS Identity and Access Management (IAM) エンティティ (ユーザー、グループ、ロール) は Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに対する完全な許可を持っています。Amazon EC2 インスタンスを起動しようとしましたが、[Pending] (保留中) 状態から [Stopped] (停止) に変わりました

簡単な説明

インスタンスに Amazon Elastic Block Store (Amazon EBS) がアタッチされているかどうかを確認します。Amazon EBS ボリュームが AWS Key Management Service (AWS KMS) キーを使用して暗号化されている場合、許可の問題がある可能性があります。StartInstances API アクションを呼び出す IAM エンティティには、Amazon EC2 サービスの許可を作成する許可が必要です。この許可により、Amazon EC2 は AWS KMS キー (KMS キー) を復号できます。

Amazon EBS ボリュームは、GenerateDataKeyWithoutPlaintext API コールのリクエストを AWS KMS に送信します。これにより、新しいデータキーが作成され、KMS キーで暗号化されます。暗号化されたデータキーは Amazon EBS ボリュームに送り返され、Amazon EC2 インスタンスにアタッチされます。このシナリオでは、KMS キーは EC2 インスタンスおよび KMS キーと同じ AWS アカウントにあります。

注: AWS Command Line Interface (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

1.Amazon EC2 インスタンスが [Stopped] (停止) 状態である理由を確認するには、次のような AWS CLI コマンドを実行します。

aws ec2 describe-instances --instance-id your-instance_ID --query "Reservations[*].Instances[*].StateReason"

出力例:

[
  [
    {
      "Message": "Client.InternalError: Client error on launch",
      "Code": "Client.InternalError"
    }
  ]
]

このエラーは、ルートボリュームまたは追加のアタッチされたボリュームが暗号化されていることを意味します。復号のために AWS KMS キーにアクセスする許可がありません。

2.(オプション) イベント名 CreateGrant の AWS CloudTrail イベントをフィルタリングするための手順に従います。

出力例:

"errorMessage": "User: arn:aws:iam::123456789012:user/test is not authorized to perform: kms:CreateGrant on resource: arn:aws:kms:eu-west-1:123456789012:key/8e3426b8-87b4-434c-ae74-8e63dadf354a"

このエラーは、IAM エンティティに Amazon EC2 がデータキーを復号するための CreateGrant 許可がないため、インスタンスを起動できないことを意味します。

解決方法

キータイプを見つけるには、次のステップに従います。

1.    Amazon EC2 コンソールを開き、[インスタンス] をクリックします。

2.    [Instance ID] (インスタンス ID) で、Amazon EC2 インスタンス ID を選択し、[Storage] (ストレージ) タブを選択します。

3.    [Volume ID](ボリューム ID) で、暗号化されたボリュームのボリューム ID を選択します。

4.    [KMS key ID] (KMS キー ID) で、キー ID をコピーします。

5.    同じ AWS リージョンで AWS KMS コンソールを開きます。

6.    [AWS managed keys] (AWS マネージドキー) と [Customer managed keys] (カスタマーマネージドキー) に、ステップ 4 の KMS キー ID を貼り付けます。

7.    キー ID を選択します。

8.    [Description] (説明) の [General configuration] (一般設定) で、KMS キータイプを書き留めます。

次のように IAM ポリシーを IAM エンティティにアタッチします。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:CreateGrant"
      ],
      "Resource": [
        "arn:aws:kms:eu-west-1:123456789012:key/8e3426b8-87b4-434c-ae74-8e63dadf354a"
      ],
      "Condition": {
        "Bool": {
          "kms:GrantIsForAWSResource": true
        }
      }
    }
  ]
}

kms:GrantIsForAWSResource 条件キーは、EC2 インスタンスなどの AWS リソースで KMS キーの許可のみを IAM エンティティが作成できるようにします。このポリシーは、IAM エンティティが別の IAM エンティティの許可を作成することを許可しません。

(オプション) 次のように、AWS アカウントのルートユーザーアカウントに KMS キーへのフルアクセスを許可します。

{
  "Sid": "Enable IAM User Permissions",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::123456789012:root"},
  "Action": "kms:*",
  "Resource": "*"
}

IAM エンティティを KMS キーポリシーに追加して、CreateGrant API アクションを許可することもできます。

注:


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?