MicrosoftはAzure Policyに、Kubernetesネイティブの検証エンジンであるCEL(Common Expression Language)とVAP(Validating Admission Policy)を使ったポリシー評価機能を追加した。Azure Kubernetes Service(AKS)を含むKubernetesクラスタ向けのポリシー適用を、外部のWebhook呼び出しに頼らずAPIサーバー内部だけで完結できるようになる。

Admission Webhookの限界

これまでKubernetes上でガバナンスポリシーを強制する主流の方法は、OPA Gatekeeperなどが採用する「Admission Webhook」方式だった。APIサーバーはPodやDeploymentの作成・更新リクエストを受け取るたびに、外部のポリシーエンジンへHTTP経由で問い合わせ、許可・拒否を判定してもらう。この方式は柔軟な反面、次の課題を抱えていた。

  • レイテンシ: リクエストのたびにネットワーク越しの往復が発生する
  • 可用性リスク: Webhookサービス自体が単一障害点になりうる。ダウン時にfail-openにすればポリシーが素通りし、fail-closedにすればクラスタ操作全体が止まる
  • 運用の複雑さ: Webhookサーバーの可用性・スケーリング・証明書管理をクラスタ運用者が別途面倒を見る必要がある

CEL/VAPが変えること

CELはGoogleが開発した軽量な式言語で、Kubernetes APIサーバーに組み込まれている。これを使ってポリシーを記述する仕組みがValidating Admission Policy(VAP)で、Kubernetes 1.30でGA(安定版)となった。VAPを使えば、ポリシー評価ロジックそのものをAPIサーバー内部のCELエンジンが処理するため、外部Webhookへの呼び出しが不要になる。

今回のアップデートで、Azure PolicyはこのVAP/CELをネイティブにサポートした。Azure Policyの管理画面・コンプライアンスダッシュボード・Azure Policy定義言語といった使い慣れたガバナンスの枠組みはそのままに、内部的な評価エンジンとしてCEL/VAPを選べるようになる。既存のRegoベース(OPA Gatekeeper)ポリシーとの併用も可能なため、既存のポリシー資産を捨てずに段階的に移行できる点も実務上重要だ。

実務への影響

AKSクラスタを運用する日本のエンジニア・IT管理者にとって、この変更は次のような意味を持つ。

  • 移行は急ぐ必要はないが、新規ポリシーはCEL/VAPを優先検討する価値がある。外部Webhookが不要になる分、ポリシー評価の遅延とWebhookサーバーの障害点を同時に減らせる
  • Gatekeeperを使い続けている環境でも共存できる。既存のConstraintTemplateをすべて書き換える必要はなく、新規ポリシーや高頻度で評価されるポリシーからCEL/VAPへ切り替えるといった段階的な移行がしやすい
  • 監査ログとコンプライアンスレポートはAzure Policy側に統一される。評価エンジンが変わってもガバナンスの可視化はAzure Policyのダッシュボードに集約できるため、マルチクラスタ運用でも管理の一貫性を保ちやすい

筆者の見解

AzureのKubernetesガバナンスは、これまで「Azure Policyの管理面」と「Gatekeeperの評価エンジン(Rego)」という異なる技術を組み合わせて成立していた部分が大きかった。Regoは表現力が高い一方で学習コストが高く、外部Webhookという構成そのものが運用上の弱点になりやすかった。今回、KubernetesのGA機能であるCEL/VAPをAzure Policyがネイティブに取り込んだのは、部分最適な構成を積み上げるのではなく、Kubernetes標準の仕組みに正面から乗ることを選んだという意味で、素直に評価できる判断だ。「道のド真ん中を歩く」設計を評価する立場からすると、こういう地味だが土台を締め直すアップデートこそ長期的に効いてくる。

ただし、既存のGatekeeper環境を抱える企業にとっては、Rego資産の扱いや移行の順序をどう設計するかという新たな判断が増えることも事実だ。ここでMicrosoftに期待したいのは、単に「両方使えます」で終わらせず、どのポリシーから移行すべきかの指針や自動変換ツールまで踏み込んで用意すること。AKSのガバナンス基盤としての信頼は揺るがないからこそ、移行の実務までカバーしてくれれば、AKSを選ぶ理由がまた一つ増える。


出典: この記事は Introducing Kubernetes-Native Policy Validation with CEL and VAP in Azure Policy の内容をもとに、筆者の見解を加えて独自に執筆したものです。