| 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/
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job.yaml
kubectl logs job/kube-bench
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
kube-bench run --json > kube-bench-results.json
kube-bench run --junit > kube-bench-results.xml
特定组件检查
kube-bench run --targets master
kube-bench run --targets node
kube-bench run --targets etcd
kube-bench run --targets policies
kube-bench run --targets master,etcd
托管 Kubernetes
kube-bench run --benchmark eks-1.2.0
kube-bench run --benchmark gke-1.4.0
kube-bench run --benchmark aks-1.0
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.1 | etcd | 客户端证书认证、对等加密 |
| 3.1 | 控制平面 - 认证 | OIDC、客户端证书 |
| 4.1 | 工作节点 - kubelet | 匿名认证、授权 |
| 4.2 | 工作节点 - kubelet | TLS、只读端口 |
| 5.1 | 策略 - RBAC | cluster-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
spec:
containers:
- command:
- kube-apiserver
- --anonymous-auth=false
4.2.1 - 确保 kubelet 上的 --anonymous-auth 设置为 false
authentication:
anonymous:
enabled: false
webhook:
enabled: true
5.2.1 - 最小化通配符 RBAC
kubectl get clusterroles -o json | jq '.items[] | select(.rules[].resources[] == "*") | .metadata.name'
最佳实践
- 在集群配置前后运行 kube-bench
- 通过 CronJob 安排每周扫描,用于漂移检测
- 导出 JSON 用于 SIEM/合规报告
- 优先修复 FAIL 项,再处理 WARN 项
- 使用与 Kubernetes 发行版匹配的基准配置文件
- 跟踪评分变化趋势,衡量安全态势改进效果
- 结合准入控制器,防止配置漂移