kube-bench与Kubernetes自定义资源:扩展检测规则存储方案

【免费下载链接】kube-bench Checks whether Kubernetes is deployed according to security best practices as defined in the CIS Kubernetes Benchmark 【免费下载链接】kube-bench 项目地址: https://gitcode.com/gh_mirrors/ku/kube-bench

你是否在管理Kubernetes集群时遇到过安全检测规则难以维护的问题?随着集群规模扩大和自定义需求增加,传统的静态配置文件管理方式越来越难以应对。本文将介绍如何利用Kubernetes自定义资源(Custom Resource,CR)扩展kube-bench的检测规则存储方案,实现规则的动态管理与版本控制。读完本文,你将能够:

  • 理解kube-bench现有规则存储机制的局限性
  • 掌握使用CRD定义自定义检测规则的方法
  • 实现基于GitOps的规则管理流程
  • 通过实例演示如何部署和应用自定义规则

现有规则存储机制分析

kube-bench默认使用文件系统中的YAML文件存储检测规则,这些规则文件位于cfg/目录下,按不同基准版本和平台组织。例如CIS基准1.24版本的规则位于cfg/cis-1.24/目录,包含master.yaml、node.yaml等文件。

这种文件存储方式存在以下局限:

  • 版本控制困难:规则更新需要修改本地文件并重新部署kube-bench
  • 动态调整受限:无法在运行时添加或禁用特定规则
  • 多集群同步复杂:跨集群统一规则配置需手动复制文件
  • 权限管理缺失:无法基于Kubernetes RBAC控制规则访问权限

规则文件的基本结构如下(摘自docs/controls.md):

controls:
id: 1
text: "Master Node Security Configuration"
type: "master"
groups:
- id: 1.1
  text: API Server
  checks:
    - id: 1.1.1
      text: "Ensure that the --allow-privileged argument is set (Scored)"
      audit: "ps -ef | grep kube-apiserver | grep -v grep"
      tests:
      bin_op: or
      test_items:
      - flag: "--allow-privileged"
        set: true
      remediation: "Edit the API server pod specification file"
      scored: true

自定义资源方案设计

CRD定义与结构

为了将检测规则迁移到Kubernetes资源中,我们首先需要定义CustomResourceDefinition(CRD)。以下是一个基本的检测规则CRD定义:

apiVersion: crd.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: securitycontrols.kube-bench.ku
spec:
  group: kube-bench.ku
  versions:
    - name: v1alpha1
      served: true
      storage: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                id:
                  type: string
                text:
                  type: string
                type:
                  type: string
                  enum: [master, node, controlplane, etcd, policies]
                groups:
                  type: array
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                      text:
                        type: string
                      checks:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                            text:
                              type: string
                            audit:
                              type: string
                            tests:
                              type: object
                            remediation:
                              type: string
                            scored:
                              type: boolean

数据流转架构

kube-bench架构

新的架构在原有基础上增加了以下组件:

  1. CRD控制器:监控SecurityControl资源变化并同步到本地缓存
  2. 规则转换器:将CR格式转换为kube-bench兼容的YAML结构
  3. GitOps同步器:实现CR与Git仓库的双向同步

数据流转流程如下:

  1. 管理员通过kubectl或GitOps工具提交SecurityControl资源
  2. CRD控制器检测到资源变化并更新本地规则缓存
  3. kube-bench运行时从缓存加载规则并执行检测
  4. 检测结果存储到ConfigMap或发送到外部监控系统

实现步骤

1. 部署CRD与控制器

首先部署自定义资源定义:

kubectl apply -f config/crd/bases/kube-bench.ku_securitycontrols.yaml

然后部署规则控制器:

kubectl apply -k deploy/

控制器部署文件位于deploy/目录,包含Deployment、ServiceAccount及RBAC权限配置。

2. 定义自定义规则

创建一个自定义规则示例,保存为custom-rule.yaml

apiVersion: kube-bench.ku/v1alpha1
kind: SecurityControl
metadata:
  name: custom-api-server-checks
spec:
  id: "99"
  text: "Custom API Server Security Checks"
  type: "master"
  groups:
    - id: "99.1"
      text: "Custom API Server Settings"
      checks:
        - id: "99.1.1"
          text: "Ensure custom-header is set"
          audit: "ps -ef | grep kube-apiserver | grep -v grep"
          tests:
            test_items:
              - flag: "--requestheader-allowed-names"
                set: true
          remediation: "Edit the API server manifest to add --requestheader-allowed-names=system:masters"
          scored: true

应用该规则:

kubectl apply -f custom-rule.yaml

3. 配置kube-bench使用CR规则

修改kube-bench配置文件cfg/config.yaml,添加CR规则源:

ruleSources:
  - file: true
  - crd: true
    crdGroup: kube-bench.ku
    crdVersion: v1alpha1
    crdKind: SecurityControl

4. 验证自定义规则生效

运行kube-bench并指定使用自定义规则:

kube-bench --benchmark custom --rules custom-api-server-checks

查看输出结果,确认自定义规则已被执行。

高级应用:GitOps集成

为实现规则的版本控制和多集群同步,我们可以结合GitOps工具如Flux或Argo CD。以下是使用Flux的配置示例:

apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: GitRepository
metadata:
  name: kube-bench-rules
  namespace: flux-system
spec:
  interval: 5m
  url: https://gitcode.com/gh_mirrors/ku/kube-bench-rules
  ref:
    branch: main
---
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
kind: Kustomization
metadata:
  name: kube-bench-rules
  namespace: flux-system
spec:
  interval: 10m
  prune: true
  sourceRef:
    kind: GitRepository
    name: kube-bench-rules
  path: ./rules/production

规则仓库结构应遵循以下组织方式:

rules/
  production/
    api-server/
    controller-manager/
  staging/
    ...
  base/
    ...

这种结构允许不同环境使用不同的规则集,通过Kustomize进行规则组合。

性能与安全考量

规则缓存机制

控制器会将CR规则缓存到本地文件系统,默认路径为/var/cache/kube-bench/rules,缓存刷新间隔可通过--cache-refresh-interval参数调整。

权限控制

为确保规则安全,应通过RBAC限制对SecurityControl资源的访问:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: securitycontrol-editor
rules:
  - apiGroups: ["kube-bench.ku"]
    resources: ["securitycontrols"]
    verbs: ["get", "list", "watch", "create", "update", "patch"]

规则验证

为防止无效规则被应用,建议使用Open Policy Agent对规则进行验证:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sAllowedSecurityControl
metadata:
  name: valid-security-controls
spec:
  match:
    kinds:
      - apiGroups: ["kube-bench.ku"]
        kinds: ["SecurityControl"]
  parameters:
    allowedIds:
      - prefix: "99."

总结与展望

通过Kubernetes自定义资源扩展kube-bench的检测规则存储方案,我们解决了传统文件系统存储方式的诸多局限,实现了规则的动态管理、版本控制和多集群同步。这一方案特别适合大型企业环境和需要频繁定制安全规则的场景。

未来发展方向包括:

  1. 规则模板系统:提供预定义规则模板库
  2. 规则评估仪表板:可视化展示规则覆盖率和集群合规状态
  3. AI辅助规则生成:基于集群配置自动推荐安全规则

官方文档:docs/ 规则定义参考:docs/controls.md 配置示例:hack/

【免费下载链接】kube-bench Checks whether Kubernetes is deployed according to security best practices as defined in the CIS Kubernetes Benchmark 【免费下载链接】kube-bench 项目地址: https://gitcode.com/gh_mirrors/ku/kube-bench

更多推荐