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截图, 可观测性与监控, 安全合规, 安全扫描, 容器安全, 开源安全工具, 时序注入, 模型鲁棒性, 网络代理, 网络策略, 资源限制, 逆向工具, 逆向工程平台, 配置检查