Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CDK Insightsで見る、AIによるCDKコード静的解析(+AI解析)

CDK Insightsで見る、AIによるCDKコード静的解析(+AI解析)

CDK Insightsというツールを使ってAWS CDKのコードをセキュリティ面から検証します。

イベント名:
JAWS-UG CDK支部 #25 〜AI時代のCDK、みんなどう書いてる?〜
AI時代のCDK、みんなどう書いてる?

URL:
https://jawsug-cdk.connpass.com/event/386514/

ハッシュタグ:
#jawsug #jawsug_cdk

Avatar for Kazuki Adachi

Kazuki Adachi

April 15, 2026

More Decks by Kazuki Adachi

Other Decks in Technology

Transcript

  1. { } JAWS-UG CDK支部 #25 · 2026/04/15 〜 AI時代のCDK、みんなどう書いてる?〜 CDK

    Insights で見る、 AI による CDK コード静的解析 (+ AI 解析) 足立 和生 / @k_adachi_01 · アジアクエスト株式会社
  2. 自己紹介 足立 和生(@k_adachi_01) アジアクエスト株式会社 2025 Japan AWS Jr. Champion 2025

    Japan All AWS Certifications Engineer 2026 AWS Community Builder(Dev Tools) JAWS-UG配信部 好きなAWSサービス:AWS CDK, Kiro(サービス?)
  3. AI に IaC を書かせると何が起きるか(結果) 「動く」コードはすぐ出る。ただし… コードは生成された。 cdk synth も通る。ただし、 cdk-insights(後述)

    でスキャンすると—— 設計上の問題 IAM ロールに過剰な権限(ワイルドカード) SG の ingress が広すぎる 削除保護・バックアップが未設定 セキュリティ上の問題 DB クレデンシャルを環境変数に平文で渡している RDS の保存時暗号化が未設定 CloudWatch アラームが未設定 「動く」と「安全性」 「運用・保守性」は別の話 壊れてはいけないインフラにとっては、運用要件やセキュリティのベストプラクティスを保証しないAI生成コードは検証が大変 ※既存のリソースを壊さずに修正することはもっと大変
  4. AI にうまくコードを書かせるには何が足りないか 大きく分けると 2 つのアプローチがある。 ① AI が知らない事を教える プロジェクト固有の情報や CDK

    のベストプラクティスを AI に渡す AWS IaC MCP Server AGNETS.md / .kiro/steering (CLAUDE.md / .claude/rules ) Spec Driven Development ② AI に検証手段を与える ← 今日のメイン 知識だけでは上手く行かない。AI (LLM) は確率に従い、常に 同じ出力にはならない。間違いに気づかせ正す仕組みが大 事。 Linter / Formatter / 型チェック / Test Hooks / cdk-diff / CI/CD / Agent Skills LLM review / 人間によるレビュー
  5. AI が知らない事を教える プロジェクト固有の文脈を AI に渡す手段 AWS IaC MCP Server CDK

    ドキュメント・サンプル・ベスト プラクティスをリアルタイムで AI に提 供 search_cdk_documentation / cdk_best_practices AGNETS.md / .kiro/steering (CLAUDE.md / .claude/rules ) プロジェクト固有のルールや設計方針 を記述。Kiro(Claude Code) が常時参 照する。 例: IAM の最小権限ポリシーを必ず付け る Spec Driven Development 仕様書・アーキテクチャ決定記録を先 に書き、AI に参照させながらコードを 生成する。 ただし、知識を渡すだけでは不十分。AI は確率に従うので、毎回正しいとは限らない。
  6. AI に検証手段を与える(本日のメイン) 知識 + 検証のループで品質を担保する AI(LLM)は本質的には確率に従う。常に同じ出力にはならない。だからこそ 間違った事に気付かせ正す仕組み が大事。 手段 例

    Linter / Formatter Biome, ESLint plugin for AWS CDK 型チェック tsc --noEmit Test Jest + aws-cdk-lib/assertions Hooks pre-tool / post-tool Command cdk diff , cdk refactor , cdk-insights scan CI/CD GitHub Actions Agent Skills /verify-cdk など作成 LLM review Sub-agent によるレビュー 人間によるレビュー 設計・運用判断
  7. 検証手段には 2 種類ある 決定論的 vs 確率的 決定論的(Deterministic) 同じ入力 → 必ず同じ結果。高速・高頻度・自動化しやすい。

    Linter / Formatter 型チェック Test cdk-nag cdk-insights scan ← 今日のメイン 確率的(Probabilistic) 結果に揺らぎがある。柔軟だが低速・コスト高。 Agent Skills(LLM が判断する部分) LLM による review 人間によるレビュー 鉄則:決定論的な手段から先に適用する 速く・確実に弾けるものを先に通してから、確率的な手段でカバーする。決定論的な検証が通った後に人間がレビューする順序 で、レビューコストを下げられる。
  8. CDK のセキュリティも静的解析で担保しよう cdk-nag と cdk-insights — 何が違う? cdk-nag CDK Labs

    が提供するオープンソースの Aspect。 Aspects.of(app).add(new AwsSolutionsChecks()) で 差し込む形式。コンプライアンスルール(AWS Solutions, NIST 等)を適用。 特徴: CDK の Aspect として動作 → ソースの行番号まで特定 できる cdk-insights CDK 専用の静的解析 CLI ツール(Beta) 。 cdk synth 後の CloudFormation テンプレートを解析。cdk-nag ベースのチ ェックを含むうえに、30 以上の AWS サービスに対応した独 自ルールも持つ。 Pro tier: AWS Bedrock 経由の AI 推奨分析も提供 cdk-nag を知っている方 → cdk-insights はその補完的な位置づけ。今日は cdk-insights(Pro tier)について話します。
  9. CDK Insights とは? CDK 専用のデプロイ前監査ツール(Beta) Free tier(静的解析) 完全ローカル実行 — コードはサーバーに送られない

    30 以上の AWS サービスに対応 CRITICAL / HIGH / MEDIUM / LOW の 4 段階 出力: table / JSON / Markdown / SARIF Pro tier(+ AI 分析) AWS Bedrock 経由で AI が Well-Architected / STRIDE ベ ースの推奨を提供 送信するのは redacted CloudFormation テンプレートの み 利用モデル: Claude, Amazon Nova 等 今回は AWS Community Builders 経由の Beta Access で 試用
  10. CDK Insights の始め方 3 ステップで始められる ① npm パッケージのインストール zsh ②

    Aspect の設定(ソース位置を行番号まで特定したい場合) zsh app.ts ts ③ スキャン実行 zsh pnpm add -D cdk-insights pnpm exec cdk-insights init # → app.ts に Aspect の差し込みコードを自動追記してくれる import { CdkInsightsAspect } from 'cdk-insights'; Aspects.of(app).add(new CdkInsightsAspect());
  11. 実行したコードと出力結果(静的解析) まずは Free tier の静的解析結果(52 リソース / 30 issues) severity

    件数 代表的な finding CRITICAL 4 RDS 保存時暗号化なし/CDK 自動生成の PolicyName・GroupDescription を誤検知 HIGH 4 IAM ワイルドカード権限 ( * )/SG が 0.0.0.0/0 を許可/ECR ScanOnPush 未設定/CloudTrail 未設定 MEDIUM 13 ALB アクセスログ未設定/HTTP→HTTPS リダイレクトなし/WAF デフォルト Allow/VPC Flow Logs 未設定 など LOW 9 IAM Permission Boundary 未設定/SG egress 無制限/ECS CPU・メモリ上限なし など 結果からわかること 52 リソース中 18(34.6%)に何らかの問題 — AI が生成したコードはセキュリティ・運用設定を省略しがち CRITICAL 4 件のうち 2 件は誤検知(CDK 自動生成の PolicyName・GroupDescription)→ --warn-sensitive で回避可能 finding には AWS ドキュメントへのリンクが付いており、その場で修正方法を参照できる
  12. 実行結果(レポート抜粋) 各 finding には原因・推奨・ソース位置・WAF 柱が付く cdk-insights-report.md ## Resource: Writer (AWS::RDS::DBInstance)

    ### 🔴🔴🔴 CRITICAL Severity Issue 🔴🔴🔴 - **Issue:** RDS instance is not encrypted. - **Recommendation:** Enable encryption to protect data at rest and meet compliance standards. - **Source Path:** `SampleAppStack/AuroraCluster/Writer/Resource` - **WAF Pillar:** Security ### 🟡🟡🟡 MEDIUM Severity Issue 🟡🟡🟡 - **Issue:** RDS instance does not have deletion protection enabled. - **Recommendation:** Enable DeletionProtection to prevent accidental database deletion. - **Source Path:** `SampleAppStack/AuroraCluster/Writer/Resource` - **WAF Pillar:** Reliability
  13. +アルファ:AI 解析(Pro tier) Well-Architected / STRIDE ベースの推奨を AI が提供 AI

    解析の有効化: CDK_INSIGHTS_LICENSE_KEY 環境変数に Pro ライセンスキーをセットして cdk-insights scan を実行する だけ。 --local フラグを付けるとキーがあっても AI をスキップできる。 AI 解析が提供するもの(確認済みの情報) 静的解析では検出しきれない設計上の推奨事項 Well-Architected の 6 本柱(セキュリティ・信頼性・パフォーマンス等)に沿った改善提案 STRIDE(脅威モデリング)の観点からのリスク指摘 送信されるのは redacted された CloudFormation テンプレートのみ(ソースコード・認証情報は送られない)
  14. コーディングエージェントに組み込む cdk-insights を「自動チェックの一コマンド」として使う Agent Skills(Kiro / Claude Code) .claude/commands/verify.md md

    Kiro / Claude Code から /verify と入力するだけで 一連 のチェックが走る。 CI/CD(GitHub Actions) .github/workflows/cdk.yml yaml SARIF 形式で出力 → GitHub Code Scanning に連携可能。 ## verify 以下を順番に実行して結果を報告する: 1. pnpm exec biome check 2. pnpm exec tsc --noEmit 3. pnpm exec cdk synth 4. pnpm exec cdk-insights scan 5. pnpm test - name: CDK Insights scan env: CDK_INSIGHTS_LICENSE_KEY: ${{ secrets.CDK_INSIGHTS_LI run: | pnpm exec cdk synth pnpm exec cdk-insights scan \ --output sarif \ --fail-on-critical
  15. 人間の役割 AI と静的解析ツールが担う部分、人間が担う部分 役割 担い手 コード生成 AI(Claude Code) スタイル /

    型 / テスト 決定論的ツール(自動) セキュリティ静的解析 cdk-insights(自動) 設計レベルの判断 人間 保守性・運用体制を踏まえたレビュー 人間 誤検知の判断・suppression の承認 人間 AI と静的解析ツールが担う部分が広がるほど、人間はより重要な判断に集中できる。 「このアーキテクチャはチームが運用できるか」 「コストと信頼性のトレードオフをどうするか」——これらは今も人間の仕事。
  16. まとめ ① AI にうまくコードを書かせるには「検証手段を与える」が鍵 AI は確率に従う。知識を渡すだけでなく、決定論的な検証手段(Linter / Test / cdk-insights)でループを作ることが大事。

    ② cdk-insights は 3 ステップで始められるセキュリティ静的解析 pnpm add -D cdk-insights → cdk-insights init → cdk-insights scan 。Free tier でも十分な検出力。Pro tier では AI 分析も加わる。 ③ 人間はより重要な設計判断に集中できる AI の行動品質が上がれば、人間はアーキテクチャ・運用体制・ビジネス判断に集中できる。ツールに任せられる部分は任せよう。
  17. 参考リンク CDK Insights:https://cdkinsights.dev/ cdk-nag:https://github.com/cdklabs/cdk-nag ESLint plugin for AWS CDK:https://github.com/cdklabs/eslint-plugin-cdk AWS

    IaC MCP Server:https://github.com/awslabs/mcp/tree/main/src/iac-mcp-server デモアーキテクチャ引用元:https://github.com/classmethod/icasu-cdk-ecs-fargate-sample