L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Déploiement et opérations · SKILL.md

performing-kubernetes-cis-benchmark-with-kube-bench

performing-kubernetes-cis-benchmark-with-kube-bench

使用 kube-bench 对照 CIS Benchmark 审计 Kubernetes 集群安全态势,对控制平面、工作节点和 RBAC 执行自动化检查。

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: performing-kubernetes-cis-benchmark-with-kube-bench description: 使用 kube-bench 对照 CIS Benchmark 审计 Kubernetes 集群安全态势,对控制平面、工作节点和 RBAC 执行自动化检查。 domain: cybersecurity subdomain: container-security tags: [kube-bench, cis-benchmark, kubernetes, compliance, hardening, aquasecurity] version: "1.0" author: mahipal license: Apache-2.0

使用 kube-bench 执行 Kubernetes CIS Benchmark

概述

kube-bench 是 Aqua Security 开源的 Go 工具,用于运行 CIS Kubernetes Benchmark 检查。它对照安全最佳实践验证控制平面、etcd、工作节点和策略配置,生成可操作的通过/失败/警告报告。

前置条件

  • Kubernetes 集群(v1.24+)
  • 具有 cluster-admin 访问权限的 kubectl
  • 直接运行需要节点访问权限,或具有特权 Pod 访问权限

安装

# 二进制安装
curl -L https://github.com/aquasecurity/kube-bench/releases/download/v0.7.3/kube-bench_0.7.3_linux_amd64.tar.gz | tar xz
sudo mv kube-bench /usr/local/bin/

# 以 Kubernetes Job 方式运行
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job.yaml
kubectl logs job/kube-bench

# 以具有宿主机访问权限的 Pod 运行
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job-master.yaml
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job-node.yaml

运行基准测试

完整基准测试

# 运行所有检查(自动检测节点类型)
kube-bench run

# 以 JSON 格式输出
kube-bench run --json > kube-bench-results.json

# 以 JUnit 格式输出用于 CI
kube-bench run --junit > kube-bench-results.xml

特定组件检查

# 控制平面(master)检查
kube-bench run --targets master

# 工作节点检查
kube-bench run --targets node

# etcd 检查
kube-bench run --targets etcd

# 策略检查
kube-bench run --targets policies

# 控制平面 + etcd
kube-bench run --targets master,etcd

托管 Kubernetes

# Amazon EKS
kube-bench run --benchmark eks-1.2.0

# Google GKE
kube-bench run --benchmark gke-1.4.0

# Azure AKS
kube-bench run --benchmark aks-1.0

# Red Hat OpenShift
kube-bench run --benchmark rh-1.0

过滤结果

# 仅显示失败项
kube-bench run --targets master | grep "\[FAIL\]"

# 运行特定检查
kube-bench run --check 1.2.1

# 运行检查组
kube-bench run --group 1.2

CIS Benchmark 章节

章节组件关键检查项
1.1控制平面 - API Server匿名认证、RBAC、审计日志
1.2控制平面 - API Server准入控制器、加密
1.3控制平面 - Controller Manager服务账户令牌、绑定地址
1.4控制平面 - Scheduler性能分析、绑定地址
2.1etcd客户端证书认证、对等加密
3.1控制平面 - 认证OIDC、客户端证书
4.1工作节点 - kubelet匿名认证、授权
4.2工作节点 - kubeletTLS、只读端口
5.1策略 - RBACcluster-admin 使用、服务账户
5.2策略 - Pod 安全特权、宿主机命名空间
5.3策略 - 网络每命名空间的网络策略
5.7策略 - 通用密钥、安全上下文

输出示例

[INFO] 1 控制平面安全配置
[INFO] 1.1 控制平面节点配置文件
[PASS] 1.1.1 确保 API server Pod 规格文件权限设置为 600
[PASS] 1.1.2 确保 API server Pod 规格文件所有权设置为 root:root
[FAIL] 1.1.3 确保 controller manager Pod 规格文件权限设置为 600
[WARN] 1.1.4 确保 scheduler Pod 规格文件权限设置为 600

== 汇总 ==
45 项检查通过
12 项检查失败
8 项检查警告
0 项检查信息

CI/CD 集成

GitHub Actions

name: CIS Benchmark
on:
  schedule:
    - cron: '0 6 * * 1'

jobs:
  kube-bench:
    runs-on: ubuntu-latest
    steps:
      - name: 配置 kubectl
        uses: azure/setup-kubectl@v3

      - name: 运行 kube-bench
        run: |
          kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job.yaml
          kubectl wait --for=condition=complete job/kube-bench --timeout=120s
          kubectl logs job/kube-bench > kube-bench-report.txt

      - name: 检查失败项
        run: |
          FAILS=$(grep -c "\[FAIL\]" kube-bench-report.txt || true)
          echo "Failed checks: $FAILS"
          if [ "$FAILS" -gt 0 ]; then
            echo "::warning::$FAILS CIS benchmark checks failed"
          fi

      - name: 上传报告
        uses: actions/upload-artifact@v4
        with:
          name: kube-bench-report
          path: kube-bench-report.txt

修复示例

1.2.1 - 确保 --anonymous-auth 设置为 false

# /etc/kubernetes/manifests/kube-apiserver.yaml
spec:
  containers:
  - command:
    - kube-apiserver
    - --anonymous-auth=false

4.2.1 - 确保 kubelet 上的 --anonymous-auth 设置为 false

# /var/lib/kubelet/config.yaml
authentication:
  anonymous:
    enabled: false
  webhook:
    enabled: true

5.2.1 - 最小化通配符 RBAC

# 查找具有通配符权限的角色
kubectl get clusterroles -o json | jq '.items[] | select(.rules[].resources[] == "*") | .metadata.name'

最佳实践

  1. 在集群配置前后运行 kube-bench
  2. 通过 CronJob 安排每周扫描,用于漂移检测
  3. 导出 JSON 用于 SIEM/合规报告
  4. 优先修复 FAIL 项,再处理 WARN 项
  5. 使用与 Kubernetes 发行版匹配的基准配置文件
  6. 跟踪评分变化趋势,衡量安全态势改进效果
  7. 结合准入控制器,防止配置漂移
Skills enregistrées