TL

Cloud Service

Policy Controller

Kubernetes クラスタに「やってはいけない構成」を機械的に強制するガードレール。OPA Gatekeeper をベースに、特権コンテナや許可外イメージなどのデプロイを入口で弾き、組織のセキュリティ基準をクラスタ横断で守らせる。AWS の OPA/Kyverno 自前運用に相当。

中級セキュリティ運用上の優秀性
最終更新: 2026-06-28公式ドキュメント ↗
TL;DR要点だけ先に
  • 1.OPA Gatekeeper を基盤に、Kubernetes リソースのデプロイ時にポリシー違反を弾くアドミッション制御の仕組み。
  • 2.制約テンプレートと制約でルールを定義し、すぐ使える既製ポリシーの束も提供される。
  • 3.まず監査(dry-run)で違反を可視化し、段階的に強制ブロックへ移すのが定石。

解決する課題

Kubernetes は柔軟ゆえに、特権コンテナ・ルート実行・許可外レジストリのイメージ・ラベル欠落といった「望ましくない構成」も簡単にデプロイできてしまいます。Policy Controller は、こうした構成をデプロイの入口で機械的に検査し、組織のセキュリティ・運用基準に反するものを弾くガードレールを、クラスタを横断して提供します。

  • レビューや口頭ルールに頼らず、禁止構成のデプロイを技術的に止めたい(特権昇格、hostPath マウントなど)
  • 複数クラスタ・複数チームに、同じセキュリティ基準を一貫して効かせたい
  • PSP(PodSecurityPolicy)廃止後の代替として、より柔軟なポリシーエンジンが欲しい
  • CIS Benchmark や社内標準への準拠状況を、継続的に可視化・監査したい

主要概念と用語

  • OPA Gatekeeper: Policy Controller の基盤となる OSS。Open Policy Agent(OPA)を Kubernetes のアドミッション Webhook として組み込んだもの
  • 制約テンプレート(ConstraintTemplate): ポリシーのロジックを記述した雛形。判定ルールは Rego(OPA のポリシー言語)で書かれ、パラメータを受け取れる
  • 制約(Constraint): テンプレートを具体化したインスタンス。どのリソース種別に・どのパラメータで・どの適用モードで効かせるかを指定する
  • 適用モード(enforcementAction): 違反時の挙動。ブロックする deny、監査ログのみの dryrun、警告を返す warn がある
  • 制約テンプレートライブラリ: Google が提供する既製テンプレート群。特権コンテナ禁止や許可レジストリ制限など、よく使うルールがすぐ使える
  • ポリシーバンドル(Policy Bundle): CIS Benchmark や PSS(Pod Security Standards)など、目的別にまとめられた制約のセット
  • 監査(Audit): 既にクラスタ内にある(デプロイ済みの)リソースを定期的に再評価し、ポリシー違反を一覧化する機能
  • Config Sync との連携: ポリシー定義を Git で管理し、複数クラスタへ宣言的に配布する(GitOps)構成が一般的

仕様・制限・クォータ

  • GKE Enterprise(旧 Anthos)の機能として提供される。GKE のほか、接続済みの他環境クラスタにも展開できる
  • アドミッション制御(Webhook)として動作: リソースの作成・更新時に API サーバーから呼ばれ、ポリシー判定を行う。判定対象は Pod に限らず任意の Kubernetes リソース
  • デプロイ時の強制と、デプロイ済みリソースの監査の二系統を持つ。前者は新規・更新を入口で弾き、後者は既存の違反を洗い出す
  • Rego による表現力: PSP よりも柔軟な条件を記述でき、パラメータ化したテンプレートを再利用できる
  • Webhook の可用性に注意: アドミッション Webhook が応答できないと API リクエストに影響しうるため、failurePolicy の設計と Policy Controller 自身の健全性監視が重要
  • クォータ・上限: 制約数や評価対象は環境規模に依存する。具体的な上限値は変動しうるため、最新値は公式ドキュメントで確認する

内部の仕組み

Policy Controller は、Kubernetes API サーバーのバリデーティング・アドミッション Webhookとして割り込み、リソースが etcd に永続化される前にポリシー判定を行います。

  • リソースの作成・更新要求が API サーバーに届くと、API サーバーは登録済みの Webhook として Gatekeeper を呼び出す
  • Gatekeeper は、対象リソースに該当する制約を集め、各制約が参照する制約テンプレートの Rego ロジックで違反の有無を評価する
  • 違反があれば、制約の適用モードに従って、要求を拒否(deny)、警告のみ(warn)、または通過させてログ記録(dryrun)する
  • 別系統の監査コントローラが、デプロイ済みリソースを定期的に同じ制約で再評価し、違反を制約オブジェクトの status に書き出す

ポリシー定義(テンプレート・制約)は Kubernetes のカスタムリソースなので、Config Sync で Git から各クラスタへ配布すれば、全クラスタに同一ルールを宣言的に効かせられます。

デプロイ時強制と監査は役割が違う

アドミッションでの強制は「これから入るもの」を止め、監査は「すでに入っているもの」を洗い出します。導入直後は監査で既存違反の母数を把握し、修正してから強制へ切り替えると、稼働中ワークロードを巻き込まずに済みます。

