mustafa0766/kubesentinel
GitHub: mustafa0766/kubesentinel
一款 Kubernetes 容器镜像安全扫描器,集成 Trivy、Syft 和 Cosign,提供漏洞检测、SBOM 生成、签名验证、安全评分和可视化报告。
Stars: 1 | Forks: 0
# KubeSentinel
**Kubernetes 容器镜像安全扫描器**
KubeSentinel 是一款 DevSecOps 工具,用于扫描您 Kubernetes 集群中运行的容器镜像,以发现漏洞、安全配置错误和合规性问题。它能生成具有可操作性的 HTML 仪表板、CSV 和 JSON 报告,非常适合安全团队使用。
```
kubesentinel scan --output reports/
```
## 功能
- **Kubernetes 镜像收集** — 从 Pod、Deployment、DaemonSet、StatefulSet、Job 和 CronJob 中发现镜像
- **漏洞扫描** — 集成 [Trivy](https://trivy.dev) 进行 CVE 检测
- **SBOM 生成** — 通过 [Syft](https://github.com/anchore/syft) 可选生成 CycloneDX SBOM
- **签名验证** — 通过 [Cosign](https://docs.sigstore.dev) 进行可选的镜像签名检查
- **安全评分** — 针对单个镜像和整个集群的安全评分(0–100)
- **最佳实践审计** — 检测 `latest` 标签、root 用户、特权容器、主机网络等
- **HTML 仪表板** — 包含 Chart.js 可视化图表的独立报告
- **并行扫描** — 由 Trivy 服务器模式支持的工作池,实现快速、缓存安全的并发扫描
## 架构
```
kubeconfig
│
▼
Kubernetes API
│
▼
Collect Images
│
▼
Unique Images
│
▼
┌───────────────┐
│ Worker Pool │
│ N Goroutines │
└───────────────┘
│
├── Trivy
├── Syft
├── Cosign
└── Security Context
│
▼
Image Analysis
│
▼
Risk Calculation
│
▼
HTML + CSV + JSON + SBOM
```
## 快速开始
### 前置条件
- Go 1.22+
- 可访问的 Kubernetes 集群(已配置 `kubectl`)
- [Trivy](https://trivy.dev/getting-started/installation/)(漏洞扫描必需)
- [Syft](https://github.com/anchore/syft#installation)(可选,用于 SBOM)
- [Cosign](https://docs.sigstore.dev/cosign/system_config/installation/)(可选,用于签名验证)
### 安装
```
git clone https://github.com/mustafa0766/kubesentinel.git
cd kubesentinel
make build
```
### 全局安装(可在任意位置运行)
```
# 选项 1:go install(将二进制文件放入 $GOPATH/bin,通常是 ~/go/bin)
go install ./cmd/kubesentinel
# 选项 2:将构建好的二进制文件复制到您的 PATH 中
make build
sudo cp bin/kubesentinel /usr/local/bin/
# 然后从任意目录运行:
kubesentinel scan --output ~/kubesentinel-reports/
```
如果 `~/go/bin` 不在您的 PATH 中,请将其添加到您的 shell 配置文件中:
```
echo 'export PATH="$HOME/go/bin:$PATH"' >> ~/.zshrc && source ~/.zshrc
```
### 用法
```
# 带 HTML 仪表板的全面扫描
./bin/kubesentinel scan --output reports/
# 扫描特定 namespaces
./bin/kubesentinel scan -n production -n staging --output reports/
# 使用 16 个 worker 的并行扫描
./bin/kubesentinel scan --workers 16 --output reports/
# 包含 SBOM 和 Cosign 验证
./bin/kubesentinel scan --sbom --cosign --output reports/
# 仅收集镜像(不进行 Trivy 扫描)
./bin/kubesentinel scan --collect-only --output reports/
```
### CLI 选项
| 标志 | 描述 | 默认值 |
|------|-------------|---------|
| `-c, --config` | YAML 配置文件路径 | 自动发现 |
| `--kubeconfig` | kubeconfig 路径 | `~/.kube/config` |
| `-o, --output` | 输出目录 | `reports/` |
| `-n, --namespace` | 要扫描的 namespace | 全部 |
| `-w, --workers` | 并行 worker 数 | `8` |
| `--sbom` | 使用 Syft 生成 SBOM | `false` |
| `--cosign` | 使用 Cosign 验证签名 | `false` |
| `--collect-only` | 跳过漏洞扫描 | `false` |
| `--log-level` | 日志级别 | `info` |
## 配置文件
您可以使用 YAML 配置文件,而无需每次都传递标志。KubeSentinel 会按以下顺序查找该文件:
1. `--config /path/to/config.yaml`(显式指定)
2. `./kubesentinel.yaml`(当前目录)
3. `~/.config/kubesentinel/config.yaml`(用户全局配置)
```
# ~/.config/kubesentinel/config.yaml
output: ~/kubesentinel-reports/
workers: 16
namespaces:
- production
- staging
sbom: true
cosign: false
logLevel: info
```
CLI 标志始终会覆盖配置文件中的值。有关所有选项,请参见 `kubesentinel.example.yaml`。
## Docker
```
# 构建镜像
docker build -t kubesentinel .
# 针对您的 cluster 运行(挂载 kubeconfig 和报告目录)
docker run --rm \
-v ~/.kube/config:/home/kubesentinel/.kube/config:ro \
-v "$(pwd)/reports:/reports" \
kubesentinel scan --kubeconfig /home/kubesentinel/.kube/config --output /reports
```
该镜像内置了 Trivy,因此漏洞扫描可以直接开箱即用。
## GitHub Action
在 CI 中使用 KubeSentinel 定期扫描您的集群:
```
name: Cluster Security Scan
on:
schedule:
- cron: '0 6 * * 1' # every Monday 06:00 UTC
workflow_dispatch:
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: azure/k8s-set-context@v4
with:
kubeconfig: ${{ secrets.KUBECONFIG }}
- uses: mustafa0766/kubesentinel@v1
with:
namespaces: production,staging
workers: 16
sbom: true
```
报告将作为 workflow artifact(`kubesentinel-reports`)上传。
## 安全评分
每个镜像都会获得一个 0 到 100 之间的分数:
| 因素 | 扣分 |
|--------|---------|
| 严重 CVE | 每个 -10 |
| 高危 CVE | 每个 -5 |
| 以 Root 身份运行 | -10 |
| `latest` 标签 | -5 |
| 未签名镜像 | -10 |
| EOL 操作系统 | -10 |
| 特权容器 | -15 |
| 主机网络 | -10 |
## 输出
扫描完成后,输出目录将包含:
```
reports/
├── kubesentinel-20260716-120000.html # Interactive dashboard
├── kubesentinel-20260716-120000.json # Full JSON report
├── kubesentinel-20260716-120000.csv # Spreadsheet-friendly summary
└── sbom/ # SBOM files (if --sbom)
└── nginx_latest_cyclonedx-json.json
```
## 项目结构
```
kubesentinel/
├── cmd/kubesentinel/ # CLI entrypoint
├── internal/
│ ├── kubernetes/ # K8s client & image collector
│ ├── scanner/ # Trivy, Syft, Cosign integrations + worker pool
│ ├── analyzer/ # Scoring, OS/vendor/base-image detection
│ ├── report/ # HTML, CSV, JSON generators
│ ├── models/ # Data models
│ ├── config/ # YAML config file loading
│ └── cmd/ # Cobra commands
├── test/e2e/ # End-to-end tests (e2e build tag)
│ └── fixtures/ # Test workloads for kind-based CI
├── .github/workflows/ # CI, E2E (kind), and release pipelines
├── reports/ # Default output directory
├── Dockerfile # Multi-stage image with bundled Trivy
├── action.yml # GitHub Action definition
├── kubesentinel.example.yaml # Example config file
├── Makefile
└── README.md
```
## 路线图
- [x] **v0.1 (MVP)** — 镜像收集、Trivy 扫描、JSON/CSV 报告
- [x] **v0.2** — HTML 仪表板、安全评分、namespace 摘要
- [x] **v0.3** — Syft SBOM、Cosign 验证、基础镜像分析
- [x] **v1.0** — 并行扫描(Trivy 服务器模式)、配置文件、Docker 镜像、GitHub Action、端到端测试
- [ ] **下一步** — Homebrew formula、GitHub Release 自动化验证、策略引擎(用于 CI 的失败阈值)
## 开发
```
make test # Run unit tests
make e2e # Run end-to-end tests against current kubeconfig context
make e2e-full # e2e including real Trivy scan (slow)
make lint # Run linters
make build # Build binary
make run # Scan current cluster
```
### 端到端测试
端到端测试位于 `test/e2e/` 目录下,并在 `e2e` 构建标签之后,因此 `make test` 永远不会触碰集群。它们使用当前的 kubeconfig 上下文,如果无法连接到集群,则会**自动跳过**。
| 测试 | 验证内容 |
|------|------------------|
| `TestE2E_ClusterConnection` | Kubeconfig 加载与 API 连通性 |
| `TestE2E_CollectImages` | 针对单个 namespace 的镜像收集和使用元数据 |
| `TestE2E_CollectAllNamespaces` | 跨所有 namespace 的全集群清单 |
| `TestE2E_ReportGeneration` | JSON/CSV/HTML 报告的生成与有效性 |
| `TestE2E_FullScanWithTrivy` | 通过工作池进行真实的 Trivy 扫描(可选启用) |
通过环境变量进行配置:
```
# 扫描不同的 namespace(默认:kube-system)
KUBESENTINEL_E2E_NAMESPACE=production make e2e
# 包含真实的 Trivy 漏洞扫描
make e2e-full
```
## 许可证
MIT
标签:DevSecOps, EVTX分析, Go, GraphQL安全矩阵, LLM防护, Ruby工具, SBOM, 上游代理, 子域名突变, 安全扫描器, 日志审计, 硬件无关, 请求拦截