Terraform

Terraform Cloud/EnterpriseのSentinelで実現するPolicy as Code実践

2026-04-19
NicheeLab編集部

インフラをコードで管理するだけでは安全になりません。組織の基準やコンプライアンスを機械的に担保する仕組みが必要です。Terraform Cloud/EnterpriseのSentinelは、そのためのPolicy as Codeエンジンとして、計画(Plan)結果を解析し、適合しない変更をブロックします。

本稿では、TerraformにおけるSentinelの役割、評価データ(tfplan/v2, tfconfig/v2, tfstate/v2, tfrun)の使い分け、エンフォースメントモード、ポリシーセット設計、ローカルテストまでを、試験で問われやすい観点と実務のコツを交えて整理します。

Policy as CodeとSentinelの基本

Policy as Codeは、運用ルールやコンプライアンス要件をコードとして管理し、CI/CDと同様にレビュー・テスト・バージョン管理の対象にする考え方です。Terraform Cloud/EnterpriseではSentinelがこの役割を担い、Terraformの実行フローに統合されます。

Sentinelポリシーは、評価時点のTerraformデータを取り込み、ブール値のmainルールで可否を判定します。合格なら適用が続行され、不合格ならエンフォースメントモードに応じてブロックまたは警告となります。

  • 実行環境: Terraform Cloud/Enterpriseに組み込み(OSS単体では動作しない)
  • 評価タイミング: plan完了後、apply前(プルリク時の推測(plan-only)にも適用可)
  • 主要インポート: tfplan/v2, tfconfig/v2, tfstate/v2, tfrun
  • 合否: mainがtrueなら合格。失敗時の扱いはモードで制御

評価フローとデータモデルの使い分け

Sentinelはplanの出力を中心に評価します。コストや差分を判断するならtfplan/v2、静的な定義を見たいならtfconfig/v2、既存資産の状態を確認したいならtfstate/v2、ワークスペースや実行メタデータはtfrunが適します。

評価はポリシーセット単位で行われ、対象ワークスペースに紐づいた全ポリシーが順次実行されます。失敗時の挙動はエンフォースメントモード(advisory / soft-mandatory / hard-mandatory)で決まります。

  • tfplan/v2: 追加・変更・削除の候補と属性差分を評価
  • tfconfig/v2: Terraform設定ファイルの内容を評価(変数定義、プロバイダ設定など)
  • tfstate/v2: 実行開始時点の状態(既存リソース)を参照
  • tfrun: ワークスペース名、実行タイプ(推測/通常)、キュー情報などメタデータ

Terraform実行とSentinel評価の流れ

DeveloperVCS push/PRTerraform Cloud/Runterraform plangenerate tfplan/tfconfigSentinel Policiespolicy sets scopedEvaluate & Gateadvisory: warn / soft-mandatory: can be overridden / hard-mandatory: stoppass → apply / fail → stop or overrideDeveloper → Terraform Cloud/Run → Sentinel → Evaluate & Gate → apply / stop

ガードレール設計パターン(実装例つき)

実務で頻出するのは、タグ必須、リージョンの許可リスト、サイズ/クラスの上限、公開設定の禁止などです。これらはtfplan/v2で差分を検査するのが定石です。tfconfig/v2のみで判定すると、可変値が解決されないことがあるため、計画後の値で確実に評価します。

以下は、AWSリソースに必須タグを要求する例です。作成・更新対象のすべてのresource changesを走査し、タグの欠落がないか確認します。

  • タグや命名規則: 変更対象の全resourceに適用されるか
  • コスト関連: 大型インスタンスや高額SKUを拒否
  • ネットワーク/セキュリティ: パブリックアクセスや広すぎるCIDRを検出
  • メタデータ: tfrun経由でワークスペース名や実行タイプに応じた分岐

Sentinelサンプル: 必須タグ(cost-center, owner)を強制

import "tfplan/v2" as tfplan

required = ["cost-center", "owner"]

# 追加・変更される全リソースのタグを収集
changed = func() {
  resources = []
  for tfplan.resource_changes as rc {
    if rc.mode is "managed" and (rc.change.actions contains "create" or rc.change.actions contains "update") {
      resources = append(resources, rc)
    }
  }
  return resources
}

missing_tags = func() {
  violations = []
  for changed() as rc {
    # AWSの典型的なtags属性を想定(プロバイダにより属性名は異なる場合あり)
    proposed = rc.change.after.tags else {}
    for required as k {
      if not (k in keys(proposed)) or length(trim(proposed[k])) == 0 {
        violations = append(violations, sprintf("%s.%s missing tag: %s", [rc.type, rc.name, k]))
      }
    }
  }
  return violations
}

main = rule { length(missing_tags()) == 0 }

# 失敗時に理由を出力
violation["missing_tags"] = rule { length(missing_tags()) > 0 }

ポリシーセット、適用範囲、エンフォースメントモード

ポリシーはポリシーセットにまとめ、組織全体または特定のワークスペースに関連付けます。VCSリポジトリをソースにするか、API/CLIでアップロードできます。バージョン管理・レビューをポリシー側にも徹底しましょう。

