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.validationFailureAction
enforce
- 新規作成の場合は拒否する
audit
- 作成は拒否しない
ClusterPolicyReport
またはPolicyReport
を作成しポリシー違反を記録する
spec.background
- 当該
ClusterPolicy
またはPolicy
に関してポリシー違反をしていないかどうかを作成済みリソースに検証する - (
enforce
の場合でも) 作成済みリソースのポリシー違反はClusterPolicyReport
またはPolicyReport
を作成しポリシー違反を記録する
- 当該
- Patterns
spec.rules[*].va1lidate.pattern
spec.rules[*].va1lidate.anyPattern
- ルールの拒否
deny
validationFailureAction: enforce
を設定する必要があるdeny
ruleの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のシグネチャ(署名) をチェックし、ダイジェストを追加する