kaaval/kaaval
GitHub: kaaval/kaaval
Kaaval 是一款自托管的 Kubernetes 安全扫描器,通过结合环境、数据和合规上下文的风险评分引擎,对 CVE 和 RBAC 发现进行优先级排序并提供可操作的修复建议。
Stars: 1 | Forks: 4
# Kaaval
**一款自托管的 Kubernetes 安全扫描器,它能告诉你某个发现对*你的*集群究竟意味着什么——而不仅仅是一份需要你自己去逐一查找的 ID 列表。**
大多数扫描器止步于检测:这里有 800 个 CVE,那里有 50 个有风险的 RBAC 绑定,祝你在排定优先级时好运。Kaaval 的构建理念与此不同——只有当某个发现与*你的*环境绑定,并提供了具体的下一步操作建议时,它才是有用的。每一个发现,无论是 CVE 还是 RBAC 配置错误,都会经过相同的**上下文风险评分**(Contextual Risk Score)引擎处理,并根据对你真正重要的因素进行排名,而不是简单粗暴的严重性排序。
## 目前功能
- **CVE 扫描** — 连接到你的活动集群(集群内或通过 kubeconfig),对控制平面版本和运行中的附加组件(`ingress-nginx`、`coredns`、`metrics-server`、CSI 驱动等)进行指纹识别,并将实际运行的内容与官方 Kubernetes CVE 数据流和 NVD 进行交叉比对。无需猜测哪些 CVE 适用于你——只有与你真实组件版本匹配的 CVE 才会出现。
- **RBAC 配置错误扫描** — 根据 CIS Kubernetes Benchmark v1.12.0 第 5.1 节中可从 RBAC 状态检查的控制项,以 11 条规则对集群中的每一个 Role、ClusterRole 及其绑定进行逐一排查:通配符权限、Secrets 访问权限、exec/attach 授权、escalate/bind/impersonate 动词、`nodes/proxy`、CSR 批准、webhook 配置写入、ServiceAccount token 创建、工作负载/PV 创建,以及将 cluster-admin 绑定到广泛身份(`default` SA、`system:authenticated`、`system:masters`)。内置的系统角色会被过滤掉,因此你看到的是真正的问题,而非平台内部细节。完整目录:[docs/rbac-rules.md](docs/rbac-rules.md)。
- **上下文风险评分** — 相同的 CVE 或 RBAC 发现在不同情况下的排名会有所不同,这取决于你对四个问题的回答:这是生产环境还是开发环境?这里存放着什么数据(PII、财务数据、PHI)?适用哪些合规框架(PCI-DSS、HIPAA、SOC2)?它是否对互联网暴露?该评分永远不是黑盒——每一个发现都会准确显示是哪些因素导致其分数上升或下降。公式和权重:[docs/contextual-risk-score.md](docs/contextual-risk-score.md)。
- **每个发现均提供修复方案** — 不仅仅是检测:每个发现都包含操作指南(附带 `kubectl` 命令)、其在*你的*上下文中重要的原因、它映射到的 CIS v1.12.0 控制项、合规性说明(PCI-DSS/HIPAA/SOC2)以及审计追踪说明——无论是在 API、仪表盘中,还是在 PDF 报告里均会提供。
- **CI/CD 卡点** — 无头 CLI 可在提交 PR 时扫描 RBAC manifest(安全左移),或在部署后扫描活动的集群,并根据*上下文*评分决定是否阻断流水线,而不是依据简单的严重性:同一个发现可能会在生产/PCI 流水线中被拦截,但在开发环境中允许通过。内置 GitHub Action 以及 GitLab/Jenkins/Argo CD 配方:[docs/ci-integration.md](docs/ci-integration.md)。
- **PDF 报告** — 将任何扫描结果(CVE 或 RBAC)导出为可共享的报告。
- **多集群比较** — 注册多个集群,并在它们之间进行扫描和比较。
- **Kyverno 策略** — 位于 [`policies/kyverno/`](policies/kyverno/README.md) 中的 RBAC 规则在准入阶段的对应实现,包含一份关于上游策略库已涵盖内容的真实映射,以及两个正在向上游贡献的策略。
## 截图
每一个 RBAC 配置错误都会根据上下文风险评分进行排名,并展开为一个完整的修复区块——包含操作指南、*在你的上下文中*重要的原因、映射到的 CIS Kubernetes Benchmark v1.12.0 控制项、合规性说明以及审计追踪记录:

