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つ」ではなく、現場の要件に応じて組み合わせることで効果を最大化できます。
まずは小さく始めて、必要に応じて段階的に増やしていくアプローチをおすすめします。
※本記事で紹介したツールを実際に使用する際は各ツールのライセンスを必ずご自身で確認してください。特に業務利用の場合は、所属組織のポリシーに従って利用可否を判断してください。

