# Kubernetes Kyverno

{{#include ../../../banners/hacktricks-training.md}}

**このページの元の著者は** [**Guillaume**](https://www.linkedin.com/in/guillaume-chapela-ab4b9a196)

## 定義

Kyvernoは、Kubernetesのためのオープンソースのポリシー管理フレームワークであり、組織がKubernetesインフラ全体にわたってポリシーを定義、施行、監査することを可能にします。これは、Kubernetesクラスターのセキュリティ、コンプライアンス、およびガバナンスを管理するためのスケーラブルで拡張可能、かつ非常にカスタマイズ可能なソリューションを提供します。

## ユースケース

Kyvernoは、さまざまなユースケースで使用できます。例えば：

1. **ネットワークポリシーの施行**: Kyvernoは、ポッドやサービス間のトラフィックを許可またはブロックするなどのネットワークポリシーを施行するために使用できます。
2. **シークレット管理**: Kyvernoは、シークレットを特定の形式または場所に保存することを要求するなどのシークレット管理ポリシーを施行するために使用できます。
3. **アクセス制御**: Kyvernoは、特定のリソースにアクセスするためにユーザーが特定の役割や権限を持つことを要求するなどのアクセス制御ポリシーを施行するために使用できます。

## **例: ClusterPolicyとPolicy**

Kubernetesクラスターに複数のネームスペースがあり、`default`ネームスペース内のすべてのポッドに特定のラベルを持たせるポリシーを施行したいとしましょう。

**ClusterPolicy**

ClusterPolicyは、全体的なポリシーの意図を定義する高レベルのポリシーです。この場合、私たちのClusterPolicyは次のようになるかもしれません：
```yaml
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-label
spec:
rules:
- validate:
message: "Pods in the default namespace must have the label 'app: myapp'"
match:
any:
- resources:
kinds:
- Pod
namespaceSelector:
matchLabels:
namespace: default
- any:
- resources:
kinds:
- Pod
namespaceSelector:
matchLabels:
namespace: default
validationFailureAction: enforce
```
ポッドが `default` 名前空間で `app: myapp` ラベルなしに作成されると、Kyverno はリクエストをブロックし、ポッドがポリシー要件を満たしていないことを示すエラーメッセージを返します。

## 参考文献

* [https://kyverno.io/](https://kyverno.io/)



{{#include ../../../banners/hacktricks-training.md}}
