KubernetesネイティブなポリシーエンジンKyverno

2021年5月21日(金)
松下 康之 - Yasuyuki Matsushita
OPAと比較すると、よりKubernetesネイティブな実装のポリシーエンジンであるKyvernoを紹介する。

Kubernetesがプラットフォームとして高く評価されている理由の一つに、宣言的な発想でシステムが自律的に運用されていくスタイルがあると言えるだろう。しかし仮想マシンの上でモノリシックなアプリケーションを運用するスタイルではなく、APIを主体にしたサービスが連携して稼働するシステムでは、セキュリティについても新しい発想が必要だ。今回はKubernetesのAdmission Controllerとして実装されるポリシーエンジンKyvernoを紹介したい。

Kyvernoは、2020年12月にCNCFのサンドボックスプロジェクトとしてホストされることになったソフトウェアだ。これまでの汎用的に使えるセキュリティソフトウェアとは異なり、最初からKubernetesネイティブの実装となっていることが特徴だ。Kyvernoがサンドボックスプロジェクトとして採用されたことは、CNCFのブログでも紹介されているが、この記事を書いたのはKyvernoの開発をリードするNirmataの創業者兼CEOのJim Bugwadia氏だ。

CNCFのブログ:Kyverno for Kubernetes!

このブログの中でBugwadia氏は、Kubernetesが宣言的かつ自律的なシステムであることを紹介し、同時に構成管理の面からKubernetesが複雑になってしまっていることを解説している。その複雑さを解消するために、ポリシーを使って組織の設定したセキュリティコンプライアンスや法律が求めるセキュリティを実装し、自動化することが有効であると語っている。

「The solution to this challenge is to use policies to validate configurations for best practices and security compliance, and also automatically modify and generate additional configurations when needed.」

KubernetesはAPI Serverを中心にして、ワーカーがetcdに保存された状態通りにシステムを運用しようとする自律的なシステムで、定義されたnamespaceによってアプリケーションが区別されるという仕組みを持つ。この従来のシステムとは異なる「宣言的」という発想を理解してシステムを開発運用できるようになるのは困難であり、このような面が「Kubernetesは学習コストが高い」と言われる一因でもある。

またその仕組みを理解して運用を始めてから従来の仕組みと組み合わせるのは、かえって運用コストが高くついてしまう。そのため最近ではKubernetesのコアを活用し、Kubernetes専用という形でソフトウェアを開発しているコミュニティも散見されるようになった。

Kubernetesに寄せたシステムの一例としては、KubernetesのAPIを拡張してマルチクラウドを実装するCrossplaneが挙げられるだろう。

参考:マルチクラウドを制御するユニバーサルなコントロールプレーンCrossplane

Crossplane

またVMwareがコンテナオーケストレーションプラットフォームとして開発を進めるTanzuの中に、Pinnipedというソフトウェアがあるが、このPinnipedもKubernetesに特化したID管理システムを接続するためのソフトウェアで、外部のIdP(Identity Provider)とKubernetesをシームレスに接続することを目指している。

Pinniped:Now With Even More Pinnipeds

また自律的に修復を目指すシステムは、意図的にシステムを壊すことで修復力を高めるカオスエンジニアリングとも親和性が高い。CNCFのサンドボックスプロジェクトにLitmusChaosやChaos Meshが存在するのもその親和性が理由だろう。

前置きが非常に長くなって恐縮だが、今回はKubernetesにネイティブで実装されたKyvernoを、2020年5月21日にCNCFのWebinarとして公開された動画から紹介する。

CNCFのWebinar:Webinar: How to keep your clusters safe and healthy

プレゼンテーションを行うNirmataのCEO、Jim Bugwadia氏

プレゼンテーションを行うNirmataのCEO、Jim Bugwadia氏

Kyvernoは公式サイトに記載されている通り、KubernetesのAdmission Controllerとして実装されている。そのため、他のポリシーエージェント、例えばOpen Policy Agent(OPA)とは異なり、Kubernetes上にのみ実装できる。またルールなどはYAMLファイルによるリソースとして定義されるため、OPAが採用しているRegoのような新しい言語を習得する必要がないということは強調されている。

公式サイト:Kyverno

最初にKubernetesを利用する際に生じる4つの問題点を挙げて、それに対する解決策をデモを交えて紹介するというやり方で解説を行った。

4つの問題を挙げて解説

4つの問題を挙げて解説

最初の問題点はKubernetesの構成が複雑で、結果的に構成ミスを起こしてしまうというものだ。

Kubernetesの構成は複雑で管理が難しい

Kubernetesの構成は複雑で管理が難しい

Kubernetesの過去のバージョンでは、ユーザーが特権を取得できてしまう脆弱性が報告されていた。デフォルトの設定のままで運用している組織は、意外と多いのではないだろうか。

Kubernetesの脆弱性に関する記事:Kubernetes' first major security hole discovered

そしていくつかの利用例を示して、ポリシーがKubernetesの複雑さを解消していくのか? を解説する流れになった。

利用例を示して解説を行うBugwadia氏

利用例を示して解説を行うBugwadia氏

解決策はポリシーマネージメント?

解決策はポリシーマネージメント?

