Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 /...
Search
shiro seike
PRO
July 18, 2026
Programming
9
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
AWS CDK Conference Japan 2026
https://jawsug-cdk.connpass.com/event/393595/
shiro seike
PRO
July 18, 2026
More Decks by shiro seike
See All by shiro seike
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
330
Architecture as SteeringOn-Ramp to AI-DLC
seike460
PRO
0
30
Why Continue AWS Community Builders
seike460
PRO
0
75
AWSコミュニティ活動は顧客のクラウド推進に効くのか / Do AWS community activities help customers adopt the cloud?
seike460
PRO
0
190
テレメトリーシグナルが導くパフォーマンス最適化 / Performance Optimization Driven by Telemetry Signals
seike460
PRO
2
290
AI-DLC 入門 〜AIコーディングの本質は「コード」ではなく「構造」〜 / Introduction to AI-DLC: The Essence of AI Coding Is Not “Code” but “Structure”
seike460
PRO
0
1.7k
今さら聞けないサーバーレスのいいところ 〜運用から解放される世界を目指して〜 / The Benefits of Serverless You Might Be Too Embarrassed to Ask About Now — Aiming for a World Free from Operational Burdens
seike460
PRO
0
110
AWS Lambda Durable Functions のユースケースを探る / Exploring Use Cases for AWS Lambda Durable Functions
seike460
PRO
0
99
歴史から学ぶ「Why PHP?」 PHPを書く理由を改めて理解する / Learning from History: “Why PHP?” Rediscovering the Reasons for Writing PHP
seike460
PRO
0
540
Other Decks in Programming
See All in Programming
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
840
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
460
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
350
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
230
【やさしく解説 設計編 #1】「ドメイン駆動」と「実装駆動」ってなに? 〜設計の考え方を、たとえ話で学ぼう〜
panda728
PRO
1
110
えっ!!コードを読まずに開発を!?
hananouchi
0
190
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
120
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.8k
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
800
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
150
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
110
エンジニアにデザインハーネスを 〜デザインプロセスを規定するためのハーネス〜 / Design harness from an engineer's perspective
rkaga
2
1.4k
Featured
See All Featured
How to build a perfect <img>
jonoalderson
1
5.8k
The Curse of the Amulet
leimatthew05
2
13k
First, design no harm
axbom
PRO
2
1.2k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
410
Exploring anti-patterns in Rails
aemeredith
3
440
WCS-LA-2024
lcolladotor
0
680
Mobile First: as difficult as doing things right
swwweet
225
10k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.7k
The SEO identity crisis: Don't let AI make you average
varn
0
510
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
190
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
450
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Transcript
型も通る、synthも通る、 それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 AWS CDK Conference Japan 2026 2026/07/18(土) Fusic
Co.,Ltd. 清家 史郎 (@seike460) OSEKKAI × TECHNO LOGY
清家 史郎 (@seike460) SHIRO SEIKE 技術コミュニティ室長 / シニアエバンジェリスト ・AWS Ambassador
・2025-2026 Japan AWS Top Engineers ・AWS Community Builder Serverless — コミュニティ ・JAWS-UG 福岡 運営 / JAWS DAYS 2026 実行委員長 — 最近の登壇 ・AWS Community Day Hong Kong 2025 ・AWS Summit Hong Kong 2026 ・AWS Summit Japan 2026 ・AWS Community Day Singapore 2026 自己紹介 OSEKKAI × TECHNOLOGY ©Fusic Co., Ltd. 2
値の参照 利⽤者 / CI API Gateway JWT (IdP 連携) Lambda
(api) DynamoDB メタデータ Parameter Store 値の実体 KMS 暗号化 危険① 広すぎる権限 Lambda ・SSM ・KMS の 権限が広がりやすい 監査の複線 DynamoDB Streams EventBridge Pipes Data Firehose S3 (WORM 監査ログ) 危険② 公開設定 外部への同期 EventBridge SQS Lambda (worker) 他のAWS アカウント / GitHub NAT Gateway 危険③ 増えるコスト 破線 = 実機に無い。追加されがち ©Fusic Co., Ltd. 3 あるCDK Stackの構成と、3つの確認箇所
lib/hello-stack.ts const key = new kms.Key(this, "HelloKey", { enableKeyRotation: true,
// ローテーション有効 removalPolicy: RemovalPolicy.RETAIN, }); const logGroup = new logs.LogGroup(this, "HelloLogGroup", { retention: logs.RetentionDays.ONE_YEAR, encryptionKey: key, // CMK で保管時暗号化 }); // 実プロダクトのCDK をAI で実装。型チェックとsynth は通る ©Fusic Co., Ltd. 4 AIは動くCDKを速く書ける
new iam.Role(this, "AgentRole", { assumedBy: new ServicePrincipal("lambda.amazonaws.com"), inlinePolicies: { wildcard:
new iam.PolicyDocument({ statements: [new iam.PolicyStatement({ actions: ["iam:*"], // 全IAM 操作 resources: ["*"], // 全リソース })], }), }, }); // このコードも型チェックとsynth を通る ©Fusic Co., Ltd. 5 AIは危険なCDKも同じように生成する
4,118行 実プロダクトをsynthした実測値 ©Fusic Co., Ltd. 6 4,118行のCloudFormationを、人だけでは確認しきれない
権限・公開設定・コストをCIで検証する 生成されたCloudFormationをCIで自動検査する
1 cdk-nag × Control Tower proactive rules synth時に検出する ©Fusic Co.,
Ltd. 8
synthで生成した CloudFormation cdk-nag (cdklabs OSS) ⛔ 違反時はsynth失敗 値の参照 利⽤者 /
CI API Gateway JWT (IdP 連携) Lambda (api) DynamoDB メタデータ Parameter Store 値の実体 KMS 暗号化 危険① 広すぎる権限 Lambda ・SSM ・KMS の 権限が広がりやすい 監査の複線 DynamoDB Streams EventBridge Pipes Data Firehose S3 (WORM 監査ログ) 危険② 公開設定 外部への同期 EventBridge SQS Lambda (worker) 他のAWS アカウント / GitHub NAT Gateway 危険③ 増えるコスト 破線 = 実機に無い。追加されがち synth が吐くテンプレート全体を⾛査 ① 権限 ② 公開設定 ©Fusic Co., Ltd. 9 cdk-nagでsynth結果を検査する
bin/app.ts // bin/app.ts — CDK app のエントリポイント const plugins: IPolicyValidationPlugin[]
= [ new AwsSolutionsChecks(app, { verbose: true }), ...(cfnGuardValidator ? [cfnGuardValidator] : []), ]; Validations.of(app).addPlugins(...plugins); // 違反時はexit 1 。資格情報不要でfork PR でも実行できる ©Fusic Co., Ltd. 10 違反があればsynthを失敗させる
$ cdk synth -c stage=preview -c DEMO_VIOLATION=l1 ERROR The IAM
entity contains wildcard permissions and does not have a cdk-nag rule suppression ... app-preview-hello/DemoL1WildcardRole/Resource Acknowledge with 'AwsSolutions-IAM5[Action::iam:*]' ERROR [CT.IAM.PR.5] inline policies do not have wildcard service actions (cdk-validator-cfnguard) Synthesis finished with errors exit 1 — 両方の検査で違反を検出 ©Fusic Co., Ltd. 11 iam:*をsynth時に検出する
policy/suppressions.ts // suppress はこの関数だけから設定する suppress(bucket, [{ id: "AwsSolutions-S1", reason: "
デモ用の使い捨て。ログは主題ではない", expiry: "2026-12-31", // 期限切れは再レビュー }]); // 理由または期限がなければthrow する ©Fusic Co., Ltd. 12 suppressには理由と期限を必須にする
2 policy-as-code × IAM Access Analyzer デプロイ前に検証する ©Fusic Co., Ltd.
13
📜 policy-as-code (YAML / rego) IAM Access Analyzer ⛔ 違反時はfail
値の参照 利⽤者 / CI API Gateway JWT (IdP 連携) Lambda (api) DynamoDB メタデータ Parameter Store 値の実体 KMS 暗号化 危険① 広すぎる権限 Lambda ・SSM ・KMS の 権限が広がりやすい 監査の複線 DynamoDB Streams EventBridge Pipes Data Firehose S3 (WORM 監査ログ) 危険② 公開設定 外部への同期 EventBridge SQS Lambda (worker) 他のAWS アカウント / GitHub NAT Gateway 危険③ 増えるコスト 破線 = 実機に無い。追加されがち ポリシーの意味をデプロイ前に判定 ① 権限の意味 ② 公開の意味 ©Fusic Co., Ltd. 14 組織ルールをコード化し、Access Analyzerで検証する
policy-as-code (YAML) entries: - id: kms-decrypt-except-api-worker actions: [kms:Decrypt] exceptRoles: [api,
worker] # これ以外は失敗 reason: >- 値を復号できるのはapi/worker のみ。 それ以外への漏れをfail-closed で検査 # Access Analyzer が宣言どおりかを検査する ©Fusic Co., Ltd. 15 組織の権限ルールをYAMLで定義する
$ cdk synth -c stage=preview -c DEMO_VIOLATION=l2 ERROR The S3
Bucket does not have public access restricted and blocked (AwsSolutions-S2) exit 1 — cdk-nag が公開設定を検出(実測) suppress を設定すると… exit 0 (実測) ©Fusic Co., Ltd. 16 suppressを設定すると、公開バケットもsynthを通る
$ cfn-policy-validator check-no-public-access FAIL The resource policy grants public access
resourceName: DemoL2PublicBucket exit 2 — Access Analyzer 側で公開設定を検出(実測) ©Fusic Co., Ltd. 17 cdk-nagをsuppressしても、Access Analyzerで検出できる
3 Infracost × OPA (conftest) コスト増を検出する ©Fusic Co., Ltd. 18
Infracost — IaC差分を月額に換算 / OPA (conftest) — ポリシーでJSONを判定 値の参照 利⽤者
/ CI API Gateway JWT (IdP 連携) Lambda (api) DynamoDB メタデータ Parameter Store 値の実体 KMS 暗号化 危険① 広すぎる権限 Lambda ・SSM ・KMS の 権限が広がりやすい 監査の複線 DynamoDB Streams EventBridge Pipes Data Firehose S3 (WORM 監査ログ) 危険② 公開設定 外部への同期 EventBridge SQS Lambda (worker) 他のAWS アカウント / GitHub NAT Gateway 危険③ 増えるコスト 破線 = 実機に無い。追加されがち 構成の差分を⽉額に換算して判定 ③ 増えるコスト ©Fusic Co., Ltd. 19 Infracostで費用を計算し、OPAで閾値を判定する
$ cdk synth -c stage=preview -c DEMO_VIOLATION=l3 $ infracost scan
cdk.out/app-preview-hello.template.json Monthly cost: $67 → 変更前のscan は $1 (実測) → 合計差を diff.json に書き出す (jq) $ conftest test --all-namespaces \ --policy policy/rego diff.json FAIL - terraform.cost - Cost gate violated: monthly cost diff +$65.7 exceeds the +$50 threshold (ADR-005 / NFR-COST-2) ©Fusic Co., Ltd. 20 NAT追加による月額増をマージ前に検出する
synth-gate cdk-nag / cfn-guard iam-gate Access Analyzer cost-gate Infracost ×
OPA deploy 最終判断は人間 各層が異なる方法で検証し、互いに補う ©Fusic Co., Ltd. 21 3層を通して、権限・公開設定・コストを確認する
AIの実装速度を保ち、 リスクを検出する 自動検証があると、 AIに任せる範囲を広げやすい ©Fusic Co., Ltd. 22
ルールを守ること自体が目的になると、ビジネスの速度を落とすことがある 検出 ルールが違反を知らせる 確認 リスクとビジネス上の目的を見る 判断 例外を認めるか人が決める ▶ 例外には理由と期限を残す —
後から見直せる状態にする ©Fusic Co., Ltd. 23 ベストプラクティスを絶対視しない
ま と め — 3 層 で 検 証 す
る Point.01 cdk-nagがsynth時に違反を検出する Point.02 Access Analyzerが権限と公開設定を検証する Point.03 InfracostがCDKのコスト増を閾値で判定 ▶ まずはcdk-nagから — 数行の設定でCIに追加できます ©Fusic Co., Ltd. 24
Thank You AIの実装速度を保ち、リスクを機械で検証する OSEKKAI × TECHNOLOGY ココロと技術で、ぴったりも、びっくりも。 We are Hiring!
カジュアル面接 — Let's Talk! https://fusic.co.jp/recruit/lets_talk/44 ©Fusic Co., Ltd.