使用 kube-bench 对 Kubernetes 进行基准测试 是做什么的?
概述
kube-bench(由 Aqua Security 开发)是一个开源工具,通过运行 CIS Kubernetes 基准测试 中记录的检查,来验证 Kubernetes 集群是否安全部署。它审查控制平面组件(API 服务器、控制器管理器、调度器、etcd)、kubelet 和工作节点配置,以及集群范围的策略设置,然后根据 CIS 指南为每个检查报告 PASS、FAIL、WARN 或 INFO 状态,并附带修复建议。测试由配置驱动的 YAML 文件驱动,因此 kube-bench 能够跟踪新的 Kubernetes 版本和基准测试修订,并支持托管发行版(EKS、GKE、AKS、ACK、OpenShift、RKE、k3s)。
根据 CIS 基准测试加固集群可直接减少 T1610(容器部署) 的攻击面,在此攻击中,敌手部署容器以执行代码或规避防御——例如,利用未加固集群暴露的特权容器、主机命名空间、匿名 API 访问或不安全的 kubelet 设置。
kube-bench 可以作为独立二进制在节点上运行、在容器内运行,或者最常用的是作为 Kubernetes Job 运行,其 Pod 挂载了主机文件系统,以便读取相关配置文件。输出格式支持人类可读文本、JSON、JUnit 或 AWS 安全发现格式(ASFF),并可以推送到 PostgreSQL 数据库以进行趋势跟踪。
何时使用
- 为新 Kubernetes 集群根据 CIS Kubernetes 基准测试建立安全基线时。
- 定期对控制平面和节点加固进行合规审计时。
- 在应用加固更改后验证修复效果时(重新运行以确认检查现在 PASS)。
- 将集群合规扫描集成到 CI/CD 或持续监控管道时。
- 为 SOC 2、PCI DSS 或内部加固合规准备证据时。
前提条件
- 对集群的访问权限:要么有对控制平面/工作节点的 SSH 访问(二进制模式),要么有具备创建 Job 权限的
kubectl(集群内模式)。 - 了解集群的 Kubernetes 版本(kube-bench 会自动检测,或使用
--version/--benchmark指定)。 - 安装 kube-bench(Aqua Security 官方方法):
# 二进制发布版(Linux)
KB_VERSION=0.10.7
curl -L -o kube-bench.tgz \
"https://github.com/aquasecurity/kube-bench/releases/download/v${KB_VERSION}/kube-bench_${KB_VERSION}_linux_amd64.tar.gz"
tar -xzf kube-bench.tgz
sudo mv kube-bench /usr/local/bin/
sudo cp -R cfg /etc/kube-bench/cfg
# 通过 Go 安装
go install github.com/aquasecurity/kube-bench@latest
# 直接在节点上作为一次性容器运行(挂载主机配置)
docker run --rm --pid=host \
-v /etc:/etc:ro -v /var:/var:ro \
-t docker.io/aquasec/kube-bench:latest run --targets node
# 验证
kube-bench version
目标
- 根据集群的 Kubernetes 版本运行适当的基准测试。
- 扫描控制平面(master)、节点、etcd、控制平面策略以及托管服务目标。
- 生成机器可读的 JSON/JUnit 输出,用于管道和仪表板。
- 分类处理 FAIL 和 WARN 结果,并应用 CIS 修复指南。
- 重新运行以验证修复后结果为 PASS。
MITRE ATT&CK 映射
| 技术 ID | 名称 | 战术 | 相关性 |
|---|---|---|---|
| T1610 | 部署容器 | 执行 / 防御规避 | kube-bench 强制执行的 CIS 基准测试加固限制了特权/主机命名空间部署、匿名 API 访问和不安全的 kubelet 设置,这些正是攻击者在部署恶意容器时滥用的问题。 |
工作流
1. 运行默认扫描(自动检测)
运行所有适用的目标,让 kube-bench 检测 Kubernetes 版本和基准测试:
sudo kube-bench
2. 作为 Kubernetes Job 运行(集群内)
从 kube-bench 仓库应用提供的 Job 清单,并从 Pod 日志读取结果:
# 通用 Job
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job.yaml
# 等待,然后检索结果
kubectl get pods -l app=kube-bench
kubectl logs -l app=kube-bench
# 平台特定的 Job 也可用,例如 EKS:
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job-eks.yaml
3. 针对特定组件
使用 run --targets 将扫描范围限定到特定组件组:
# 控制平面(API 服务器、调度器、控制器管理器)
sudo kube-bench run --targets master
# 工作节点(kubelet、代理)
sudo kube-bench run --targets node
# etcd 数据存储
sudo kube-bench run --targets etcd
# 集群范围策略(RBAC、Pod 安全、网络策略)
sudo kube-bench run --targets policies
# 组合多个目标
sudo kube-bench run --targets master,node,etcd,policies
4. 固定特定基准测试或 Kubernetes 版本
当自动检测错误或必须针对特定修订版进行审计时,显式固定基准测试:
# 固定到特定 CIS 基准测试修订版
sudo kube-bench run --benchmark cis-1.8
# 或通过 Kubernetes 版本映射
sudo kube-bench --version 1.27
# 托管/发行版特定基准测试
sudo kube-bench run --benchmark eks-1.5.0
sudo kube-bench run --benchmark gke-1.6.0
sudo kube-bench run --benchmark rke2-cis-1.7
5. 运行或跳过单个检查
在修复周期中专注于或排除特定检查 ID:
# 仅运行特定检查
sudo kube-bench run --targets master --check 1.2.1,1.2.2
# 跳过嘈杂/已知接受的检查
sudo kube-bench run --targets node --skip 4.2.6
6. 生成机器可读输出
生成 JSON 或 JUnit 输出以导入管道、SIEM 或仪表板,并写入文件:
# JSON 到文件
sudo kube-bench run --targets master,node --json --outputfile kube-bench-report.json
# JUnit(用于 CI 测试报告)
sudo kube-bench --junit --outputfile kube-bench-junit.xml
# AWS 安全发现格式(用于 Security Hub)
sudo kube-bench run --targets node --asff
7. 分类处理并修复 FAIL/WARN 发现
每个失败的检查都会打印一条修复建议。在节点/清单上应用 CIS 推荐的修复,例如在静态 Pod 清单中收紧 API 服务器标志:
# 常见控制平面 FAIL 的修复示例:
# CIS 1.2.x — 确保 API 服务器上禁用了匿名认证。
# 编辑静态 Pod 清单并设置标志:
sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
# - --anonymous-auth=false
# kubelet 会自动重启静态 Pod。
# 节点修复示例 — kubelet 配置文件权限(CIS 4.1.x):
sudo chmod 600 /etc/kubernetes/kubelet/kubelet-config.json
sudo chown root:root /etc/kubernetes/kubelet/kubelet-config.json
8. 修复后重新验证
重新运行相关目标,确认先前失败的检查现在 PASS,并随时间跟踪评分:
sudo kube-bench run --targets master --check 1.2.1 --json --outputfile recheck.json
# 可选:将结果持久化到 PostgreSQL 以进行趋势跟踪
sudo kube-bench run --targets master,node --pgsql
工具和资源
| 工具 / 资源 | 用途 | 链接 |
|---|---|---|
| kube-bench | CIS Kubernetes 基准测试检查器 | https://github.com/aquasecurity/kube-bench |
| kube-bench 文档 | 运行 / 平台 / 标志 | https://aquasecurity.github.io/kube-bench/ |
| CIS Kubernetes 基准测试 | 源加固标准 | https://www.cisecurity.org/benchmark/kubernetes |
| Trivy Operator | 持续的集群内合规 + 漏洞扫描 | https://github.com/aquasecurity/trivy-operator |
| kube-hunter | 补充渗透测试工具 | https://github.com/aquasecurity/kube-hunter |
验证标准
- kube-bench 已安装(
kube-bench version)或作为 Job 运行。 - 针对集群 Kubernetes 版本的正确基准测试运行了扫描。
- 扫描了 master、node、etcd 和 policies 目标。
- 生成了 JSON/JUnit 输出用于管道/仪表板导入。
- 分类处理并确定了 FAIL 和 WARN 发现的优先级。
- 对控制平面清单和节点配置应用了 CIS 修复。
- 重新运行确认先前失败的检查现在 PASS。
- 随时间跟踪结果(文件存档或 PostgreSQL)。