alfonza1/incident-sim
GitHub: alfonza1/incident-sim
一款实战型生产事件响应模拟器,让工程师在真实压力下通过终端、遥测和拓扑排查并修复故障场景。
Stars: 0 | Forks: 0
# 关键响应
Critical Response 是一款专为软件工程师和安全响应人员设计的实战型事件响应模拟器。玩家可以通过终端、操作手册、遥测数据、代码库历史、服务拓扑以及模拟的高管消息来调查真实的生产环境故障——随后诊断根本原因、进行修复、验证恢复情况并最终解决事件。
## 产品预览
## 玩家将练习的内容
- **标准响应 (Standard Response)** — 涉及部署、数据库、分布式系统、队列、缓存、网络和区域基础设施的软件工程事件。
- **安全响应 (Security Response)** — 凭证滥用、暴露的基础设施、供应链攻击、授权失效、数据泄露和遏制。
- **黑盒模式 (Blackout)** — 封闭的软件、安全或混合型事件,在验收通过之前,标题和症状均处于隐藏状态。
- **受控 (Controlled)、生产 (Production) 和关键 (Critical) 严重级别** — 调查深度、证据要求、拓扑、干扰信息、响应窗口和恢复检查会随难度进行动态扩展。
当前目录包含 **56 个场景**。这些事件模拟了真实的服务规模、请求量、区域、部署池、依赖关系、客户影响、时间戳以及多种看似合理的修复路径。
该模拟器奖励的是高质量的响应过程,而非某条神奇的命令。一个安全的回滚操作可以通过测试,而经过充分测试的向前修复、金丝雀发布、区域性遏制或更高效的恢复路径,在所模拟的系统支持的情况下,可以获得更高的分数。难度较高的事件还会增加诱饵证据、嘈杂的日志、多区域行为、部署池、依赖项遥测、对时间戳敏感的线索,以及具有不同客户影响权衡的修复方案选择。
## 系统架构
```
flowchart LR
player([Player])
ui[React + Vite client]
auth[Firebase Authentication]
api[Express + TypeScript API]
catalog[Scenario catalog]
engine[Session + incident engine]
shell[Virtual shell + evidence model]
scoring[Diagnosis, remediation + scoring]
store[Bounded application store]
postgres[(Postgres snapshot)]
player --> ui
ui <-->|Google sign-in| auth
ui -->|Bearer token + JSON API| api
auth -->|Token verification| api
api --> catalog
api --> engine
engine --> shell
engine --> scoring
catalog --> engine
api --> store
engine --> store
store -->|Durable JSONB snapshot| postgres
```
API 负责场景展示、特定账户的 Blackout 队列、会话时钟、终端命令、评分、用户资料、徽章和排行榜排名。活跃状态保存在有限的内存存储中,以实现流畅的 shell 交互,并同时写入持久的 Postgres 快照中。
## 数据模型
```
erDiagram
OPERATOR ||--o{ SESSION : runs
SCENARIO ||--o{ SESSION : instantiates
SESSION ||--o| DIAGNOSIS : records
SESSION ||--o| REMEDIATION : applies
SESSION ||--o{ INCIDENT_MESSAGE : receives
SESSION ||--o| SCORE : produces
OPERATOR ||--o{ BADGE_PIN : selects
BADGE ||--o{ BADGE_PIN : appears_in
OPERATOR ||--o{ COMPLETED_SCENARIO : clears
SCENARIO ||--o{ COMPLETED_SCENARIO : completed_as
OPERATOR {
string id PK
string username
string provider
boolean profilePublic
string location
string linkedinUrl
string githubUrl
string websiteUrl
}
SCENARIO {
string id PK
string mode
string track
string severity
json scale
json topology
}
SESSION {
string id PK
string incidentId
string status
int startedAt
int finishedAt
int commandCount
}
DIAGNOSIS {
string text
boolean correct
int qualityScore
}
REMEDIATION {
string label
string quality
}
SCORE {
int total
int diagnosisPoints
int remediationPoints
int efficiencyPoints
}
INCIDENT_MESSAGE {
int level
string sender
boolean acknowledged
}
BADGE {
string id PK
string category
int target
int prestige
}
BADGE_PIN {
string operatorId
string badgeId
int position
}
COMPLETED_SCENARIO {
string operatorId
string scenarioId
}
```
徽章资格、工程级别、实时排名、前百分比和排行榜名次均根据已完成的会话推导得出。只有操作者选定的五个徽章胸针会直接存储在个人资料中。
## 本地开发
### Docker Compose
```
docker compose up --build
```
打开:
- 前端:http://localhost:5173
- API 健康状态:http://localhost:4000/api/health
Docker Compose 会启动带有健康检查和持久化本地卷的前端和后端。
### 原生开发
```
# Terminal 1
cd backend
npm install
npm run dev
# Terminal 2
cd frontend
npm install
npm run dev
```
前端在端口 `5173` 上运行,并将 API 请求代理到端口 `4000`。
## 验证
```
# Backend
cd backend
npm run typecheck
npm test
npm run build
# Frontend
cd frontend
npm run typecheck
npm test
npm run build -- --mode uat
npm run test:e2e
# 部署镜像
cd ..
docker compose build
```
当前的验证覆盖范围:
- **160 个后端测试**
- **50 个前端测试**
- **14 个 Playwright 端到端测试**
- 后端和前端的生产构建
- Docker 镜像构建
- 实时 UAT 认证、CORS、健康状态、Pages 和持久化冒烟测试
## 更多文档
- [架构与部署](ARCHITECTURE.md)
- [UAT 基础设施](docs/UAT_INFRASTRUCTURE.md)
- [分支管理与发布](docs/BRANCHING_AND_RELEASES.md)
- [Firebase 身份验证](docs/firebase-auth.md)
- [完整的账户与基础设施设置](docs/ACCOUNT_AND_INFRASTRUCTURE_SETUP.md)
- [场景编写技能](.agents/skills/incident-sim-scenario-author/SKILL.md)
Train against realistic production pressure
|
Choose your response discipline
|
Select a modeled active incident
|
Investigate and remediate in the live shell
|
标签:自动化攻击, 请求拦截