

CDKデプロイでssm:GetParametersがAccessDenied、原因はcfn-exec-roleの権限未アタッチ
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
CDK deployでCloudFormationのchangeset作成中に ssm:GetParameters がAccessDeniedになった。原因はCloudFormation実行ロール(cfn-exec-role)にIAMポリシーが一切アタッチされていなかったこと。
発生したエラー
current credentials could not be used to assume 'arn:aws:iam::123456789012:role/cdk-hnb659fds-file-publishing-role-123456789012-ap-northeast-1', but are for the right account. Proceeding anyway.current credentials could not be used to assume 'arn:aws:iam::123456789012:role/cdk-hnb659fds-deploy-role-123456789012-ap-northeast-1', but are for the right account. Proceeding anyway.ExampleStack: creating CloudFormation changeset...User: arn:aws:sts::123456789012:assumed-role/cdk-hnb659fds-cfn-exec-role-123456789012-ap-northeast-1/AWSCloudFormation is not authorized to perform: ssm:GetParameters on resource: arn:aws:ssm:ap-northeast-1:123456789012:parameter/cdk-bootstrap/hnb659fds/version because no identity-based policy allows the ssm:GetParameters action (Service: AWSSimpleSystemsManagement; Status Code: 400; Error Code: AccessDeniedException)file-publishing-roleとdeploy-roleのassume失敗ログも出てるけど、これは無視してよさそう。実際に効いてるのは最後の行で、cfn-exec-roleが /cdk-bootstrap/hnb659fds/version を読めていない。
原因
CDKの新しい合成方式では、deploy時にCloudFormation実行ロールがCDKブートストラップの版数を確認するためSSMパラメータを参照する。今回はそのcfn-exec-roleに ssm:GetParameters を含むポリシーが何もアタッチされていなかった。
調査過程
cdk bootstrapを再実行
npx cdk bootstrap# → bootstrapped (no changes)no changes はCDKToolkitスタック自体が期待どおりと判定されただけで、ロールに欠けているポリシーは直らない。
cfn-exec-roleの実ポリシーを確認
aws iam list-attached-role-policies \ --role-name cdk-hnb659fds-cfn-exec-role-123456789012-ap-northeast-1結果、AttachedPolicies が空だった。bootstrapのログ上は Execution policies: AdministratorAccess と表示されるのに、実ロールには何もアタッチされていない状態。
権限境界も確認したが原因ではなかった
aws iam get-role \ --role-name cdk-hnb659fds-cfn-exec-role-123456789012-ap-northeast-1 \ --query 'Role.PermissionsBoundary'null が返ってきたので権限境界は関係なかった。
対応
ポリシーを手動でアタッチ。
aws iam attach-role-policy \ --role-name cdk-hnb659fds-cfn-exec-role-123456789012-ap-northeast-1 \ --policy-arn arn:aws:iam::aws:policy/AdministratorAccessアタッチを確認してから再デプロイ。
npx cdk deploy ExampleStackこれで通った。
bootstrapのログに出る「Execution policies」の表示と、実際のロールにアタッチされているポリシーが食い違うことがあるらしい。何らかの理由でbootstrap時にポリシーアタッチが失敗した、または途中で外れたと思われるけど、原因の切り分けまではできていない。同じ症状が出たら、まずログを疑う前に list-attached-role-policies で実態を見たほうが早い。