sandeepbollavaram/oci-sentinelmesh
GitHub: sandeepbollavaram/oci-sentinelmesh
面向 Oracle Cloud Infrastructure 的自主健康与合规监控代理,通过本地模拟遥测和规则引擎检测云资源配置异常并生成可解释警报。
Stars: 0 | Forks: 0
# OCI-SentinelMesh
[](https://github.com/sandeepbollavaram/oci-sentinelmesh/actions/workflows/ci.yml)
OCI-SentinelMesh 是一个针对 Oracle Cloud Infrastructure 的自主云健康与合规性监控代理。该项目旨在观察 OCI 资源健康状况,检测异常或不合规状态,将检测结果与合规规则进行匹配,并为运维人员生成可解释的警报,同时保持补救措施处于可控和选择性启用的状态。
## 计划架构
- **Collector:** 收集 OCI 健康、清单、配置和事件数据。
- **Compliance:** 将观察到的状态映射到本地合规规则和策略检查。
- **Agent:** 协调检测、解释、警报以及未来的补救工作流。
- **API:** 为结果、规则、解释和集成提供后端服务。
- **Dashboard:** 提供面向用户的健康、合规性和警报视图。
- **Database:** 存储结果、规则元数据、审计历史和配置。
- **Deploy:** 包含系统准备就绪后的 Kubernetes 和 Helm 部署资产。
## 安全优先设计
本代码库以模拟/本地优先的方式启动。其中严禁包含真实的 Oracle 凭据、密钥、wallet 文件、租户标识符、私钥或付费云资源定义。早期开发应使用模拟数据、本地测试数据(fixtures)和只读假设。在设计并审查监控、规则匹配、解释和安全控制之前,自动修复将明确排除在范围之外。
## 当前状态
v0.2 本地模拟扫描器基础。该代码库目前包含项目结构、初始文档、本地安全配置示例、确定性模拟遥测收集器以及一个简单的合规扫描器。
## v0.2 本地模拟扫描
v0.2 工作流完全基于本地模拟数据运行。它不会调用 OCI API、不需要 Oracle 凭据、不创建云资源,也不执行修复。
运行模拟扫描:
```
python scripts\mock_scan.py
```
运行测试:
```
python -m unittest discover -s tests
```
目前,模拟扫描会针对公开的存储桶、过高的计算 CPU 使用率、宽泛的 IAM 管理员策略变更以及公开的 SSH 入站流量发出 JSON 警报。
## v0.3 FastAPI 后端
v0.3 后端通过 REST API 暴露了相同的本地模拟收集器和合规扫描器。它仍仅限于模拟数据,不会连接到 OCI。
安装依赖项:
```
python -m pip install -r requirements.txt
```
运行 API:
```
uvicorn apps.api.main:app --reload
```
端点:
- `GET /health` 返回服务状态。
- `GET /telemetry` 返回所有模拟遥测项。
- `GET /alerts` 返回来自模拟遥测的合规警报。
- `POST /scan` 运行完整的模拟扫描,并返回包含警报在内的遥测和警报计数。
运行测试:
```
pytest
```
## v0.4 合规严重性规则引擎
v0.4 扫描器使用一个小型基于严重性的规则引擎,具有稳定的规则 ID、类别和更丰富的警报输出。警报现在包含 `alert_id`、`rule_id`、`category`、`resource_id`、`resource_type`、`severity`、`title`、`description`、`recommendation` 和 `timestamp`。
添加的规则:
- `STORAGE_PUBLIC_ACCESS`
- `COMPUTE_HIGH_CPU`
- `IAM_BROAD_ADMIN`
- `NETWORK_PUBLIC_SSH`
- `NETWORK_PUBLIC_DATABASE_PORT`
- `STORAGE_UNENCRYPTED_BUCKET`
- `COMPUTE_MISSING_TAGS`
- `IAM_POLICY_CHANGE_AFTER_HOURS`
严重性模型:
- `LOW`
- `MEDIUM`
- `HIGH`
- `CRITICAL`
安全提示:v0.4 仅支持发出警报。它使用确定性的本地模拟遥测数据,不调用 OCI API,不需要凭据,不创建资源,也不执行修复。
## v0.5 Dashboard
v0.5 Dashboard 是一个基于 React + TypeScript 的 Vite 应用,它从现有的模拟 FastAPI 后端读取数据。它在本地优先的企业级 Dashboard UI 中展示系统状态、扫描摘要、严重性总计、警报和遥测信息。
运行后端:
```
uvicorn apps.api.main:app --reload
```
安装前端依赖项:
```
cd apps\dashboard
npm install
```
运行 Dashboard:
```
npm run dev
```
Dashboard 的 npm 命令应在 `apps/dashboard` 目录下运行,因为 `package.json` 位于该目录下。如果从代码库根目录运行 `npm run build` 将会失败。
```
cd apps\dashboard
npm run build
```
通过以下方式配置 API 基础 URL:
```
VITE_API_BASE_URL=http://127.0.0.1:8000
```
安全提示:v0.5 依然保持模拟/本地优先。Dashboard 仅调用本地的 FastAPI 端点,不会调用 OCI API、不需要凭据、不创建资源,也不执行修复。
## v0.6 SQLite 持久化与审计日志
v0.6 后端可以将本地模拟扫描历史持久化到 SQLite 中。启用后,每次 `POST /scan` 都会存储扫描运行记录、遥测快照、生成的警报以及一条审计日志条目。
环境变量:
```
OCI_SENTINEL_DB_PATH=./data/oci-sentinelmesh.db
OCI_SENTINEL_PERSISTENCE_ENABLED=true
```
在开启持久化的情况下运行 API:
```
$env:OCI_SENTINEL_PERSISTENCE_ENABLED="true"
$env:OCI_SENTINEL_DB_PATH="./data/oci-sentinelmesh.db"
uvicorn apps.api.main:app --reload
```
运行一次持久化扫描:
```
Invoke-RestMethod -Method Post -Uri http://127.0.0.1:8000/scan
```
查看扫描历史:
```
Invoke-RestMethod -Uri http://127.0.0.1:8000/scan-runs
Invoke-RestMethod -Uri http://127.0.0.1:8000/audit-log
```
新的 API 端点:
- `GET /scan-runs` 返回最近持久化的扫描运行记录。
- `GET /scan-runs/{scan_id}` 返回单次扫描运行记录及其遥测事件和警报。
- `GET /audit-log` 返回最近的审计日志条目。
安全提示:v0.6 仅使用本地 SQLite。目前还不需要 Oracle Database,未调用真实的 OCI API,无需凭据,不创建云资源,也不执行自动修复。
## v0.7 Docker Compose 开发者环境配置
v0.7 开发者环境配置通过 Docker Compose 同时运行 FastAPI API 和 React Dashboard。前置条件:Docker Desktop。
启动本地技术栈:
```
docker compose up --build
```
本地 URL:
- API 健康检查:`http://127.0.0.1:8000/health`
- API 文档:`http://127.0.0.1:8000/docs`
- Dashboard:`http://127.0.0.1:5173`
SQLite 扫描历史会在以下位置进行本地持久化:
```
./data/oci-sentinelmesh.db
```
停止技术栈:
```
docker compose down
```
仅在您确实希望删除本地数据时才重置本地扫描历史:
```
Remove-Item -Recurse -Force .\data
```
安全提示:v0.7 依然保持模拟/本地优先。Docker Compose 不会调用真实的 OCI API,不需要凭据,不创建云资源,也不执行自动修复。
## v0.8 Kubernetes 和 Helm 部署
v0.8 部署脚手架支持诸如 Docker Desktop Kubernetes、Minikube 或 Kind 等本地 Kubernetes 集群。相同的本地/模拟优先容器也可以适配未来的 OKE 风格环境。
构建本地 Docker 镜像:
```
docker build -f apps/api/Dockerfile -t oci-sentinelmesh-api:local .
docker build -f apps/dashboard/Dockerfile -t oci-sentinelmesh-dashboard:local apps/dashboard
```
应用原生 Kubernetes 清单:
```
kubectl apply -k deploy/k8s
```
使用 Helm 安装:
```
helm install oci-sentinelmesh deploy/helm/oci-sentinelmesh
```
端口转发 API:
```
kubectl -n oci-sentinelmesh port-forward svc/oci-sentinelmesh-api 8000:8000
```
端口转发 Dashboard:
```
kubectl -n oci-sentinelmesh port-forward svc/oci-sentinelmesh-dashboard 5173:5173
```
本地 URL:
- API 健康检查:`http://127.0.0.1:8000/health`
- API 文档:`http://127.0.0.1:8000/docs`
- Dashboard:`http://127.0.0.1:5173`
卸载:
```
helm uninstall oci-sentinelmesh -n oci-sentinelmesh
kubectl delete namespace oci-sentinelmesh
```
安全提示:v0.8 依然保持本地/模拟优先。它不会调用真实的 OCI API,不需要凭据,不创建云资源,也不执行自动修复。
## 计划技术栈
- Python
- FastAPI
- React
- TypeScript
- Oracle Cloud Infrastructure SDK
- Oracle Database 或 Oracle Autonomous Database
- Kubernetes
- Helm
## 本地开发
请仅将 `.env.example` 作为本地模拟值的模板使用。需要时将其复制为 `.env`,并确保 `.env` 不被追踪(untracked)。在脚手架阶段,请勿连接到实际的 OCI API 或创建云资源。
标签:Oracle云, 云计算, 子域名突变, 版权保护, 规则引擎, 运维监控, 逆向工具