私の 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 アクションを許可することもできます。
注:
関連情報
EBS 暗号化の仕組み
インスタンスがすぐに終了する