記事検索

検索ワードを入力してください。
Sky Tech Blog
Terraformの​静的チェック

Terraformの​静的チェック

Terraformのレビューだけでは防げない「適用してから気づく」事故。本記事では、それを未然に防ぐための静的チェックツール群を徹底比較します。各ツールの最大の違いである「入力(.tfかPlan JSONか)」に着目し、TFLint、Trivy、Checkov、Terrascan、Regula、Conftestという代表的な6つのツールを「Lint」「セキュリティ」「コンプライアンス」「Policy as Code」という4つの目的に分類。それぞれのツールの役割、得意なこと、そしてどのような状況で効果を発揮するのかを具体的に解説し、現場の要件に応じた最適なツール選定と組み合わせの指針を示します。

Terraformは便利ですが、レビューだけに頼ると「適用してから気づく」事故が起きがちです。
そこで役立つのが、Lint / セキュリティ / コンプラ(準拠)の問題を*"適用前"*に検知できる静的チェックツール群です。
ただし、ツールごとに 目的も 見ている範囲(入力データ)も違うため、状況に応じて適切なツールを選定する必要があります。

Terraform標準​(fmt/validate)は​“最低ライン”

HashiCorpはスタイルガイドで terraform fmt / terraform validate をコミット前に実行し、必要に応じて TFLintのようなLinterも使うことに触れています。
ここまでは「言語として破綻していない」確認です。
この記事は、その先の “適用前に止める” ために有用なツールについて説明します。

最大の​違いは​「入力​(チェック範囲)」​:.tf か​ Plan JSON か

Terraformの静的チェックは、主に次の2系統に分かれます。

A) ソース(.tf)スキャン

  • 速い、ローカルで回しやすい
  • ただし、値が確定していない箇所は推定が混ざることがある(変数上書きなどで補う場合も)
    例:TrivyはTerraformのミスコンフィグを .tf を対象にスキャンし、tfvars で値の上書きも可能としています。

B) Plan(terraform show -json の Plan JSON)スキャン

  • init/plan を経た “適用予定” をチェックされるので、文脈が増えて検知が強くなりやすい
  • ただし plan時点で不明な値(unknown) などの制約が残る
    例:Checkovは .tf だけでなく Plan JSON を評価でき、Plan評価は依存関係や文脈が増えて結果がより完全になり得ると説明しています。
    例:OPAはTerraform Plan JSONに対するポリシー評価の限界(plan時点で情報が無い/確定していないケースがある)を明示しています。
  • Plan JSONのフォーマットはHashiCorpが仕様を公開しています。

まとめると、.tf は速い、Plan は実際の実行結果に近い(ただしPlanにも限界あり)です。

ツール​比較:目的と​チェック範囲別​(代​表6つ)

ここからが本題で、代表ツールを目的と入力で整理します。

カテゴリ ツール 何を守る? 入力(チェック範囲) ルールの拡張
Lint TFLint 品質・apply失敗の芽・ベストプラクティス 主に .tf(プラグインで拡張) プラグイン(AWS等)
セキュリティ(ミスコンフィグ) Trivy config セキュリティ設定ミス(IaC全般) .tf が主、Planも可 ルール更新/カスタム
セキュリティ+コンプラ Checkov ミスコンフィグ+各種基準 .tf / Plan JSON カスタムポリシー
コンプラ(基準準拠) Terrascan CIS等の基準を“満たすか” IaC(Terraform等) Rego(OPA)
コンプラ(基準準拠) Regula セキュリティ+コンプラ .tf / Terraform JSON plans Rego(OPA)中心
Policy as Code Conftest 組織ルール(命名、タグ必須など) “構造化データ”全般(Terraform含む) Rego(自作)

各カテゴリの​具体的な​用途

1. Lint​(TFLint)​=​「applyで​落ちる​前に​指摘したい」

  • TFLintは Linterのフレームワークで、機能はプラグインで提供される設計です。
  • AWS向けルールセット(tflint-ruleset-aws)は、applyで起こり得るエラーや避けたいプラクティスを狙う、と書かれています。
  • TFLintが効果的な例:
    • 存在しないinstance type」など、Terraformの型・文法だけでは止められないが、クラウド文脈だと不正な値
    • 非推奨構文、未使用宣言、命名規約などの“品質系”

2. セキュリティ​(Trivy / Checkov)​=​「危ない​設定を​網羅的に​チェックする」

  • Trivyは trivy config でTerraformのミスコンフィグをスキャンし、ディレクトリ配下のTerraformファイルを再帰的に検査します。
  • Checkovは .tf だけでなく Plan JSONを評価でき、Plan評価は文脈が増えて検知がより完全になり得るとしています。

3. コンプラ​(Terrascan / Regula)​=​「基準​(CIS等)に​合わせて​説明できる」

  • Terrascanは500以上のポリシーを提供し、CIS Benchmarkなどの標準に対してIaCをスキャンでき、エンジンとしてOPA/Regoを活用するとしています。
    →“監査・基準準拠”の説明が必要な場合に効果的です。
  • RegulaもTerraformソースに加えて、Terraform JSON plansを評価対象として明記しています。
    →「Planまで含めて準拠判定したい」場合に便利です。

4. Policy as Code​(Conftest / OPA)​=​「社内ルールを​“テスト”化する」

  • Conftestは “構造化された設定データに対するテスト” を書くツールで、Terraformも対象に含めています。
  • よくあるルール例:
    • 全リソースに必須タグ(CostCenter/Ownerなど)
    • prod だけ削除保護が必須
    • SGの 0.0.0.0/0 を禁止(例外は明示的に許可リストで)

まとめ

各ツールは役割が異なるため、「どれか1つ」ではなく、現場の要件に応じて組み合わせることで効果を最大化できます。
まずは小さく始めて、必要に応じて段階的に増やしていくアプローチをおすすめします。

※本記事で紹介したツールを実際に使用する際は各ツールのライセンスを必ずご自身で確認してください。特に業務利用の場合は、所属組織のポリシーに従って利用可否を判断してください。


\シェアをお願いします!/
  • X
  • Facebook
  • LINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム