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のシグネチャ(署名) をチェックし、ダイジェストを追加する
 
