SeifMoussa/secure-incident-api-lab
GitHub: SeifMoussa/secure-incident-api-lab
用于防御性安全事件管理的生产级模式 FastAPI 后端实验项目,展示安全运营工作流与应用安全工程最佳实践。
Stars: 0 | Forks: 0
# 安全事件管理 API
用于防御性安全事件管理的生产级 FastAPI 后端。
这是一个防御性作品集实验项目,而非已部署的生产级 SOC 平台。它仅使用合成/演示数据。请勿使用真实的凭证、真实的 token、真实的客户事件数据或真实的证据文件。
## 本项目展示的内容
安全事件管理 API 展示了安全运营工作流的后端与应用安全工程模式:
- FastAPI 应用工厂。
- SQLAlchemy ORM 模型与 Alembic 基线迁移。
- 带有 access 和 refresh token 的 JWT 认证。
- Refresh-token JTI 黑名单。
- 密码哈希、密码策略以及常见密码拒绝。
- 针对 ADMIN、ANALYST、VIEWER 和 AUDITOR 角色的 RBAC。
- 仅限 ADMIN 的用户管理。
- 事件 CRUD、过滤、分页与软删除。
- 嵌套工单、证据备注、仅元数据附件以及修复任务。
- 中间件驱动的审计日志和事件时间线。
- 速率限制、安全标头、CORS 白名单以及生产环境文档开关。
- 严格校验、防止批量赋值以及安全的校验错误。
- STRIDE 威胁模型与 API 参考。
- OpenAPI 导出。
- Pytest 覆盖率、Ruff lint/格式检查、GitHub Actions 配置、CodeQL 配置以及 Dependabot 配置。
## 目标角色
本项目专为以下相关角色设计:
- 后端开发人员。
- 初级安全工程师。
- SOC 自动化分析师。
- 蓝队分析师。
- 应用安全实习生。
- DevSecOps 实习生。
## 功能摘要
已实现的端点分组:
- 常规:`/`, `/health`
- 认证:`/auth/register`, `/auth/login`, `/auth/refresh`, `/auth/logout`, `/auth/me`
- 管理员用户:`/admin/users/`, `/admin/users/{uid}`, `/admin/users/{uid}/role`
- 事件:`/incidents/`, `/incidents/{incident_id}`, `/incidents/{incident_id}/timeline`
- 工单:`/incidents/{incident_id}/tickets/`
- 证据备注:`/incidents/{incident_id}/evidence/`
- 修复任务:`/incidents/{incident_id}/remediation/`
- 审计读取:`/audit/`
证据附件仅包含元数据。没有二进制上传、文件存储以及针对证据的磁盘文件读取。
## 架构概览
```
app/
admin/ ADMIN-only user management
audit/ audit middleware, sanitizer, schemas, read API
auth/ registration, login, refresh, logout, JWT helpers
common/ shared enums, pagination, dependencies, validation, errors
evidence/ evidence notes and metadata-only attachment workflows
incidents/ incident CRUD and timeline
remediation/ remediation task workflows
security/ headers, CORS, rate limiting, middleware registration
tickets/ ticket workflows
alembic/ baseline migration
docs/ security, API, testing, Agile, CI/CD, release docs
tests/ unit, integration, security, docs, workflow tests
```
该应用在 API 边界使用严格的 Pydantic schema,在服务层使用业务规则,并结合了 SQLAlchemy ORM/查询构建器模式,以及在开发和测试中使用本地 SQLite。
## 安全模型
- JWT bearer 认证保护运营端点。
- Refresh token 是有类型的,并在注销时通过 JTI 加入黑名单。
- 授权使用当前的数据库用户状态,因此停用和角色更改会立即生效。
- RBAC 控制 ADMIN、ANALYST、VIEWER 和 AUDITOR 的权限。
- 写入请求通过中间件记录审计日志,并包含经过净化的元数据。
- 敏感字段会从响应、校验错误、审计日志、文档和测试中排除或脱敏。
- CORS 默认使用明确的本地白名单以及安全的生产环境空白白名单。
- API 响应会应用安全标头。
- 在正常配置下,速率限制会保护登录和常规端点。
- 生产环境设置会禁用交互式 API 文档,并拒绝占位符 JWT 密钥。
## RBAC 矩阵
| 功能 | ADMIN | ANALYST | VIEWER | AUDITOR |
| --- | --- | --- | --- | --- |
| 登录/refresh/logout/me | 是 | 是 | 是 | 是 |
| 列出/查看用户 | 是 | 否 | 否 | 否 |
| 更改用户角色 | 是 | 否 | 否 | 否 |
| 停用用户 | 是 | 否 | 否 | 否 |
| 创建事件 | 是 | 是 | 否 | 否 |
| 读取事件 | 是 | 是 | 是 | 是 |
| 更新事件 | 是 | 是 | 否 | 否 |
| 软删除事件 | 是 | 否 | 否 | 否 |
| 查看事件时间线 | 是 | 是 | 是 | 是 |
| 创建/更新/删除工单 | 是 | 是 | 否 | 否 |
| 读取工单 | 是 | 是 | 是 | 是 |
| 创建证据备注 | 是 | 是 | 否 | 否 |
| 更新证据备注 | 是 | 仅限自己 | 否 | 否 |
| 删除证据备注 | 是 | 否 | 否 | 否 |
| 读取证据备注 | 是 | 是 | 是 | 是 |
| 创建/更新/删除修复任务 | 是 | 是 | 否 | 否 |
| 读取修复任务 | 是 | 是 | 是 | 是 |
| 读取审计日志 | 是 | 否 | 否 | 是 |
## 审计日志
针对写入请求,审计日志由中间件驱动。它会记录安全的元数据,例如操作者、动作、资源类型、资源 ID、时间戳、可用时的客户端主机、结果以及经过净化的更改摘要。
审计日志绝不会故意存储密码、密码哈希、access token、refresh token、authorization header、API 密钥、JWT 密钥、cookie、原始 token 或类似机密的值。审计读取权限仅限 ADMIN/AUDITOR。不存在任何审计修改路由。
## 本地设置
```
python -m venv .venv
.venv\Scripts\activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
```
请仅使用占位符本地设置。请勿在 `.env` 中放入真实的机密。
```
copy .env.example .env
```
## 本地质量检查命令
```
python scripts/export_openapi.py
python scripts/check-docs.py
python -m py_compile scripts/export_openapi.py scripts/check-docs.py
python -m pytest
python -m pytest --cov=app --cov-report=term-missing --cov-fail-under=95
python -m ruff check .
python -m ruff format --check .
python -m uvicorn app.main:create_app --factory --help
python -m alembic upgrade head
python -m alembic current
```
## 当前本地质量状态
最新的本地阶段 12 验证:
- 测试:248 通过。
- 覆盖率:95.60%。
- 覆盖率门槛:95%。
- Ruff:通过。
- 格式检查:通过。
- 文档安全性:通过。
- OpenAPI 导出:通过。
- Alembic SQLite upgrade/current:通过。
托管的 GitHub Actions 和托管的 CodeQL 已在本地配置,但由于仓库尚未发布,因此尚未验证。
## 文档
- [STRIDE 威胁模型](docs/threat_model.md)
- [API 参考](docs/api_reference.md)
- [OpenAPI JSON](docs/openapi.json)
- [CI/CD 配置](docs/ci-cd.md)
- [发布检查清单](docs/release-checklist.md)
- [敏捷规划文档](docs/agile/README.md)
- [安全范围](docs/security-scope.md)
- [测试计划](docs/testing-plan.md)
## 限制
- 这是一个作品集实验项目,而非已部署的生产级 SOC 平台。
- 不包含真正的生产环境部署、监控、备份、灾难恢复或合规性审查。
- 开发和测试使用本地 SQLite。
- 内存中的速率限制不是分布式的。
- 审计日志通过 API 设为仅可追加,但未实现外部不可变审计存储。
- GitHub 托管的 CI、CodeQL、Dependabot PR、分支保护、tag、release、活跃的 Issue 以及活跃的 Project 均有待发布后进行。
## 路线图
- 阶段 12:本地敏捷与发布准备材料已完成。
- 阶段 13:初始化 git,发布至 GitHub,验证托管的 CI/CodeQL,创建活跃的 Issue/Project,配置分支保护,标记 `v0.1.0`,并创建 GitHub release。
## 许可证
MIT。详见 [LICENSE](LICENSE)。
标签:AV绕过, DevSecOps, FastAPI, 上游代理, 后端开发, 安全事件管理, 应用安全工程, 身份认证与权限控制, 逆向工具