エンフォースメントモードは運用成熟度に応じて段階的に強めます。最初はadvisoryで可視化、慣れてきたらsoft-mandatoryで例外は権限者の明示的なオーバーライドに限定、安定後にhard-mandatoryで厳格化、が現実的です。

  • ポリシーセットのスコープ: 全ワークスペース / 選択ワークスペース
  • バージョン管理: VCS連携でプルリクレビューを前提に
  • モード: advisory(警告のみ), soft-mandatory(権限者がoverride可能), hard-mandatory(必須合格)

ローカルテストとモックの実務ポイント

ポリシーはアプリケーションコード同様にテストします。sentinel testで合否と出力を検証し、モックデータで代表ケースを網羅します。tfplan/v2前提のポリシーは、作成・更新・削除を含む差分のモックを準備します。

Terraform Cloud/Enterpriseの実行からモックを入手して再現テストする運用も有効です。代表的な失敗ケースをテストに落とし込み、将来のリグレッションを防ぎます。

  • sentinel fmt / sentinel testで静的チェックと単体テスト
  • モックは最小限よりも代表パターンを重視(作成/更新/削除、可否の境界)
  • プロバイダの属性名差異に注意(tags vs labelsなどは実データで確認)

試験対策の要点と他手段との比較

試験では、どのインポートで何を判定すべきか、エンフォースメントモードの違い、ポリシーセットのスコープ、評価タイミングが頻出です。設計では「tfconfigで静的に検出できるか」「tfplanで差分として検出すべきか」を切り分けられるかが問われます。

Terraform CloudにはRun Tasksという外部サービス連携のゲートもあります。コストやセキュリティのベンダーツールを組み込み、Sentinelと併用する設計も一般的です。

  • 評価タイミング: plan後/approve前を正確に説明できること
  • モードの動作: advisory/soft/hardの違いとoverride可否
  • tfplan/v2優先: 実値が確定してからの評価が堅い
手段主な評価対象/タイミングガバナンス特性
Sentinel(TFC/E組み込み)plan後にtfplan/tfconfig/tfstate/tfrunを評価advisory/soft/hardでゲート。組織・WSスコープのポリシーセット
Run Tasks(TFC機能)plan後に外部サービスを呼び出し評価外部ベンダーのルールを適用。必須/任意のタスクとして構成可能
静的リンタ等(例: validate, fmt)コード記述時〜CIでの静的チェック構文やベストプラクティス検出。実行時の差分は未評価

問題で確認

Pro

問題 1

組織はTerraform Cloudで、タグの欠落を検出した場合は警告にとどめ、例外申請が通った場合のみそのまま適用を続行したい。最も適切な設定の組み合わせはどれか。

  1. ポリシーをtfconfig/v2のみで実装し、ハードマンデトリにする
  2. ポリシーをtfstate/v2で実装し、アドバイザリにする
  3. ポリシーをtfplan/v2で実装し、ソフトマンデトリにする
  4. ポリシーをtfrunで実装し、アドバイザリにする

正解: C

実値に基づくタグ欠落検出はtfplan/v2が適します。例外時に権限者の判断で続行したい要件はsoft-mandatory(失敗してもoverride可能)が一致します。advisoryは常に続行、hard-mandatoryは続行不可のため要件不一致です。

よくある質問

SentinelはTerraform OSSだけで使えますか?

いいえ。Sentinelによるポリシー評価はTerraform Cloud/Enterpriseに組み込まれた機能です。OSS単体の実行ではSentinelは動作しません。

tfconfig/v2とtfplan/v2はどう使い分けますか?

静的に決まる規約(変数定義やモジュール構成など)はtfconfig/v2、値の解決が必要な検査(サイズやタグの最終値、作成/更新の有無)はtfplan/v2を使います。迷ったら、適用前の確定値を持つtfplan/v2で検査するのが安全です。

ポリシーのテストはどう進めればよいですか?

sentinel testで単体テストを用意し、代表的な合格/不合格ケースのモックを揃えます。Terraform Cloudの実行から取得したモックを活用して、現場の実データに近いシナリオでリグレッションを防ぐのが有効です。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Terraform

Terraform HCL 構文の基礎:Block / Attribute / Expression を正しく使い分ける

Terraform Associate で頻出の HCL 構文を、ブロック・属性・式の3視点で整理。実務で迷いがちな書き...

Terraform

Terraform Authoring & Ops Pro: 上位資格の範囲と対策

上位レベルを想定したTerraformの設計・運用ドメインを整理し、実務で通用する対策を提示。モジュール設計、ステート運...

Terraform

Terraform Providers の基本: プラグイン型アーキテクチャを正しく使いこなす

Associate レベルで押さえるべき Provider の基礎、インストール、バージョニング、認証、エイリアス運用を...

Terraform

Terraform Resourceブロック徹底ガイド: 最小単位のリソース定義

Associateレベルで押さえるべきResourceブロックの構造、依存関係、メタ引数、ライフサイクル制御を実務目線で...

Terraform

Terraform Data Source徹底理解:既存リソースの参照で壊さず足す

Terraform Associate向けに、Data Sourceを用いた既存リソース参照の基本、選択基準、評価順序、...

Terraformの記事一覧 (102件)
© 2026 NicheeLab All rights reserved.