Slide 1

Slide 1 text

ConftestによるTerraformの Policy as Codeを試してみる Copyright © 3-shake, Inc. All Rights Reserved. 2025-09-25 SRETT #13 すずきまさし

Slide 2

Slide 2 text

Copyright © 3-shake, Inc. All Rights Reserved. おまえだれよ 2 ● すずきまさし/masasuzu/@masasuz ● 株式会社スリーシェイクSreake事業部所属 ● クラウドインフラなんでも屋さんをしてます ○ お客様の外部から ■ 設計、運用、構築等の技術支援を行います。 ○ お客様の内部から ■ インフラチームの一員として内製化支援も行います。 ● 得意領域 ○ AWS ■ AWS Community Builder Cloud Operation Since 2024 ■ 2025 Japan All AWS Certifications Engineers ○ Google Cloud ○ Terraform

Slide 3

Slide 3 text

ある程度規模が大きくなると Terraformの規約を効かせるのが難しくなる。 そのために、以下の方法を検討したが、うまくいかない。 ● レビューを徹底 ○ 人間なのでどうしても限界がある ● AWS Config 修復アクション ○ 事後なのでTerraformとの差分が出る ○ 作る前にチェックしたい ○ Google Cloudで使えない GitHub ActionsなどのCI上で動くうまいポリシーチェックのソリューションがないか。 Copyright © 3-shake, Inc. All Rights Reserved. 最近の悩み 3

Slide 4

Slide 4 text

● trivy config (tfsec) ○ セキュリティに限らずポリシーもチェックしたい ● tflint ○ 静的解析なので限界がある ● Sentinel ○ HCP Terraform前提 Copyright © 3-shake, Inc. All Rights Reserved. ツール検討 4

Slide 5

Slide 5 text

● OPA(Open Policy Agent)を内部的に利用 ● 設定ファイルがポリシーに準拠しているかをチェックするポリシーエンジン ● ポリシー記述はRegoという宣言型言語を用いる ● terraformのplan結果をチェックすることができる ● Policy as Codeの実現 Copyright © 3-shake, Inc. All Rights Reserved. Conftest 5

Slide 6

Slide 6 text

Policy as Codeとは、セキュリティ、コンプライアンス、運用などに関するポリシー (ルール)を、人間が読むため だけの文書ではなく、コードとして定義・管理・実行するアプローチです。これにより、 ITインフラやアプリケーショ ンのライフサイクル全体で、ポリシー準拠を自動的に検証・強制することが可能になります。 以下のようなメリットがあります ● 自動化とフィードバック ○ CI/CDパイプラインに組み込むことで早期に開発者にフィードバック ● 一貫性と再現性 ○ ポリシーがコードとして表現されるので環境全体で一貫したポリシーを実現 ● 可視性と透明性 ○ ポリシーをレポジトリ管理することで変更履歴が残る Copyright © 3-shake, Inc. All Rights Reserved. Policy as Code(PaC) 6

Slide 7

Slide 7 text

opa evalでも同じようなことができますが、 ポリシーに準拠しているかどうかをチェックするには conftestの方が向いてそう Copyright © 3-shake, Inc. All Rights Reserved. opa eval VS conftest test 7 opa eval conftest test 入力形式 JSON YAML, JSON, Dockerfile, HCL 出力結果 評価結果 テスト結果 出力形式 JSON プログラムが読むことを意図 TAP, JSON, JUnit, Table 人間が読みやすい形式が選択可能

Slide 8

Slide 8 text

● インスタンスを1つ作る Copyright © 3-shake, Inc. All Rights Reserved. 実装例 main.tf 8

Slide 9

Slide 9 text

Copyright © 3-shake, Inc. All Rights Reserved. 実装例 policy.rego 9 インスタンス名が命名規則に そってるかどうかをチェックす る

Slide 10

Slide 10 text

● terraform planをjsonに変換したものを入力に渡してチェックする ○ 変更する部分がポリシーに沿ってるかチェックしたい Copyright © 3-shake, Inc. All Rights Reserved. 実行形式 10

Slide 11

Slide 11 text

1. 成功例:instance.name = “dev-someservice” 2. 失敗例:instance.name = “daev-someservice” Copyright © 3-shake, Inc. All Rights Reserved. 出力例 11

Slide 12

Slide 12 text

● 日本語ブログやスライドにあるサンプルコードが動かない ○ サンプルコードだと deny[msg] のような記載になってるが、エラーになる ○ v0の記述のようです。 Copyright © 3-shake, Inc. All Rights Reserved. 調べるに当たってはまったこと 12

Slide 13

Slide 13 text

● ConftestでPolicy as Codeを実現できる ● terraform plan結果をチェックさせることでポリシーを強制することができる ● 規模が大きくなったときにポリシーチェックがスケールするようになる Copyright © 3-shake, Inc. All Rights Reserved. まとめ 13

Slide 14

Slide 14 text

● Regoの学習コストをどう取るか ○ 今まで使ってきた言語よりクセがある ○ 簡単な例しか試していないが、複雑なポリシーを書くときにどうなるか ● 採用例があまり多くない印象 ● 継続調査 ○ もう少し使ってみてから判断したい Copyright © 3-shake, Inc. All Rights Reserved. 所感 14