次のスライドでは解決策はポリシーマネージメントであると語ったが、最後に「?」が付いているのは、実際にAPI Serverに対応したポリシーマネージメントをAdmission Controllerに実装するのは難しいということを意味しているのだろう。

そこでNirmataが開発するKyvernoの登場となる。

Kyvernoとは?

Kyvernoとは?

Kyvernoは、Kubernetesに特化したポリシーマネージメントエンジンである。Kubernetesのリソースモデルをそのまま使っているというのが「ネイティブ」という意味だ。ここでは「Kyverno」という単語の意味が、ギリシャ語で「Govern(統制)」であることを紹介している。

Kyvernoのアーキテクチャー

Kyvernoのアーキテクチャー

このスライドでは、KyvernoがAPI Serverと通信してKubernetesの中の動作をポリシーに合わせてチェックするソフトウェアであることが解説されている。この構造はOPA Gatekeeperと同じだ。OPAとの差は、ポリシーを記述するルールの部分に集約される。

Kyvernoのポリシーの構造

Kyvernoのポリシーの構造

ルールの中ではマッチさせる条件と除外する条件のいずれかを設定し、その結果として「Mutate」「Validate」「Generete」という3つの動作を選択するというシンプルな形式だ。

次のスライドでは、サンプルとしてroot特権で実行させないという設定を説明している。

root特権で実行を禁止するというポリシー(ルール)の例

root特権で実行を禁止するというポリシー(ルール)の例

Validateの例としてパターンマッチや>、<、=などの演算子が使えることを解説している。

Validateを行う例の解説

Validateを行う例の解説

そしてOPAとの差異が、そのルールの書き方にあることが何度も強調された。左側のOPAのRegoによる記述とKyvernoのYAMLファイルによる記述が「手続的」と「宣言的」の比較になっているように見えるのは勘ぐり過ぎだろうか。

OPAのRegoとKyvernoのYAMLの記述の違いを解説

OPAのRegoとKyvernoのYAMLの記述の違いを解説

ここからはNirmataのエンジニア、Shuting Zhao氏のデモを交えてのセッションとなった。

構成のValidationを行うデモを開始

構成のValidationを行うデモを開始

Zhao氏はKubernetesのバージョン1.22で廃止される予定のPod Security Policies(PSP)について解説を行った。より詳しくは以下のブログが参考になるだろう。

Pod Security Policiesの問題点

Pod Security Policiesの問題点

参考:Pod Security Policies Are Being Deprecated in Kubernetes

著者は、SnowflakeのセキュリティアーキテクトであるMark Manning氏だ。

次のスライドではPSPに置き換わるStandardized Pod Security Profileに関してBugwadia氏が解説を行った。

新しいPodセキュリティの解説

新しいPodセキュリティの解説

構成の検証は、いかにもルールの適用例としてはわかりやすいが、次のデモではPodに対して書いたルールからより抽象化したPod Controller向けのルールを生成するAutogen-Ruleの説明を行った。これはルールの適用範囲を拡げる機能として注目すべきだろう。

自動的にルールを生成する機能を解説

自動的にルールを生成する機能を解説

この機能については、以下のドキュメントサイトに詳細に解説されている。

参考:Auto-Gen Rules for Pod Controllers

ここからは新しいリソースが生成された際にデフォルトで設定されるべきセキュリティを適用させる機能や、リソースへのアクセスコントロールをより細かく行うための機能などが解説された。

Kyvernoを紹介するこのセッションのトピックとして、「ポリシーがKubernetesのセキュリティにはマッチしていること」「Kubernetesに特化したポリシーエンジンであること」「KubernetesのYAMLマニフェストに近い形式で設定可能で、OPAのRego比べると学習コストが低い」ことなどをまとめて紹介した。

セッションのまとめ

セッションのまとめ

このセッションは2020年5月のものだが、2021年2月4日に公開された動画でも同様の解説とデモを行っている。

最新のCNCFのWebinar:This Week in Cloud Native: Kubernetes Native Policy As Code

ここで興味深いのは、CI/CDのツールであるFlux 2のマルチテナンシーの実装の中でKyvernoが使われていることが紹介されていることだろう(Flux 2はCNCFのサンドボックスプロジェクト)。

Flux 2のマルチテナンシーの実装にも使われているKyverno

Flux 2のマルチテナンシーの実装にも使われているKyverno

オープンソースのポリシーエンジンとしてOPAが注目されているが、Kyvernoの今後の動向にも注目していきたい。

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載バックナンバー

サーバー技術解説

Tigeraのアドボケイトが、x86とARMのマルチアーキテクチャークラスターを解説

2022/4/7
ARMの優位性を解説しながら、ARMをx86クラスターに追加するマルチアーキテクチャークラスターを、デモを用いて解説。
システム開発イベント

KubeCon NA 2021からサービスメッシュの2セッションを紹介

2022/3/18
KubeCon NA 2021からサービスメッシュのLinkerdの最新情報とIstioを使ったユースケースのセッションを紹介する。
セキュリティイベント

KubeCon NA 2021、ソフトウェア開発工程のタンパリングを防ぐSLSAを解説

2022/3/9
KubeCon NA 2021のプレカンファレンスから、ソフトウェアサプライチェーンを実装するフレームワークSLSAを取り上げたセッションを紹介する。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています