Skip to content
Latchkey

Conftest vs OPA: Policy as Code の比較

両者はライバルではなく関連しています。どちらも Rego 言語を使います。OPA (Open Policy Agent) は汎用のポリシーエンジンで、しばしばサービスとして実行されます。Conftest は OPA 上に構築された CLI で、構造化された設定ファイルを Rego ポリシーに対してテストします。

よくある疑問は Conftest と OPA のどちらを使うかです。Conftest は OPA エンジンをラップして 1 つの仕事を簡単にします。設定ファイル (YAML、JSON、Dockerfile、HCL など) を CI で Rego に対してチェックすることです。OPA はランタイム認可も扱う、より広範なエンジンです。両者の関係を以下に示します。

ConftestOPA
何であるか設定ファイルをテストする CLI汎用ポリシーエンジン + ライブラリ
言語RegoRego
主な用途CI/CD の設定チェックランタイム認可 + ポリシー
入力YAML/JSON/HCL/Dockerfile/など任意の JSON データ / API クエリ
デプロイCLI ステップとして実行server、sidecar、または埋め込み
関係OPA 上に構築Conftest の基盤

エンジン vs CLI ラッパー

OPA は完全なポリシーエンジンで、アプリケーションに埋め込んだり、admission control (Gatekeeper 経由) や API 認可のための server として実行したり、ランタイムでクエリしたりできます。Conftest はそれを開発者にやさしい CLI に絞り込みます。設定ファイルと Rego ポリシーを指定すると、pass または fail を返します。必要なのが CI でのファイルの静的チェックなら、Conftest が使いやすい選択肢です。

ユースケースで選ぶ

pull request をゲートするには Conftest を使います。resource limits が欠けた Kubernetes マニフェスト、root で動く Dockerfile、公開バケットを含む Terraform をブロックします。ランタイムでのポリシー決定、クラスターの admission control、システム横断で再利用可能なポリシーサービスが必要なときは OPA を使います。書いた Rego は両者間で移植可能です。

CI での利用

Conftest は設定ファイルに対する fail-fast なゲートとして自然に収まります。pull request で変更されたマニフェストに対して実行してください。すでに他の場所で OPA を実行している場合、ランタイムポリシーと Conftest の CI チェックの間で Rego を共有すれば、ルールの重複を避けられます。

結論

CI で設定ファイルを Rego に対してテストするなら Conftest を、ランタイム認可や admission control 向けの汎用ポリシーエンジンが必要なら (直接または Gatekeeper 経由で) OPA を選んでください。両者は Rego を共有するため、投資は引き継がれます。

関連ガイド