Kasten k10 云原生应用安全系列 03 – 利用 Kyverno 策略引擎实施和自动化 Kubernetes 数据保护策略

本文重点章节

  • 作者观察
  • Kasten 与 Kyverno
  • Kyerno + Kasten 数据保护策略快速上手
    • Kyerno 策略引擎介绍
    • Kyvero 的安装与部署
    • Kyvero 策略实践 - Kasten 数据保护的策略检查
  • Kasten 数据保护策略的说明
  • 关键要点总结
  • 参考文献

1.作者观察

随着云原生基础架构的普及,越来越多的企业开始把工作重点放在云原生的安全策略上。从 Redhat 公司 《2022 年 Kubernetes 安全现状报告》中,我们发现,受访者最担心由于容器和 Kubernetes 环境中的错误配置而导致的风险。应对这一挑战的最佳方法是尽可能自动化配置管理,以便用安全工具(而不是人工)提供帮助开发人员和 DevOps 团队更安全地配置容器和 Kubernetes 的护栏。

20220815134909

2022 State of Kubernetes security report
https://www.redhat.com/en/resources/state-kubernetes-security-report

在云原生数据方面,为了避免因错误配置,导致无法预估 RPO 和 RTO 而造成的数据丢失和业务停滞,很多企业正在考虑利用自动化数据安全管理策略,比如 Kyverno 或是 OPA, 本期我们主要来介绍如何利用 Kyverno 管理策略实现 Kasten 的数据保护的自动化。

2.Kasten 与 Kyverno

在 Kasten 5.0后 引入了大量的安全能力,其中也包含 Kyverno,这使得可客户可以检查备份策略是否满足 3-2-1-1-0 的数据管理黄金法则,保证企业达成勒索病毒防护与实现 RPO 的目标,实现数据保护的可观察性与可预测性。

20220815103929

3.Kyerno + Kasten 数据保护策略快速上手

3.1 Kyerno 策略引擎介绍

Kyverno 是为 Kubernetes 专门设计的策略引擎,目前 Nirmata 已经将其捐赠给 CNCF 。这个词本身来自于希腊语中“治理”的含义。使用 Kyverno,可以将Policy 即 “策略” 作为 Kubernetes 资源进行管理,它并不需要用其它的语言来进行编写。这允许管理员或 SRE 使用熟悉的工具,如 kubectl、git 和 kustomize 来管理这些策略。

在 Kubernetes 的准入机制中, Admission Controller 是非常重要的概念,除验证之外,还可以对集群资源进行更改以适配策略要求,熟悉 Kasten 的人可能都了解, Kasten Kanister Sidecar 就是以这种方式进行注入的。基于这个原理,Kyverno 策略可以 Validate 验证、Mutate 变异或适配和Generate 生成 Kubernetes 资源,除此之外,还包括镜像安全的校验等。Kyverno 使用标签选择器和通配符匹配资源,可以在在不同的namespace 中生成和同步默认设定,拦截或报告违规行为,可方便的使用 kubectl 进行测试。

3.2 Kyvero 的安装与部署

1. Kyvero 的安装

$ helm repo add kyverno https://kyverno.github.io/kyverno/
$ helm repo update
$ helm install kyverno kyverno/kyverno --namespace kyverno --create-namespace

2. 安装策略报告器 GUI:

$ helm repo add policy-reporter https://kyverno.github.io/policy-reporter
$ helm repo update
$ helm install policy-reporter policy-reporter/policy-reporter --set kyvernoPlugin.enabled=true --set ui.enabled=true --set ui.plugins.kyverno=true -n policy-reporter --create-namespace

3. 利用 NodePort 访问 Kyverno Report GUI:

$ kubectl expose service policy-reporter-ui -n policy-reporter --type=NodePort --name=policy-reporter-ui-nodeport

$ kubectl get svc -n policy-reporter |grep NodePort
policy-reporter-ui-nodeport      NodePort    10.109.70.159   <none>        8080:31176/TCP   29s

$ kubectl get node -o wide
NAME        STATUS   ROLES                  AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
mars-k8s1   Ready    control-plane,master   26h   v1.21.1   172.16.124.70   <none>        Ubuntu 20.04.2 LTS   5.15.0-46-generic   docker://20.10.17

4. 访问 Kyverno 仪表盘

基于上面的信息,我们来访问如下链接即可
http://172.16.124.70:31176/#/

20220815133556

3.2 Kyvero 策略实践 - Kasten 数据保护的策略检查

Kyverno 的策略引擎是符合 Kubernetes 原生的开发标准的,所以 Kyverno 策略编写很容易,只需要了解 Kubernetes API,即通过声明性 YAML 方式,即可完成对于策略的制定,这里是 Kasten 数据保护策略实现的概要:

  • 执行策略声明 - 对要部署的 Deployment 和 SatefulSet 强制实施此策略
  • 应用标签管理 - 在元数据标头中查找 purpose = production 的标签。
  • 数据保护策略 - 如应用匹配,则查找以值 “k10” 开头的 “数据保护”标签,支持正则表达式与通配符
  • 勒索病毒防护 - 查找是否存在不可变的备份存储库。
$ vim prod-backup-enforce-policy.yaml

# Kyverno Policy for Kasten Data Protection 
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
 name: prod-backup-enforce-policy
