d4bf6e536c
Co-authored-by: Cursor <cursoragent@cursor.com>
162 lines
7.1 KiB
Markdown
162 lines
7.1 KiB
Markdown
# План работ — Security Alert Center
|
||
|
||
**Актуальный порядок:** сначала подготовка агентов (параллельно с минимальным SAC ingest), затем полный SAC MVP, затем prod rollout `UseSAC=exclusive`.
|
||
|
||
---
|
||
|
||
## Фаза 0. Документация ✅
|
||
|
||
| # | Задача | Статус |
|
||
|---|--------|--------|
|
||
| 0.1–0.3 | ТЗ, архитектура, схема, deployment | ✅ |
|
||
| 0.5 | Репозиторий git.kalinamall.ru | ✅ |
|
||
| 0.6 | Multi-root workspace | ✅ |
|
||
|
||
---
|
||
|
||
## Фаза 1A. Агенты — контракт SAC (параллельно с 1B)
|
||
|
||
**Репозитории:** `ssh-monitor`, `RDP-login-monitor`
|
||
**Прод:** везде `UseSAC=off` по умолчанию.
|
||
|
||
| # | Задача | Статус |
|
||
|---|--------|--------|
|
||
| 1A.1 | Параметры `UseSAC`, `SAC_URL`, `SAC_API_KEY`, spool | ✅ ssh-monitor |
|
||
| 1A.2 | `build_sac_event()` + `send_sac_event()` по schema v1 | ✅ `sac-client.sh` |
|
||
| 1A.3 | `notify_or_sac()`: off / dual / exclusive / fallback | ✅ + маппинг событий |
|
||
| 1A.4 | `--check-sac` / `Test-SacConnection` | ✅ ssh-monitor `--check-sac` |
|
||
| 1A.5 | README агентов, first deploy | ✅ `first_deploy.sh`, `--deploy` |
|
||
|
||
**Выход:** на тестовом хосте `dual` шлёт JSON в SAC + Telegram.
|
||
|
||
---
|
||
|
||
## Фаза 1B. SAC — минимальный ingest ✅ (prod)
|
||
|
||
| # | Задача | Статус |
|
||
|---|--------|--------|
|
||
| 1B.1 | Scaffold backend FastAPI | ✅ |
|
||
| 1B.2 | PostgreSQL + Alembic (hosts, events, api_keys) | ✅ |
|
||
| 1B.3 | `POST /api/v1/events`, `GET /health` | ✅ prod `sac.kalinamall.ru` |
|
||
| 1B.4 | systemd + nginx + TLS | ✅ |
|
||
| 1B.5 | Валидация JSON Schema v1 | ✅ |
|
||
|
||
**Выход:** ingest с curl и UI на prod — достигнут.
|
||
|
||
---
|
||
|
||
## Фаза 1C. SAC — MVP UI и оповещения
|
||
|
||
| # | Задача | Статус |
|
||
|---|--------|--------|
|
||
| 1C.1 | Frontend Vue: Events, Hosts | ✅ prod |
|
||
| 1C.2 | Auth JWT, admin bootstrap | ✅ prod |
|
||
| 1C.3 | Problems (базовые правила) | ✅ API + UI (деплой ⏳) |
|
||
| 1C.4 | Telegram из SAC | ✅ backend (деплой + TELEGRAM_* в env) |
|
||
| 1C.5 | Dashboard (3 виджета), SSE | ✅ v0.2.0 |
|
||
|
||
**Выход:** тег `v0.2.0-mvp`.
|
||
|
||
---
|
||
|
||
## Фаза 2. Пилот и exclusive
|
||
|
||
| # | Задача |
|
||
|---|--------|
|
||
| 2.1 | E2E: 1 Linux + 1 Windows, `UseSAC=exclusive` | ✅ Linux [pilot-2.1-exclusive.md](pilot-2.1-exclusive.md) |
|
||
| 2.2 | Daily report / heartbeat через SAC | ✅ [pilot-2.2-heartbeat-reports.md](pilot-2.2-heartbeat-reports.md) |
|
||
| 2.3 | fallback на агентах | ✅ счётчик `SAC_FALLBACK_FAILURES` в sac-client |
|
||
|
||
**Выход:** `v0.2.0`.
|
||
|
||
---
|
||
|
||
## Фаза 3. Эксплуатация
|
||
|
||
См. [roadmap.md](roadmap.md).
|
||
|
||
---
|
||
|
||
## Ближайшие 2 дня (чеклист исполнения)
|
||
|
||
### День 1
|
||
|
||
- [x] `d1-1` Ingest: `event_id` UUID обязателен, UNIQUE индекс, коды duplicate, логи, docs/schema
|
||
- [x] `d1-2` MVP Problems: модель, корреляция `host+type+окно`, API `GET/ack/resolve`
|
||
- [x] `d1-3` Правила v1: `brute-force burst`, `privilege spike`, `host silence`
|
||
|
||
### День 2
|
||
|
||
- [x] `d2-1` UI Problems: список, фильтры, `Ack/Resolve`, карточка с таймлайном
|
||
- [x] `d2-2` Dashboard: top hosts/types, `open vs resolved 24h`, drill-down
|
||
- [x] `d2-3` Ops: retention, health checks, runbook backup/restore/deploy
|
||
- [x] `dod` DoD: нет дублей `event_id`, Problems e2e, 3 правила, UI MVP, docs, push в kalinamall
|
||
|
||
### Отображение хостов (`display_name`, как `SERVER_DISPLAY_NAME` у ssh)
|
||
|
||
Сейчас: **ssh** — `SERVER_DISPLAY_NAME` только в Telegram; в SAC уходит `socket.gethostname()`. **RDP** — параметра нет, в SAC только `$env:COMPUTERNAME`. В SAC UI «Хосты» уже показывает `display_name || hostname`, если поле пришло в ingest.
|
||
|
||
- [x] `agent-display-rdp` **RDP-login-monitor:** `$ServerDisplayName` в `login_monitor.settings.ps1` / example; подпись в Telegram; в `Sac-Client.ps1` — `host.display_name` (и при необходимости согласовать `hostname`)
|
||
- [x] `agent-display-ssh` **ssh-monitor:** в `sac-client.sh` передавать `SERVER_DISPLAY_NAME` как `host.display_name` в JSON ingest
|
||
- [x] `sac-display-hosts` **SAC:** проверить ingest/обновление `Host.display_name`; колонка «Хосты» = человекочитаемое имя; поиск по `display_name`; `docs/agent-integration.md` + schema `host.display_name`
|
||
|
||
**Приёмка:** хост с `SERVER_DISPLAY_NAME="UNMS Kalina"` (или RDP `$ServerDisplayName`) в SAC → **Хосты** отображается как **UNMS Kalina**, а не только короткое имя ОС.
|
||
|
||
### Почасовой чеклист
|
||
|
||
#### День 1
|
||
|
||
- [x] `09:00–10:00` миграция `event_id` + UNIQUE, валидация ingest
|
||
- [x] `10:00–11:00` поведение duplicate (`201/409`) и логирование reject
|
||
- [x] `11:00–12:00` обновить `event-schema-v1.json` и `agent-integration.md` (в т.ч. `host.display_name` для агентов)
|
||
- [x] `13:00–14:30` модель Problems + миграция
|
||
- [x] `14:30–16:00` корреляция при ingest (`fingerprint`, `count`, `last_seen`)
|
||
- [x] `16:00–17:30` API `GET /problems`, `ack`, `resolve` + smoke
|
||
- [x] `18:00–19:00` правила `brute/privilege/silence` + unit tests
|
||
|
||
#### День 2
|
||
|
||
- [x] `09:00–11:00` UI Problems: таблица + фильтры (`status/severity/host`)
|
||
- [x] `11:00–12:00` карточка проблемы + таймлайн событий
|
||
- [x] `13:00–14:30` Dashboard: виджеты top hosts/types
|
||
- [x] `14:30–16:00` Dashboard: `open/resolved 24h` + drill-down
|
||
- [x] `16:00–17:00` retention job (`events 30–90d`, `problems 180d+`)
|
||
- [x] `17:00–18:00` health checks (DB/worker/heartbeat stale)
|
||
- [x] `18:00–19:00` runbook + финальный push в kalinamall + freeze dev
|
||
|
||
### Неделя после freeze (только тестирование)
|
||
|
||
- [ ] `дни 1–2` функциональные E2E (`RDP + SSH + mixed load`)
|
||
- [ ] `дни 3–4` нагрузка, дубликаты, флаппинг heartbeat
|
||
- [ ] `день 5` регресс + known issues
|
||
- [ ] `дни 6–7` soak-test, только bugfix
|
||
|
||
---
|
||
|
||
## Gantt (упрощённо)
|
||
|
||
```mermaid
|
||
gantt
|
||
title SAC — актуальный план
|
||
dateFormat YYYY-MM-DD
|
||
section Документы
|
||
Фаза 0 :done, 2026-05-26, 1d
|
||
section SAC
|
||
1B ingest+deploy :done, 2026-05-26, 1d
|
||
1C UI базовый :done, 2026-05-26, 1d
|
||
1C notify+dash :active, 2026-05-27, 14d
|
||
section Агенты
|
||
1A UseSAC dual :2026-05-26, 10d
|
||
section Prod
|
||
Пилот exclusive :2026-06-16, 7d
|
||
```
|
||
|
||
---
|
||
|
||
## См. также
|
||
|
||
- [install-ubuntu-24.04.md](install-ubuntu-24.04.md) — подготовка сервера
|
||
- [operations-prod-status.md](operations-prod-status.md) — статус prod и деплой
|
||
- [roadmap.md](roadmap.md)
|
||
- [TZ.md](TZ.md)
|