holbein-io/ephor
GitHub: holbein-io/ephor
Ephor 是一个面向 Kubernetes 工作负载的自托管漏洞管理平台,通过汇聚外部扫描结果提供集中的漏洞分拣、升级跟踪和修复监控能力。
Stars: 1 | Forks: 0
# Ephor
针对 Kubernetes 工作负载的自托管漏洞管理平台。
Ephor 接入容器镜像扫描结果,并提供一个集中式仪表盘,用于漏洞分拣工作流、升级跟踪和修复计划。它为安全和平台团队提供了一个统一的面板,以了解和处理其集群中的漏洞。
## 功能
- 仪表盘概览,包含关键指标、严重程度细分和趋势图
- 跨镜像、命名空间和集群的漏洞搜索与过滤
- 包含状态管理和评论的漏洞分拣工作流
- 针对关键发现的升级管理
- 修复跟踪和 SLA 合规性监控
- 扫描结果导入 REST API
- 多架构容器镜像 (amd64/arm64)
## 架构
```
+-----------------+
| Dashboard |
| (React / Nginx) |
+--------+--------+
|
HTTP /api/v1
|
+--------v--------+
| API |
| (Spring Boot) |
+--------+--------+
|
JDBC
|
+--------v--------+
| PostgreSQL |
+-----------------+
```
**技术栈:** Java 21, Spring Boot 3.5, React 18, TypeScript, Vite, Tailwind CSS, PostgreSQL 17
## 快速开始
前置条件:[Docker](https://docs.docker.com/get-docker/) 和 [Docker Compose](https://docs.docker.com/compose/install/)。
```
git clone https://github.com/holbein-io/ephor.git
cd ephor
docker compose up --build
```
打开 [http://localhost:3000](http://localhost:3000) 以访问仪表盘。
## 本地开发
### API
前置条件:JDK 21,一个运行中的 PostgreSQL 实例(或使用 Docker Compose 启动一个)。
```
# 仅启动 PostgreSQL
docker compose up postgres -d
# 运行 API
SPRING_PROFILES_ACTIVE=local ./gradlew :api:bootRun
```
API 地址为 `http://localhost:8080/api/v1`。
当 API 运行时,可在 `http://localhost:8080/api/v1/swagger-ui/index.html` 访问 API 文档。原始的 OpenAPI 规范可从 `http://localhost:8080/api/v1/api-docs` 获取。
### 仪表盘
前置条件:Node.js >= 22。
```
cd dashboard/app
npm install
npm run dev
```
仪表盘可在 `http://localhost:3000` 访问,并会自动将 `/api` 请求代理到端口 8080 上的 API。
### 运行测试
```
# API tests
./gradlew :api:test
# Dashboard tests
cd dashboard/app && npm test
```
## Kubernetes 部署
在 `charts/ephor/` 目录中提供了 Helm chart。
```
helm install ephor charts/ephor
```
### 关键配置值
| 值 | 描述 | 默认值 |
|---|---|---|
| `ingress.enabled` | 启用 ingress 资源 | `false` |
| `ingress.className` | Ingress 类名 | `""` |
| `postgresql.enabled` | 部署内置的 PostgreSQL | `true` |
| `externalDatabase.host` | 外部数据库主机名(当 `postgresql.enabled=false` 时) | `""` |
| `api.image.tag` | API 镜像标签 | Chart 的 `appVersion` |
| `dashboard.image.tag` | 仪表盘镜像标签 | Chart 的 `appVersion` |
| `api.resources.limits.memory` | API 内存限制 | `1Gi` |
要使用外部数据库代替内置的 PostgreSQL:
```
helm install ephor charts/ephor \
--set postgresql.enabled=false \
--set externalDatabase.host=db.example.com \
--set externalDatabase.password=secret
```
有关可配置值的完整列表,请参见 `charts/ephor/values.yaml`。
## 配置
所有运行时配置均遵循 12-Factor 方法论,并通过环境变量进行管理。
| 变量 | 描述 | 默认值 |
|---|---|---|
| `SPRING_DATASOURCE_URL` | JDBC 连接字符串 | `jdbc:postgresql://localhost:5432/ephor` |
| `SPRING_DATASOURCE_USERNAME` | 数据库用户名 | `ephor` |
| `SPRING_DATASOURCE_PASSWORD` | 数据库密码 | `ephor` |
| `AUTH_ENABLED` | 启用身份验证 | `true` |
| `AUTH_DEV_ENABLED` | 注入开发用户(绕过身份验证) | `false` |
| `LOGGING_STRUCTURED_FORMAT_CONSOLE` | 结构化日志格式(`ecs`、`logstash` 或留空) | _(无)_ |
| `PORT` | 服务器监听端口 | `8080` |
## 项目结构
```
ephor/
api/ Spring Boot API service
dashboard/app/ React dashboard (Vite + TypeScript)
charts/ephor/ Helm chart for Kubernetes deployment
docs/ Project documentation
docker-compose.yml
```
## 贡献
欢迎贡献代码。请阅读我们的[贡献指南](CONTRIBUTING.md)以了解开发工作流、提交约定和 Pull Request 流程的详细信息。
所有贡献者在他们的第一个 Pull Request 被接受之前,必须签署我们的[贡献者许可协议](CLA.md)。一个 GitHub Action 会自动引导您完成此流程。
## 许可证
本项目基于 [GNU Affero General Public License v3.0](LICENSE) 进行许可。
标签:Chrome Headless, CISA项目, DevSecOps, Docker, Docker Compose, GPT, HTTP/HTTPS抓包, Kubernetes安全, PDF链接提取, PostgreSQL, React, REST API, SLA合规, Spring Boot, Syscalls, TypeScript, Web截图, 上游代理, 域名枚举, 多架构镜像, 子域名突变, 安全仪表盘, 安全分类, 安全插件, 安全防御评估, 容器安全, 态势感知, 漏洞管理, 漏洞追踪, 自托管, 请求拦截