設計パターン / ベストプラクティス

  • まず dryrun(監査のみ)で開始し、既存・新規がどれだけ違反するかを可視化してから deny に切り替える
  • 既製の制約テンプレートライブラリとポリシーバンドルを活用し、CIS や PSS 準拠を自前 Rego を書かずに始める
  • ポリシー定義は **Config Sync で Git 管理(GitOps)**し、レビューと履歴を残しつつ複数クラスタへ一括配布する
  • 段階適用: 重大度の高いルール(特権コンテナ・ホスト名前空間など)から deny にし、軽微なもの(ラベル必須など)は warn/dryrun で運用する
  • 例外は制約の対象範囲(namespace 除外など)で明示し、抜け穴を最小化・可視化する
  • Webhook の failurePolicy を、セキュリティ要件と可用性のバランスで選ぶ(fail-closed は安全だが Webhook 障害時にデプロイが止まる)

運用・監視

  • 監査結果を定期的に確認し、デプロイ済みリソースのポリシー違反(特に強制前の母数)を把握する
  • 制約オブジェクトの status各制約の違反件数を追い、強制への移行可否を判断する
  • Policy Controller / Gatekeeper の Pod の健全性とメトリクスを監視する。Webhook がダウンするとアドミッションに影響しうるため、可用性を確保する
  • デプロイがブロックされたら、どの制約のどのパラメータに違反したかを拒否メッセージで特定し、マニフェスト側を修正する
  • ポリシー変更は GitOps の PR レビューを通し、いきなり全クラスタに強制ルールを撒かない運用にする

コスト

Policy Controller は GKE Enterprise(Anthos)の機能として提供されるため、コストは基本的に GKE Enterprise のサブスクリプション/管理対象クラスタ(vCPU)課金に含まれます。Policy Controller 単体での従量課金というより、Enterprise 機能をまとめて利用する前提です。

コスト要素発生する場面最適化のヒント
GKE Enterprise 利用料Policy Controller を含む Enterprise 機能の利用Enterprise 機能を複数活用して費用対効果を高める
管理リソースの消費Gatekeeper や監査コントローラのクラスタ内リソース制約数や評価対象を必要範囲に絞る
監査・ログ保存違反や監査結果のログ保持保持期間とログ量を見直す
正確な料金は公式で確認

GKE Enterprise の課金体系や対象は変わり得ます。最新の課金条件は必ず公式の料金ページで確認してください。

セキュリティ

  • 入口での強制により、特権コンテナ・ルート実行・許可外イメージなどの危険な構成を本番に入れさせない
  • PSP の後継として、Pod Security Standards 相当の制約を柔軟に表現・適用できる
  • ポリシーの変更権限を限定し、ガードレールそのものを無効化・緩和されないよう IAM/RBAC で統制する
  • 例外(namespace 除外・特定 SA の許可など)は最小化して可視化し、抜け穴を恒常化させない
  • Config Sync の GitOps と組み合わせ、ポリシーのドリフトを検出・是正して一貫性を保つ
Webhook の可用性とポリシー網羅性に注意

アドミッション Webhook が止まると、failurePolicy 次第でデプロイが全面的に止まる(fail-closed)か、検査されずに通る(fail-open)かのどちらかになります。可用性監視と適切な失敗ポリシー設計の両方を欠かさないでください。

関連サービス・比較

Policy Controller はしばしば Binary Authorization と対比されます。Binary Authorization が「信頼できるイメージか(署名検証)」に特化するのに対し、Policy Controller は「Kubernetes リソース構成が組織基準に沿うか」という広い構成ガバナンスを担い、両者は補完関係にあります。

観点Policy ControllerBinary Authorization
主目的構成ポリシーの強制と監査信頼できるイメージのみデプロイ許可
判定対象任意の Kubernetes リソース構成コンテナイメージの署名・素性
ルール表現制約テンプレートと Rego証明者と構成証明(署名)
基盤OPA GatekeeperContainer Analysis / Cloud KMS
適用面GKE Enterprise のクラスタ全般GKE / Cloud Run のデプロイ
関係構成ガバナンス全般サプライチェーンの署名検証

ハンズオン / CLI例

# GKE Enterprise の Fleet 機能として Policy Controller を有効化する
gcloud container fleet policycontroller enable \
  --memberships=CLUSTER_NAME

# 監査からブロックへ:適用モードを dryrun で確認後に deny へ切り替える想定の制約例
# (以下は kubectl で適用する制約マニフェストのイメージ)
cat <<'EOF' | kubectl apply -f -
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPPrivilegedContainer
metadata:
  name: deny-privileged-containers
spec:
  enforcementAction: dryrun   # まずは監査のみ。問題なければ deny へ
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
EOF

# 監査結果(違反件数)を確認する
kubectl get k8spspprivilegedcontainer deny-privileged-containers \
  -o jsonpath='{.status.totalViolations}'

# 設定状態を確認する
gcloud container fleet policycontroller describe \
  --memberships=CLUSTER_NAME

Google Cloud Service

Policy Controllerを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

セキュリティ・ID

比較で見る軸

クラウド: Google Cloud / カテゴリ: セキュリティ・ID / 難易度: intermediate

導入後に効く点

制約テンプレートと制約でルールを定義し、すぐ使える既製ポリシーの束も提供される。

先に潰すリスク

サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。

数字・仕様の読み方
クラウド
Google Cloud
カテゴリ
セキュリティ・ID
難易度
intermediate
関連資格
設計柱
security / operational

判断チェックリスト

  • 自社の用途が「セキュリティ・ID / security」に近いか確認する。
  • 強みである「OPA Gatekeeper を基盤に、Kubernetes リソースのデプロイ時にポリシー違反を弾くアドミッション制御の仕組み。」が本当に評価軸になるか確認する。
  • 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

セキュリティ・IDsecurityoperational