K8sポリシー比較:OPA/Gatekeeper vs Kyverno vs Polaris でKubernetesポリシーを管理する
オープンソースラボ編集部 ・ 2026年6月14日
K8sポリシー比較:OPA/Gatekeeper vs Kyverno vs Polaris でKubernetesポリシーを管理する
🛡️ Kubernetesクラスタへのデプロイを安全にコントロールするポリシーエンジン。OPA/Gatekeeper・Kyverno・Polarisの特徴と使い分けを解説します。
Kubernetesポリシー管理とは
クラスタへのリソース(Pod・Deployment等)のデプロイ時に、セキュリティ要件・ベストプラクティス・コンプライアンスルールを自動的に検証・強制するしくみです。
主要ツール比較表
| 項目 | OPA/Gatekeeper | Kyverno | Polaris |
|---|---|---|---|
| ライセンス | Apache 2.0 | Apache 2.0 | Apache 2.0 |
| ポリシー言語 | Rego(独自) | YAML/JSON | YAML |
| Admission Webhook | ◎ | ◎ | ◎ |
| Mutation(変更) | ○ | ◎ | × |
| CI/CLIスキャン | ○ | ◎ | ◎ |
| 学習コスト | 高(Rego) | 低(YAML) | 最低 |
| 柔軟性 | ◎ | ◎ | △ |
| CNCFプロジェクト | ◎(Graduated) | ◎(Graduated) | × |
各ツールの特徴
OPA/Gatekeeper
Open Policy Agent(OPA)はKubernetes外でも使える汎用ポリシーエンジン。Gatekeeperは OPA をKubernetesのAdmission Webhookとして動かすためのラッパーです。
主な特徴:
- Regoという専用言語で高度なポリシーを記述
- ConstraintTemplateとConstraintの2段階構造
- Kubernetes以外(Terraform/Envoy/Git等)でも使用可能
- CNCF Graduatedプロジェクトで本番実績多数
# ConstraintTemplate: 特権コンテナ禁止
apiVersion: templates.gatekeeper.sh/v1
kind: ConstraintTemplate
metadata:
name: k8spspprivilegedcontainer
spec:
crd:
spec:
names:
kind: K8sPSPPrivilegedContainer
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package k8spspprivilegedcontainer
violation[{"msg": msg}] {
c := input_containers[_]
c.securityContext.privileged
msg := sprintf("Privileged container is not allowed: %v", [c.name])
}
input_containers[c] {
c := input.review.object.spec.containers[_]
}
---
# Constraint: 適用
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPPrivilegedContainer
metadata:
name: psp-privileged-container
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
向いているケース: 複雑なポリシー・Kubernetes以外でも使いたい
Kyverno
KubernetesネイティブなポリシーエンジンでYAMLだけでポリシーが書けます。Mutationポリシー(デフォルト値の自動設定)が特に強力です。
主な特徴:
- Regoなしで純粋なYAMLでポリシー記述
- Validate(検証)・Mutate(変更)・Generate(生成)の3モード
- イメージ署名の検証(Cosign統合)
- CLIで事前検証可能
# Kyverno Policy: イメージタグlatestを禁止
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: disallow-latest-tag
spec:
validationFailureAction: Enforce
background: true
rules:
- name: require-image-tag
match:
any:
- resources:
kinds:
- Pod
validate:
message: "イメージには 'latest' 以外の明示的なタグが必要です"
pattern:
spec:
containers:
- image: "!*:latest"
---
# Mutate: Podに自動でlabelsを追加
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: add-labels
spec:
rules:
- name: add-team-label
match:
any:
- resources:
kinds: [Pod]
mutate:
patchStrategicMerge:
metadata:
labels:
managed-by: kyverno
向いているケース: シンプルなYAMLポリシー・Mutation重視
Polaris
Fairwinds製のKubernetes設定スキャナー。CLIやAdmission Webhookとして使えるシンプルなツールです。
主な特徴:
- 事前定義されたベストプラクティスチェック
- CI/CDパイプラインへの統合が容易
- Dashboardで可視化
- カスタムチェックもYAMLで追加可能
# CLIスキャン
polaris audit --audit-path ./manifests/ --format=pretty
# Webhookとしてインストール
helm repo add fairwinds-stable https://charts.fairwinds.com/stable
helm install polaris fairwinds-stable/polaris --namespace polaris --create-namespace --set webhook.enable=true --set dashboard.enable=true
向いているケース: ベストプラクティス自動チェック・CI統合
選択ガイド
| 要件 | 推奨 |
|---|---|
| 複雑なポリシー・Kubernetes以外でも | OPA/Gatekeeper |
| YAMLだけで管理・Mutation必須 | Kyverno |
| 標準的なベストプラクティスチェック | Polaris |
内部リンク
外部リソース
FAQ
Q. OPAとGatekeeperの違いは何ですか?
OPAは汎用ポリシーエンジンです。GatekeeperはOPAをKubernetesのAdmission Webhookとして使いやすくラップしたものです。
Q. Regoは難しいですか?
はい、独自の関数型言語で学習コストが高いです。Kyverno(YAML)やPolaris(YAML)から始めて、複雑なポリシーが必要になったときにOPAへ移行するのが現実的です。
Q. PSP(PodSecurityPolicy)の廃止後はどうすればいいですか?
Kubernetes 1.25でPSPが廃止されました。PSP相当の機能はKyverno・Gatekeeper・またはKubernetes組み込みのPod Security Admissionで代替できます。
Q. 複数のポリシーエンジンを同時に使えますか?
技術的には可能ですが、管理が複雑になるため1つに統一することを推奨します。