排名后的发现列表——同样的评分机制将一个 CRITICAL 级别的 `system:masters` 绑定排在预期之中但极其繁杂的 HIGH 级别授权之上:

驱动评分的四个风险上下文选项,每个集群只需设置一次:

仪表盘概览:

## 独特之处
检测工具(Trivy、Prowler、kube-bench)告诉你*哪里出了问题*。SaaS 平台(Wiz、Orca)增加了业务上下文,但保持了不透明的评分模型和高达五位数的价格标签。Kaaval 以开放、自托管的方式进行上下文评分,代码中公开了计算公式——你可以清楚地看到某个发现的排名为何如此。
## 架构
```
control-plane/ FastAPI backend — auth, CVE + RBAC scanning, contextual scoring, PDF reporting
dashboard/ Next.js frontend — scan results, feed management, risk context settings, PDF export
deploy/ docker-compose stack (Postgres + control-plane + dashboard)
```
**控制平面**(Control plane)摄取 CVE 数据流(`cve_service.py`),连接到集群(`k8s_client.py`),通过镜像检测运行中的附加组件(`addon_detection.py`),评估 RBAC 风险规则(`rbac_service.py`),并通过一个共享引擎(`scoring.py`)对每个发现进行评分,从而确保 CVE 和 RBAC 发现以相同的方式进行排名。结果通过 REST API 暴露,并可作为 PDF 导出(`report_service.py`)。
关键端点(完整参考:[docs/api.md](docs/api.md)):
- `POST /cve/scan`, `GET /cve/scan/latest`, `GET /cve/scan/latest/report.pdf` — 扫描已连接的集群,获取或导出最后一次的扫描结果
- `GET /cve/summary` — 当前数据流的严重性分布
- `POST /cve/k8s/clusters/{id}/scan`, `GET /cve/k8s/clusters` — 多集群扫描与比较
- `GET|POST /cve/feeds` — 管理处于激活状态的 CVE 数据流
- `GET|PUT /cve/context` — 读取/更新租户的风险上下文(环境、数据分类、合规范围、暴露面),该上下文将驱动上下文风险评分
- `POST /rbac/scan`, `GET /rbac/scan/latest`, `GET /rbac/scan/latest/report.pdf` — 扫描集群的 Roles/ClusterRoles/bindings 以查找配置错误,获取或导出扫描结果
对于流水线,我们还提供了一个完全不需要服务器或数据库的无头 CLI——直接通过已发布的镜像运行(`ghcr.io/kaaval/kaaval`,无需构建):
```
docker run --rm -v "$PWD/k8s:/scan" ghcr.io/kaaval/kaaval \
python -m app.cli scan rbac --manifests /scan --fail-on-score 20
```
或者通过源码运行:`cd control-plane && python -m app.cli scan rbac --manifests ./k8s/ --fail-on-score 20`。
Kaaval 完全开源,采用 Apache-2.0 协议——没有开放核心模式的拆分,没有功能门控,也没有许可证 token。该项目交付的所有内容均以自托管方式运行,并将一直保持如此:该项目正致力于符合 CNCF 的供应商中立性标准。
## 快速开始
```
cp deploy/.env.example deploy/.env
# 填写 POSTGRES_PASSWORD、KAAVAL_SECRET_KEY、KAAVAL_REFRESH_SECRET_KEY
# (使用以下命令生成密钥:openssl rand -hex 32)
docker compose -f deploy/docker-compose.yml up -d
```
管理员用户会在首次启动时自动创建(seed)。如果 `.env` 中的 `KAAVAL_ADMIN_PASSWORD` 留空,系统会生成一个密码,并在控制平面容器的日志中打印一次:
```
docker compose -f deploy/docker-compose.yml logs control-plane | grep "Admin created"
```
仪表盘:http://localhost:3000。API:http://localhost:8000。
## 开发
```
# control-plane
cd control-plane
pip install -r requirements.txt
KAAVAL_ADMIN_PASSWORD=test-admin-password pytest tests/
# dashboard
cd dashboard
npm ci
npm run dev
```
## 文档
详细文档位于 [docs/](docs/README.md):包含架构、评分
公式、带有 CIS v1.12.0 映射的完整 RBAC 规则目录、REST API
参考以及 CI/CD 集成配方。
## 许可证
Apache License 2.0 — 详见 [LICENSE](LICENSE)。
标签:Anthropic, CIS基准, DevSecOps, RBAC, 上游代理, 子域名突变, 安全扫描, 时序注入, 测试用例, 请求拦截, 逆向工具