joemunene-by/ghostaudit
GitHub: joemunene-by/ghostaudit
一款基于 CIS 基准的 Kubernetes 安全审计 CLI,帮助用户发现配置错误并生成结构化报告。
Stars: 0 | Forks: 0
# GhostAudit
Kubernetes 安全审计 CLI。基于 CIS Kubernetes 基准和实际安全最佳实践扫描集群中的安全配置错误,然后生成可操作的报告。
类似于 `kube-bench`,但更专注、基于 Python,并提供干净的 HTML 报告。
## 安装
```
pip install .
# 开发
pip install -e ".[dev]"
```
## 用法
```
# 使用默认 kubeconfig 完整扫描
ghostaudit scan
# 指定 kubeconfig
ghostaudit scan --kubeconfig ~/.kube/config
# 扫描特定命名空间
ghostaudit scan --namespace production
# 生成 HTML 报告
ghostaudit scan --output report.html
# 生成 JSON 报告
ghostaudit scan --output report.json
# 仅运行特定检查类别
ghostaudit scan --checks rbac,pods
# 列出所有可用检查
ghostaudit checks
# 显示版本
ghostaudit --version
```
## 退出代码
| 代码 | 含义 |
|------|------|
| 0 | 扫描完成,未发现 CRITICAL 或 HIGH 问题 |
| 1 | 配置或连接错误 |
| 2 | 扫描完成,发现 CRITICAL 或 HIGH 问题 |
## 安全检查
| ID | 类别 | 标题 | 严重性 |
|----|------|------|--------|
| RBAC-001 | RBAC | 集群管理员绑定到非系统账户 | CRITICAL |
| RBAC-002 | RBAC | 权限过高的角色(通配符) | HIGH |
| RBAC-003 | RBAC | ServiceAccount 自动挂载 API 令牌 | MEDIUM |
| RBAC-004 | RBAC | 工作负载在默认命名空间运行 | MEDIUM |
| POD-001 | Pod 安全 | 容器以特权模式运行 | CRITICAL |
| POD-002 | Pod 安全 | 容器可能以 root 身份运行 | HIGH |
| POD-003 | Pod 安全 | 缺少安全上下文 | MEDIUM |
| POD-004 | Pod 安全 | 启用了主机命名空间共享 | HIGH |
| POD-005 | Pod 安全 | 根文件系统可写 | MEDIUM |
| POD-006 | Pod 安全 | 允许权限提升 | MEDIUM |
| POD-007 | Pod 安全 | 添加了危险的能力 | HIGH |
| SEC-001 | 密钥 | 密钥以环境变量形式暴露 | MEDIUM |
| SEC-002 | 密钥 | ConfigMap 包含敏感键名 | HIGH |
| SEC-003 | 密钥 | 默认命名空间中存在密钥 | LOW |
| NET-001 | 网络 | 缺少 NetworkPolicy 的命名空间 | HIGH |
| NET-002 | 网络 | 通过 LoadBalancer/NodePort 暴露的服务 | MEDIUM |
| NET-003 | 网络 | 外部服务缺少文档注解 | LOW |
| RES-001 | 资源 | 容器未设置资源限制 | MEDIUM |
| RES-002 | 资源 | 容器未设置资源请求 | LOW |
| RES-003 | 资源 | 伸缩部署缺少 PodDisruptionBudget | LOW |
| IMG-001 | 镜像 | 容器使用 :latest 标签 | MEDIUM |
| IMG-002 | 镜像 | 使用公共镜像仓库且未指定摘要 | MEDIUM |
| IMG-003 | 镜像 | 缺少 imagePullPolicy: Always(针对可变标签) | LOW |
## 示例控制台输出
```
╭──────────── GhostAudit ─────────────╮
│ GhostAudit Security Report │
│ Cluster: my-cluster │
│ Time: 2026-04-16 12:00:00 UTC │
│ Security Score: 42/100 │
╰──────────────────────────────────────╯
Findings Summary
┏━━━━━━━━━━┳━━━━━━━┓
┃ Severity ┃ Count ┃
┡━━━━━━━━━━╇━━━━━━━┩
│ CRITICAL │ 2 │
│ HIGH │ 5 │
│ MEDIUM │ 8 │
│ LOW │ 3 │
│ INFO │ 0 │
│ TOTAL │ 18 │
└──────────┴───────┘
╭─ [!!!] [POD-001] Privileged container ───────────╮
│ Resource: Pod/bad-pod/app (ns: default) │
│ │
│ Container 'bad-pod/app' in namespace 'default' │
│ is running in privileged mode... │
│ │
│ Remediation: Set securityContext.privileged: false│
╰───────────────────────────────────────────────────╯
```
## HTML 报告
HTML 报告采用深色主题,包含以下功能:
- 安全评分仪表盘(0-100)
- 严重性统计卡片
- 可折叠的分组发现结果(按类别)
- 每个发现的修复步骤
- 完全自包含(所有 CSS 内嵌,无外部依赖)
## 架构
```
src/ghostaudit/
├── cli.py # Typer CLI
├── config.py # Settings
├── scanner.py # Main orchestrator
├── client.py # K8s API client wrapper
├── models.py # Finding, Severity, ScanReport
├── checks/
│ ├── base.py # BaseCheck ABC
│ ├── rbac.py # RBAC checks
│ ├── pods.py # Pod security checks
│ ├── secrets.py # Secrets & config checks
│ ├── network.py # Network policy checks
│ ├── resources.py # Resource limits checks
│ └── images.py # Image security checks
└── report/
├── console.py # Rich console output
├── html.py # HTML report (Jinja2)
└── json_report.py # JSON report
```
每个检查模块通过 `KubeResources` 接收预加载的 K8s 资源字典,允许使用固定数据进行测试而无需真实集群。
## 开发
```
# 安装开发依赖
make dev
# 运行测试
make test
# 运行测试并覆盖
make test-cov
# 代码检查
make lint
```
## 许可证
MIT - Joe Munene 2026
标签:CIS 基准, CLI 工具, DevOps 安全, HTML 报告, JSON 报告, kube-bench 对标, Kubernetes 安全, Kubernetes 审计, Pod 安全, Python 安全工具, RBAC 安全, Web截图, 可观测性与监控, 安全合规, 安全扫描, 容器安全, 开源安全工具, 时序注入, 模型鲁棒性, 网络代理, 网络策略, 资源限制, 逆向工具, 逆向工程平台, 配置检查