kube-bench 是 aqua security 开源的 go 工具,用于自动执行 cis kubernetes benchmark 安全基线检查,通过 yaml 配置驱动,支持 job、容器、二进制三种运行方式,需挂载宿主机路径并启用 hostpid 才能准确审计 master/node/etcd 等组件配置风险。

在 Kubernetes 集群中部署 kube-bench,是为了自动执行 CIS Kubernetes Benchmark 安全基线检查,识别 master、node、etcd 等组件的配置风险项——它不依赖外部扫描器,直接在节点宿主机上下文中运行,必须正确挂载关键路径并启用 hostPID 才能获取真实进程与文件状态。
用 Job 方式在集群内原生运行 kube-bench
这是最贴近生产审计场景的部署方式,所有检查都在目标节点上以 Pod 形式执行,结果可直接通过日志提取。
第一步:应用官方提供的 node 审计 Job 清单
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job-node.yaml
第二步:应用 master/control-plane 审计 Job 清单
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job-master.yaml
注意:两个 Job 默认使用 hostPID: true 和大量 hostPath 只读挂载,若集群节点启用了 PodSecurityPolicy 或 PSA(Pod Security Admission)限制,Job 会因权限不足卡在 Pending 状态——需提前为 default namespace 绑定 privileged 权限或配置对应 securityContextConstraints。
第三步:等待 Job 完成并查看结果
kubectl logs job/kube-bench-master && kubectl logs job/kube-bench-node
用容器方式快速验证单节点配置
适用于本地 KIND、Minikube 或调试环境,无需部署到集群资源体系内,适合首次运行或快速比对。
方法一:直接运行容器并映射全部必要路径
docker run --rm -v /etc:/etc:ro -v /var:/var:ro -v $(which kubectl):/usr/local/mount-from-host/bin/kubectl -v /etc/kubernetes:/etc/kubernetes:ro -v /var/lib/kubelet:/var/lib/kubelet:ro -v /var/lib/etcd:/var/lib/etcd:ro --pid=host aquasec/kube-bench:latest
方法二:指定 CIS 版本和检查目标(例如只查 etcd)
docker run --rm -v /etc:/etc:ro -v /var:/var:ro -v /etc/kubernetes:/etc/kubernetes:ro -v /var/lib/etcd:/var/lib/etcd:ro --pid=host aquasec/kube-bench:latest run --targets=etcd --benchmark=cis-1.24
这一步操作起来很简单,直接把命令复制粘贴执行就行;但要注意,如果宿主机上没有 kubectl 或 /etc/kubernetes/manifests 路径为空,部分检查项会直接 FAIL,这不是工具问题,而是环境缺失导致的误报。
用二进制方式在节点本地手动执行
当你需要深度定制参数、复用已有审计流程,或无法拉取镜像时,二进制部署是最可控的选择。
① 下载最新稳定版二进制包(以 v0.8.0 为例)
wget https://github.com/aquasecurity/kube-bench/releases/download/v0.8.0/kube-bench_0.8.0_linux_amd64.tar.gz
② 解压并确认 cfg 目录结构完整
tar -zxvf kube-bench_0.8.0_linux_amd64.tar.gz && ls cfg/
③ 运行 master 组件审计(自动匹配 Kubernetes 版本)
./kube-bench --config-dir ./cfg/ --config ./cfg/config.yaml run --targets=master
④ 若集群使用非标准路径(如 K3s 的 /var/lib/rancher/k3s/server/manifests),必须先修改 ./cfg/config.yaml 中对应组件的 path 字段,否则所有涉及 manifest 文件的检查都会失败——不改路径就跑,90% 的 FAIL 是假阳性。