spec:
 validationFailureAction: enforce
 rules:
 - name: cd-prod-backup-policy
   match:
     resources:
       kinds:
       - Deployment
       - StatefulSet
   validate:
     message: "Production Deployments and StatefulSets must have Data Protection Policies with
Immutability Enabled (use labels: dataprotection: k10-<policyname> and immutable: enabled)"
     pattern:
       metadata:
         labels:
           =(purpose): production
           dataprotection: k10-?*
           immutable: enabled

$ kubectl apply -f prod-backup-enforce-policy.yaml 
clusterpolicy.kyverno.io/prod-backup-enforce-policy created

在策略生效后,如果开发人员尝试在没有这些标签的情况下部署Deployment 或是 StatefulSet ,系统将立即显示带有可自定义消息的反馈:

$ kubectl create ns demo-app
namespace/demo-app created
$ kubectl apply -f demo-app.yaml -n demo-app
persistentvolumeclaim/demo-pvc created

Error from server: error when creating "demo-app.yaml": admission webhook "validate.kyverno.svc-fail" denied the request: 

resource Deployment/demo-app/demo-app was blocked due to the following policies

prod-backup-enforce-policy:
  cd-prod-backup-policy: 'validation error: Production Deployments and StatefulSets
    must have Data Protection Policies with Immutability Enabled (use labels: dataprotection:
    k10-<policyname> and immutable: enabled). Rule cd-prod-backup-policy failed at
    path /metadata/labels/dataprotection/'

测试:依照策略在部署的文件中加入 Label

vim demo-app.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-app
  labels:
    app: demo
    purpose: production
    dataprotection: k10-policy-enforce-backup
    immutable: enabled
spec:
<truncated...>

$ kubectl apply -f demo-app.yaml -n demo-app
persistentvolumeclaim/demo-pvc unchanged
deployment.apps/demo-app created

结果:顺利完成部署

说明:可以看到应用已经部署到 Kubernetes Cluster,而且从 Kyverno 的仪表盘中也可以看到 Passing Policy Result per Namespace 中 已经有我们刚刚部署的 demo-app 存在了。

20220815132205

4. Kasten 数据保护策略的说明

当然,为了能让客户能够更方便的使用 Kyerno 策略引擎达成云原生数据保护的目标,Kasten by Veeam 还编写了很多数据保护策略,这些策略可以集成到基础架构即代码的日常 DevOps 工作中,为此类问题提供 “护栏” ,从根本上防止配置错误的应用投入生产环境的。

  • 检查 3-2-1 备份策略
    3-2-1 规则建议您至少有 3 个数据副本,位于 2 个不同的存储目标,1 个在异地。确保在多区域的云发生故障时,应用程序及数据可恢复。

  • 检查防勒索病毒存储库的启用
    K10 对象存储存储,支持对象锁定功能的 AWS S3 或 S3 兼容对象存储,可以达成不可变备份。由于保留存储的成本增加,默认情况下通常不启用不变性。此策略检查配置文件是否包含“protectionPeriod”,这是不变性的主要配置。

  • 按标签检查数据保护
    检查 Deployment 和 StatefulSet 具有命名 K10 策略的 “K10-dataprotection” 标签。与 “generate” ClusterPolicy 结合使用以按名称生成特定的 K10 数据保护策略。

  • 检查每小时 RPO
    可以让 K10 的策略资源遵守恢复点目标 (RPO) 最佳实践,此策略建议使用具有每小时粒度的 RPO 频率(如果它具有 appPriority: Mission Critical)

  • 生成黄金备份策略
    为添加标签 “dataprotection:k10-goldpolicy” 的任何 Deployment 或 StatefulSet 生成备份策略,此策略最适合确定数据保护目标,并通过应用程序标签简单地分配备份。

  • 最小备份合规策略
    可以验证 K10 政策资源是否符合通用的合规性保留标准。根据 GFS 保留取消注释您要强制执行的法规/合规标准。此策略删除备份操作中的保留值并将其替换为指定的保留。

Kyerno 策略引擎在 Kasten 的应用
https://kyverno.io/policies/?policytypes=Kasten%2520K10%2520by%2520Veeam

5. 关键要点总结 - Key take Way point

Kubernetes 正在为企业提供前所未有的多云战略,现已逐渐成为企业基础架构的核心。由于数据是所有企业应用程序的基本要素,如果没有有效的数据管理策略,企业的数据安全将面临前所未有的挑战。

通过启用在 Kasten 在 Kyverno 策略引擎框架上的数据保护策略,可以为配置错误、保护不当等的问题提供“护栏“,在根本上防止错误配置的应用程序投入到生产环境,从而使企业达成行业合规要求。

关键要点 Key take Way point
Kyvero + Kasten 可以

  1. 解决没有数据保护的配置错误
  2. 将保护策略的实施与验证自动化
  3. 使企业自动化、可视化的达成行业合规要求

6. 参考文献

Kasten 官方文档
https://docs.kasten.io/
Kasten 实战系列文章
https://www.data2clouds.com/?p=118
Kasten 数据保护策略 on Kyverno
https://kyverno.io/policies/?policytypes=Kasten%2520K10%2520by%2520Veeam
Kyverno 官网
https://kyverno.io
Kyverno 官方文档
https://kyverno.io/docs/

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注