インフラをコードで管理するだけでは安全になりません。組織の基準やコンプライアンスを機械的に担保する仕組みが必要です。Terraform Cloud/EnterpriseのSentinelは、そのためのPolicy as Codeエンジンとして、計画(Plan)結果を解析し、適合しない変更をブロックします。
本稿では、TerraformにおけるSentinelの役割、評価データ(tfplan/v2, tfconfig/v2, tfstate/v2, tfrun)の使い分け、エンフォースメントモード、ポリシーセット設計、ローカルテストまでを、試験で問われやすい観点と実務のコツを交えて整理します。
Policy as Codeは、運用ルールやコンプライアンス要件をコードとして管理し、CI/CDと同様にレビュー・テスト・バージョン管理の対象にする考え方です。Terraform Cloud/EnterpriseではSentinelがこの役割を担い、Terraformの実行フローに統合されます。
Sentinelポリシーは、評価時点のTerraformデータを取り込み、ブール値のmainルールで可否を判定します。合格なら適用が続行され、不合格ならエンフォースメントモードに応じてブロックまたは警告となります。
Sentinelはplanの出力を中心に評価します。コストや差分を判断するならtfplan/v2、静的な定義を見たいならtfconfig/v2、既存資産の状態を確認したいならtfstate/v2、ワークスペースや実行メタデータはtfrunが適します。
評価はポリシーセット単位で行われ、対象ワークスペースに紐づいた全ポリシーが順次実行されます。失敗時の挙動はエンフォースメントモード(advisory / soft-mandatory / hard-mandatory)で決まります。
Terraform実行とSentinel評価の流れ
実務で頻出するのは、タグ必須、リージョンの許可リスト、サイズ/クラスの上限、公開設定の禁止などです。これらはtfplan/v2で差分を検査するのが定石です。tfconfig/v2のみで判定すると、可変値が解決されないことがあるため、計画後の値で確実に評価します。
以下は、AWSリソースに必須タグを要求する例です。作成・更新対象のすべてのresource changesを走査し、タグの欠落がないか確認します。
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で厳格化、が現実的です。
ポリシーはアプリケーションコード同様にテストします。sentinel testで合否と出力を検証し、モックデータで代表ケースを網羅します。tfplan/v2前提のポリシーは、作成・更新・削除を含む差分のモックを準備します。
Terraform Cloud/Enterpriseの実行からモックを入手して再現テストする運用も有効です。代表的な失敗ケースをテストに落とし込み、将来のリグレッションを防ぎます。
試験では、どのインポートで何を判定すべきか、エンフォースメントモードの違い、ポリシーセットのスコープ、評価タイミングが頻出です。設計では「tfconfigで静的に検出できるか」「tfplanで差分として検出すべきか」を切り分けられるかが問われます。
Terraform CloudにはRun Tasksという外部サービス連携のゲートもあります。コストやセキュリティのベンダーツールを組み込み、Sentinelと併用する設計も一般的です。
| 手段 | 主な評価対象/タイミング | ガバナンス特性 |
|---|---|---|
| Sentinel(TFC/E組み込み) | plan後にtfplan/tfconfig/tfstate/tfrunを評価 | advisory/soft/hardでゲート。組織・WSスコープのポリシーセット |
| Run Tasks(TFC機能) | plan後に外部サービスを呼び出し評価 | 外部ベンダーのルールを適用。必須/任意のタスクとして構成可能 |
| 静的リンタ等(例: validate, fmt) | コード記述時〜CIでの静的チェック | 構文やベストプラクティス検出。実行時の差分は未評価 |
Pro
問題 1
組織はTerraform Cloudで、タグの欠落を検出した場合は警告にとどめ、例外申請が通った場合のみそのまま適用を続行したい。最も適切な設定の組み合わせはどれか。
正解: 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の実行から取得したモックを活用して、現場の実データに近いシナリオでリグレッションを防ぐのが有効です。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Terraform HCL 構文の基礎:Block / Attribute / Expression を正しく使い分ける
Terraform Associate で頻出の HCL 構文を、ブロック・属性・式の3視点で整理。実務で迷いがちな書き...
Terraform Authoring & Ops Pro: 上位資格の範囲と対策
上位レベルを想定したTerraformの設計・運用ドメインを整理し、実務で通用する対策を提示。モジュール設計、ステート運...
Terraform Providers の基本: プラグイン型アーキテクチャを正しく使いこなす
Associate レベルで押さえるべき Provider の基礎、インストール、バージョニング、認証、エイリアス運用を...
Terraform Resourceブロック徹底ガイド: 最小単位のリソース定義
Associateレベルで押さえるべきResourceブロックの構造、依存関係、メタ引数、ライフサイクル制御を実務目線で...
Terraform Data Source徹底理解:既存リソースの参照で壊さず足す
Terraform Associate向けに、Data Sourceを用いた既存リソース参照の基本、選択基準、評価順序、...