La interfaz está localizada; las descripciones y documentos de las Skills se traducen automáticamente con IA a su idioma. El código, los comandos, rutas y términos técnicos se mantienen en el original, y prevalece el documento del autor.
Explorar Skills
Despliegue y operaciones · 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

Documentación 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 guardadas