Loading
BLOG 開発者ブログ

2023年12月17日

Kyvernoを用いたKubernetesセキュリティ対策

本記事では、Kubernetesにおけるセキュリティ監視とKyvernoについて紹介をし、Kyvernoのインストールと監視の設定をします。
セキュリティ対策って何?普通の監視と何が違うの?と疑問に感じた方は、ぜひ一読していただきたいです。

 

*目次*


 

1.はじめに

こんにちは。
プラットフォームソリューショングループのtakahashi.naokiです。
この記事は アイソルート Advent Calendar 2023 12日目の記事です。

普段はネットワークシステムの監視や検証、Tableauを用いたデータ分析を行っています。
当ブログでは2回目の記事になります。前回は「分析ツールのTableau」について紹介させていただきました。
今回はKyvernoを用いたKubernetesのセキュリティ対策について紹介いたします。

昨年末からKubernetes監視について業務上で検証する機会があり、特にKyvernoを利用した監視設定を任されておりました。
これまでKubernetesの監視については触れる機会がありましたが、セキュリティ対策については初めての経験でした。
そんなKyverno初心者だった私が、ポリシーを追加して監視できるようになるまでに得られた知識を元に
セキュリティ対策って何?Kyvernoって何が出来るの?といったノウハウを共有したいと思います。

 

(対象読者)
・Kyverno初心者
・Kubernetesについて基本的な知識をお持ちの方
・Kubernetesのセキュリティ対策に興味のある方
・Kyvernoの利用を考えている方


 

2.セキュリティ監視とKyvernoについて

①セキュリティ監視

Kubernetes監視では、クラスタやコンテナ、ポッド、アプリケーションなどを対象に正常性やパフォーマンスの確認を行っています。
しかし構成が複雑になるにつれて、誤設定などから大きな脆弱性につながる危険性があります。
セキュリティ監視は、このような危険性をあらかじめ排除するための設定及び監視を行います。

②Kyverno

Kyvernoとは、Kubernetes向けに作成されたポリシーエンジンです。
ポリシーとは、リソースを作成する際にあらかじめ設定できるルールのようなもので
例えば以下のようなことが出来ます。
・ポッドに特定のラベルを付与する必要がある
・リソース設定を追加する必要がある
・default以外のnamespaceを設定する必要がある

例えば、登録されたリポジトリからのみimageを取得できるポリシーを追加することで、安全性の確保できないimage取得を防いだり
特権コンテナの作成を禁止するポリシーを追加して、コンテナの権限をあらかじめ制限することが出来ます。
このようにKyvernoを利用することで制限を設け、事前に危険性の排除を可能にします。


 

3.本記事でやろうとしてること

Kubernetes環境にKyvernoをインストールし、ポリシーを追加します。
また追加したポリシーがどのように動作しているか確認します。
・前提条件
→Kubernetesクラスタが構築済みであること
→Kyvernoに対応したバージョンであること
→Prometheus、Grafanaが構築済みであること(監視まで行う場合)

Kyverno Version Kubernetes Min Kubernetes Max
1.6.x 1.16 1.23
1.7.x 1.21 1.23
1.8.x 1.23 1.25
1.9.x 1.24 1.26
1.10.x 1.24 1.26
1.11.x 1.25 1.28

・実施内容
①Kyvernoインストール
②ポリシー追加
③監視設定

 


 

4.ポリシー追加&監視設定解説

①Kyvernoのインストール

公式ページを参考に、Kyvernoのインストールを行います。

#リポジトリ登録
$helm repo add kyverno https://kyverno.github.io/kyverno/
#アップデート
$helm repo update
#インストール先を検索
$helm search repo kyverno -l
#インストール
$helm install kyverno-policies kyverno/kyverno-policies -n kyverno
#デフォルトのポリシー追加確認
$kubectl get cpol


インストールが完了すると、デフォルトのポリシー一覧を確認することが出来ます。

・BACKGROUND:バックグラウンドスキャン中に既存のリソースにルールを適用するかどうかを制御。デフォルトは、true

・ACTION:ポリシー違反時の処理。audit と enforce を選ぶことが可能

→enforfce:ポリシー違反の場合、新規リソースの場合は、そのリソースは作成されない

→audit:ポリシー違反の場合、ClusterPolicyReport または、PolicyReport というリソースが作成される。ポリシー違反でもそのリソースは作成可能

ポリシーに関する説明はこちらから確認できます。

 

②ポリシー追加

今回はポッドのリソース制限違反を検知するポリシーを作成します。
公式ページにサンプルのポリシー設定が紹介されているので、そちらを利用します。
require-requests-limits.yaml

・ポリシーデプロイ
作成したポリシーをKubernetesにデプロイします。

$kubectl apply -f require-requests-limits.yaml -n kyverno

require-requests-limitsのポリシーが追加されたことが確認できました

・ポリシー機能の確認
追加したポリシーが正しく機能しているか確認します。

#require-requests-limitsが検知した数を確認
$kubectl get policyreport -A

require-requests-limitsが検知したeventの詳細を確認
$kubectl get event | grep require-requests-limits


リソース制限のポリシーが機能して、違反を検知できることが確認できました。
今回のポリシーはauditで作成しているため、リソース作成が許可されています。
リソース作成を拒否する場合は、enforfceで作成することで新規作成を拒否することが出来ます。

③監視設定

Prometheus Metricsのエンドポイントを公開しておりGrafanaで監視する
Grafana監視追加設定
公式のGrafanaでは追加したポリシー数や、ポリシーの成功割合などを確認することが出来ます。


こちらのグラフでは作成されたリソースについて、実行内容やオブジェクトの種類ごとにリクエスト数などを観測できます。
また監視したい項目に合わせて、カスタマイズも可能になっています。


 

5.まとめ

今回はKubernetesのセキュリティ対策として、Kyvernoについて紹介させていただきました。
リソース制限についてポリシーを設定しましたが、複数のポリシーを追加することが出来るのでぜひ試してみてください。
またサンプルのポリシーが公式で公開されているので、探してみてはいかがでしょうか?

ただ公式のGrafanaだけでは、十分に監視することはできません。
例えば違反数などを監視することはできましたが、違反したポッドの詳細まで見ることはできません。
実はexporterを追加することで細かく監視することが可能になっているので、次回の監視設定カスタマイズ編で紹介したいと思います。

takahashinのブログ