给 Kubernetes 集群和清单做安全合规扫描(Kubescape)
Kubescape 是 ARMO 创建、现由 CNCF 孵化的 Kubernetes 安全平台,用 Go 写成,能对着集群、YAML/Helm 清单和容器镜像扫配置错误、漏洞并给出合规评分。这篇拆开它「规则库与引擎分离、一套核心多入口」的实现方式,讲清安装、主要命令、规则联网依赖带来的代价,以及它和 Trivy 这类工具的取舍边界,帮读者判断要不要引入。
把工作负载交给 Kubernetes 之后,安全问题的来源变得分散:清单里漏掉的 securityContext、集群里过宽的 RBAC 授权、镜像里没打的 CVE 补丁,各自落在不同的检查点上。运维往往要同时开几个工具,再把结果拼成一份能交给审计的报告。Kubescape 想解决的就是这个拼接过程。
Kubescape 是用 Go 写的开源 Kubernetes 安全平台,输入集群、YAML/Helm 清单或容器镜像,输出配置错误、漏洞与合规评分报告,主要给集群管理员和 CI/CD 使用者。
项目由 ARMO 创建,目前是 CNCF 的孵化项目,仓库地址是 kubescape/kubescape,采用 Apache-2.0 许可证,主要语言 Go(语言占比 98.7%)。抓取时 Star 数 11763,Fork 1042,开放 Issue 47 个。同一个二进制既能扫本地目录,也能以 Operator 形式常驻集群,还能在 IDE 与 CI 流水线里调用。

