Lambda 関数を利用して暗号化 EBS を使用する EC2 インスタンスが起動できない場合の対処法
困っていること
EC2 インスタンスの起動を Lambda 関数で自動化しようとしたところ、起動に失敗します。
なお、Lambada 関数は成功しておりエラーは見受けられません。対処法を教えてください。
どう対応すればいいの?
起動予定の EC2 インスタンスにアタッチしている EBS が KMS (CMK) で暗号化されているかご確認ください。
また、CloudTrail で該当 Lambda 関数実行日時を調査してください。
以下のようにイベント名 CreateGrant で AccessDenied エラーが発生していることが想定されます。
※ 一部マスクします
"eventSource": "kms.amazonaws.com",
"eventName": "CreateGrant",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "ec2-frontend-api.amazonaws.com",
"userAgent": "ec2-frontend-api.amazonaws.com",
"errorCode": "AccessDenied",
"errorMessage": "User: arn:aws:sts::xxxxxxxxxxx:assumed-role/Test-role-xxxxxxx/Test-Lambda is not authorized to perform: kms:CreateGrant on resource: arn:aws:kms:ap-northeast-1:xxxxxxxxxxxx:key/43210987-9999-7777-xxxx-f42aaaaaaaaa because no identity-based policy allows the kms:CreateGrant action",
"requestParameters": null,
上記のように、カスタマーマネージドキー(CMK)を使用している場合、対象 Lambda 関数にアタッチしているロールに以下のポリシーを追加してください。
ポリシー追加後、想定通りに EC2 インスタンスが起動可能かお試しください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:CreateGrant"
],
"Resource": "*"
}
]
}
※ 適宜修正してください
"Resource"句には、EBS 暗号化に使用している CMK の ARN を記述することをお勧めします。
参考資料
EC2 インスタンスを起動するための IAM と KMS の許可の問題をトラブルシューティングする | AWS re:Post