Kyverno
About Kyverno
- https://kyverno.io/docs/introduction/
- Kyverno はKubernetesのために設計されたPolicy Engineです。
- Open Policy Agent(OPA) のRegoのように独自言語を覚える必要はなくCustomResourceDefinition(CRD)で定義を行うことができます
About Kyverno Policy
-
以下図は こちら から抜粋
-
Kyverno Policyは1つ以上のルールのコレクションです。
- 1つのルールは2つの宣言を持ちます
- Policy適用対象リソースの選択
- Policy適用
Kind of Policy
- Cluster wideに適用される
ClusterPolicyと namespace単位に適用されるPolicyがある
Kind of Resources
Select Resources
- Mutate/VerifyImages/Validate/Generate などのpolicyを適用する対象リソースを指定する
- 対象としたいリソースを
matchで、対象外としたいリソースをexcludeで指定する - any(
OR) もしくは all(AND)の条件下で resource filters を指定resources: select resources by names, namespaces, kinds, label selectors, annotations, and namespace selectors.subjects: select users, user groups, and service accountsroles: select namespaced rolesclusterRoles: select cluster wide roles
- 対象としたいリソースを
Mutate Resources
- ruleに応じてマニフェストを書き換える
- 書き換えたい内容は
RFC 6902 JSON Patch、a strategic merge patch、an overlay patternのいずれかで定義可能 - RFC 6902 JSON Patch
- Strategic Merge Patch
- an overlay pattern
- 書き換えたい内容は
Validate Resources
- これから適用するmanifests、または作成済みリソースに関してポリシー違反がないかどうかを検証する
spec.validationFailureActionenforce- 新規作成の場合は拒否する
audit- 作成は拒否しない
ClusterPolicyReportまたはPolicyReportを作成しポリシー違反を記録する
spec.background- 当該
ClusterPolicyまたはPolicyに関してポリシー違反をしていないかどうかを作成済みリソースに検証する - (
enforceの場合でも) 作成済みリソースのポリシー違反はClusterPolicyReportまたはPolicyReportを作成しポリシー違反を記録する
- 当該
- Patterns
spec.rules[*].va1lidate.patternspec.rules[*].va1lidate.anyPattern
- ルールの拒否
denyvalidationFailureAction: enforceを設定する必要があるdenyruleのexcludeで拒否させたくないsubjectsやroleを指定するなども可能
Generate Resources
- リソースの作成・更新に基づいて追加のリソースを作成する
- リソース作成方法
spec.rules.generate.clone- SecretやConfigMapなど既存リソースをコピーしたい場合
spec.rules.generate.data- rule manifestsに定義された新規作成したいリソース
Note
kyverno policy ruleによって作成されたリソースはマニフェスト管理されていません。
spec.rules.generate.synchronize=true の場合、必要な権限を持つユーザやServiceAccountなどから作成されたリソースが変更・削除されても元のリソース状態に戻すように更新・再作成してくれます。
VerifyImages Resources
- imageのシグネチャ(署名) をチェックし、ダイジェストを追加する