它怎么做到的
扫描目标分三类来源。集群模式通过 kubeconfig 向 API Server 读取对象;文件模式读取本地 YAML 目录、Helm chart、Kustomize 目录,也可以直接把一个 Git 仓库地址交给它,例如 kubescape scan https://github.com/kubescape/kubescape;镜像模式则拉取镜像元数据,交给 Grype 匹配 CVE。
对象进入规则引擎后,按框架逐条控制项判定,每条控制项给出通过或失败的结论,以及失败发生在哪个字段路径。引擎同时支持 Rego(Open Policy Agent)与 CEL 两种策略语言,Release 说明里提到 v4.0.11 起会跨被扫对象缓存编译后的 CEL 程序。判定结果按框架与严重度汇总成分数,默认打印在终端,也能用 --format 落成文件。规则本身不在二进制里,由 regolibrary 单独提供,v4.0.15 把该依赖升到了 v2.0.36。规则库的拉取与缓存细节,仓库未展开说明。
能直接使用的功能大致是这几项:
- 配置错误扫描:
kubescape scan扫当前集群,kubescape scan /path/to/manifests/扫清单目录。可以只跑某个框架,例如kubescape scan framework nsa、kubescape scan framework mitre、kubescape scan framework cis-v1.23-t1.0.1,也可以只跑单个控制项kubescape scan control C-0005 -v。范围用--include-namespaces与--exclude-namespaces限定,配置文件用--kubeconfig指定。 - 镜像漏洞扫描:
kubescape scan image nginx:1.21。私有仓库加--username、--password;多架构镜像索引里挑变体用--platform linux/amd64;扫描工作负载时,平台可以从调度节点、node selector 和 node affinity 推断,需要用--image-platform配合--scan-images覆盖推断结果。 - 自动修复:
kubescape fix能改清单文件里的配置错误,对集群扫描只打印修复建议;kubescape patch借 Copacetic 修补镜像里的漏洞。 - 准入控制:
kubescape vap用来管理 Validating Admission Policies,把策略下沉到集群准入环节。 - 输出与阈值:
--format支持 json、junit、sarif、html、pdf、csv,配合--output指定文件名。合规阈值写成--compliance-threshold 80,分数低于它时进程退出码为 1;严重度阈值写成--severity-threshold high;--view resource|control切换视图。 - 报告脱敏与加密:
--hide对敏感字段做确定性假名化;--encrypt配合环境变量KUBESCAPE_MASTER_KEY(至少 16 个字符)把敏感元数据加密进 JSON 报告,再用kubescape decrypt还原。 - 离线与气隙支持:
kubescape download预先下载产物,kubescape config管理缓存的配置。另有kubescape mcpserver启动 MCP server 供 AI 助手接入。
几个关键设计
规则库与引擎分离
控制项不编译进二进制,而由 regolibrary 独立发布,对应仓库里的 rules/ 与 downloader/ 两个目录。好处是补规则不用等 CLI 发版,Release 记录里几乎每个版本都在加控制项,比如 v4.0.13 新增了 C-0298 检测能挂载临时容器的 subject,以及针对 impersonate、token-mint、escalate、bind、node-proxy 等行为的 RBAC 规则。
一套核心、多个入口
cmd/ 下是各子命令,core/ 与 pkg/ 是复用的核心逻辑,同一套判定结果被 CLI、集群内 Operator、IDE 插件、CI 集成和 MCP server 共同消费。这也是它能同时出现在提交前检查和集群巡检里的原因,代价是几处入口的版本需要保持同步。
结果的脱敏与加密
扫描报告里会带上命名空间、工作负载名这类信息,直接贴进工单或者分享给外部并不合适。Issue 里有一条要求匿名化的需求(已解决,43 条评论),最后落成了 --hide 与 --encrypt 两条路径:前者做确定性替换,后者加密写入 JSON,解密单独由 kubescape decrypt 完成。
这样设计的代价
规则外置意味着默认要联网。第一次扫描通常得先把框架和控制项拉下来,完全隔离的环境必须先跑 kubescape download,否则扫不动。规则库更新频繁,升级 CLI 与更新规则是两件事,团队要决定跟着哪个节奏走。
资源占用上有过明确记录。Issue「OPAProcessor.updateResults taking too much memory resources」反映结果聚合过程吃内存过多(已解决)。另外几条用户实际踩过的坑:-f json 会把结果写成文件而不是打到标准输出,用管道接会拿不到内容(已解决);生成的 sarif 文件里曾经没有 findings,无法直接喂给 GitHub Code Scanning(已解决);kubescape scan -v 打印的表格在窄终端里会被撑破(已解决)。
安装与最短路径
Linux 与 macOS 一行装:
curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash
包管理器也可以:brew install kubescape、kubectl krew install kubescape、yay -S kubescape、nix-shell -p kubescape、choco install kubescape、scoop install kubescape。Windows PowerShell 用:
iwr -useb https://raw.githubusercontent.com/kubescape/kubescape/master/install.ps1 | iex
装完跑一次 kubescape scan,结果直接打在终端;想留档就加 --format json --output results.json,文件落在当前目录。
同类工具横向对照
下面两个项目与 Kubescape 能解决部分相同的问题,重合在漏洞与配置检查,差别在于覆盖面与合规框架的处理方式。
| 项目 | 适合谁 | 部署方式 | 主要限制 | 什么情况下选它更合适 | 项目地址 |
|---|---|---|---|---|---|
| kubescape/kubescape | 要对集群、清单、镜像做统一合规打分的集群管理员与 CI 维护者 | 单二进制,另有 Homebrew、Krew、Chocolatey、Scoop 安装方式与 in-cluster Operator | 规则库与框架默认需联网拉取,气隙环境要先 kubescape download;镜像漏洞检测依赖 Grype | 需要按 NSA-CISA、MITRE ATT&CK、CIS 框架出具可比较的合规分数时 | kubescape/kubescape |
| aquasecurity/trivy | 只关心容器与文件系统漏洞、密钥、SBOM 的开发者与流水线 | 未逐一核实 | 仓库描述里未提及按 NSA、MITRE、CIS 框架输出合规评分 | 只需要扫镜像漏洞并生成 SBOM、不想在集群里装常驻组件时 | aquasecurity/trivy |
| aquasecurity/trivy-operator | 已经在用 Trivy、希望以 Operator 形式在集群内持续出报告的运维 | 未逐一核实 | 仓库描述只写「Kubernetes-native security toolkit」,未提及清单、Helm 与仓库级扫描 | 已经采用 Trivy 生态、要在集群内持续跑漏洞扫描时 | aquasecurity/trivy-operator |
如果只想在流水线里扫一遍镜像漏洞并产出 SBOM,不想引入需要联网拉规则的组件,Trivy 这条路更省事,Kubescape 的价值在于把清单、集群与镜像收进同一套框架打分,为此要多维护一份规则库的更新与缓存。已经在跑 Trivy 的团队,要额外评估再上一个 Operator 的管理成本是否值得。
对你的实际影响
落地成本主要在规则同步和结果消费两端。CI 里想用它卡门禁,得先明确用哪个框架、阈值定多少,因为 --compliance-threshold 会让低于阈值的流水线直接失败。日常巡检场景则要考虑规则库缓存放在哪、要不要每周更新一次。
仓库里没有给出内存占用的参考值,规划机器规格时建议先在小集群试跑一次,观察扫描进程的峰值。控制项 ID 与框架名是需要花时间熟悉的部分,kubescape list 可以列出当前可用的框架与控制项。
Kubescape 会对集群做对象读取与镜像元数据拉取,这类能力只应用在自有资产或已获得书面授权的目标上。未经授权扫描他人集群、镜像仓库或第三方基础设施,可能触犯当地法律与服务商条款,账号也可能被平台封禁。
它适合已经把 Kubernetes 交给平台团队统一管理、需要定期出一份能对上审计口径的合规报告的组织,也适合在 CI 阶段就想拦住清单问题的团队。只想要一个轻量镜像漏洞扫描器、不关心框架评分的个人开发者,用起来会觉得重。
焚评:这个项目的量化评分
本项目的选题来自 焚.com(一个按公开公式给 GitHub 项目打分的站)。焚评当前总分 9.9 分(满分 10)。下表是各维度的得分:
| 评分维度 | 得分 |
|---|---|
| 热度动量(权重 25%) | 10.0 / 10 |
| 开发活跃(权重 25%) | 10.0 / 10 |
| 社区响应(权重 15%) | 10.0 / 10 |
| 文档质量(权重 15%) | 9.5 / 10 |
| 发布节奏(权重 10%) | 9.9 / 10 |
| 风险控制(权重 10%) | 10.0 / 10 |
评分口径、权重与计算方式见焚.com 的评分方法页;数据随 GitHub 指标刷新,具体数值以焚.com 当前页面为准。本文正文为诀.com 独立撰写,评分数据由焚.com 授权引用。
内容核验说明
它把清单、集群、镜像三处检查收进一套框架打分,规则外置与多入口复用两个设计讲得具体,安装和命令行例子能照着跑,末尾与 Trivy 的取舍边界也说得清楚。适合平台团队里要出合规报告、或在 CI 拦清单问题的人。规则默认联网拉取,阈值选项会让流水线直接失败,落地前先在小集群试跑;版本与 Star 等数据来自抓取及焚.com 引用,本站未独立验证。
Star 11763、Fork 1042、开放 Issue 47 等仓库指标来自抓取时点,焚评 9.9 分及各维度得分由焚.com 授权引用,诀.com 均未独立复核。安装命令、子命令与参数来自项目公开文档与 Release 说明,未实际执行扫描验证。内存占用、sarif 无 findings、窄终端表格、GKE host scanner 等问题以仓库 Issue 记录为依据,是否在当前版本复现无法确定。用户反馈摘要
根据仓库 Issue 来看,反馈集中在几类:有提交者要求扫描结果默认上传改为选择加入,认为现在等于把集群问题发给云端;多条报告 sarif 文件读不出 findings、OPAProcessor 聚合结果占用内存过多、表格在 80 列终端被撑破,另有提交者反映 GKE 私有集群开启 host scanner 报错。集成方面,提交者提出对接 Harbor 扫描器、AWS ECR 漏洞源与 PolicyReport CRD,并希望扩充 Homebrew、apt 等安装方式。上述 Issue 状态均为已解决。
基于该仓库公开 Issue 整理,只反映提交者报告的现象与诉求,不代表诀.com 立场,也不代表问题已被确认。项目来源与说明
开源项目:kubescape(kubescape)
本文由诀.com 编辑基于该项目的公开信息独立撰写,属原创解读,不是对项目文档的翻译或转载;文中提到的功能与参数以官方仓库为准,代码与文档版权归原作者所有。
查看项目仓库