Slide 1

Slide 1 text

型も通る、synthも通る、 それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 AWS CDK Conference Japan 2026 2026/07/18(土) Fusic Co.,Ltd. 清家 史郎 (@seike460) OSEKKAI × TECHNO LOGY

Slide 2

Slide 2 text

清家 史郎 (@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

Slide 3

Slide 3 text

値の参照 利⽤者 / 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つの確認箇所

Slide 4

Slide 4 text

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を速く書ける

Slide 5

Slide 5 text

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も同じように生成する

Slide 6

Slide 6 text

4,118行 実プロダクトをsynthした実測値 ©Fusic Co., Ltd. 6 4,118行のCloudFormationを、人だけでは確認しきれない

Slide 7

Slide 7 text

権限・公開設定・コストをCIで検証する 生成されたCloudFormationをCIで自動検査する

Slide 8

Slide 8 text

1 cdk-nag × Control Tower proactive rules synth時に検出する ©Fusic Co., Ltd. 8

Slide 9

Slide 9 text

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結果を検査する

Slide 10

Slide 10 text

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を失敗させる

Slide 11

Slide 11 text

$ 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時に検出する

Slide 12

Slide 12 text

policy/suppressions.ts // suppress はこの関数だけから設定する suppress(bucket, [{ id: "AwsSolutions-S1", reason: " デモ用の使い捨て。ログは主題ではない", expiry: "2026-12-31", // 期限切れは再レビュー }]); // 理由または期限がなければthrow する ©Fusic Co., Ltd. 12 suppressには理由と期限を必須にする

Slide 13

Slide 13 text

2 policy-as-code × IAM Access Analyzer デプロイ前に検証する ©Fusic Co., Ltd. 13

Slide 14

Slide 14 text

📜 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で検証する

Slide 15

Slide 15 text

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で定義する

Slide 16

Slide 16 text

$ 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を通る

Slide 17

Slide 17 text

$ 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で検出できる

Slide 18

Slide 18 text

3 Infracost × OPA (conftest) コスト増を検出する ©Fusic Co., Ltd. 18

Slide 19

Slide 19 text

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で閾値を判定する

Slide 20

Slide 20 text

$ 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追加による月額増をマージ前に検出する

Slide 21

Slide 21 text

synth-gate cdk-nag / cfn-guard iam-gate Access Analyzer cost-gate Infracost × OPA deploy 最終判断は人間 各層が異なる方法で検証し、互いに補う ©Fusic Co., Ltd. 21 3層を通して、権限・公開設定・コストを確認する

Slide 22

Slide 22 text

AIの実装速度を保ち、 リスクを検出する 自動検証があると、 AIに任せる範囲を広げやすい ©Fusic Co., Ltd. 22

Slide 23

Slide 23 text

ルールを守ること自体が目的になると、ビジネスの速度を落とすことがある 検出 ルールが違反を知らせる 確認 リスクとビジネス上の目的を見る 判断 例外を認めるか人が決める ▶ 例外には理由と期限を残す — 後から見直せる状態にする ©Fusic Co., Ltd. 23 ベストプラクティスを絶対視しない

Slide 24

Slide 24 text

ま と め — 3 層 で 検 証 す る Point.01 cdk-nagがsynth時に違反を検出する Point.02 Access Analyzerが権限と公開設定を検証する Point.03 InfracostがCDKのコスト増を閾値で判定 ▶ まずはcdk-nagから — 数行の設定でCIに追加できます ©Fusic Co., Ltd. 24

Slide 25

Slide 25 text

Thank You AIの実装速度を保ち、リスクを機械で検証する OSEKKAI × TECHNOLOGY ココロと技術で、ぴったりも、びっくりも。 We are Hiring! カジュアル面接 — Let's Talk! https://fusic.co.jp/recruit/lets_talk/44 ©Fusic Co., Ltd.