AI

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/GatekeeperKyvernoPolaris
ライセンスApache 2.0Apache 2.0Apache 2.0
ポリシー言語Rego(独自)YAML/JSONYAML
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つに統一することを推奨します。

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。