Replace sac.kalinamall.ru with sac.example.com in public docs/deploy. Remove Push-Mirror and Rewrite-GitHostUrls scripts from repo. Simplify workspace-three-repos.md for GitHub-only workflow. Co-authored-by: Cursor <cursoragent@cursor.com>
7.5 KiB
План работ — Security Alert Center
Актуальный порядок: сначала подготовка агентов (параллельно с минимальным SAC ingest), затем полный SAC MVP, затем prod rollout UseSAC=exclusive.
Фаза 0. Документация ✅
| # | Задача | Статус |
|---|---|---|
| 0.1–0.3 | ТЗ, архитектура, схема, deployment | ✅ |
| 0.5 | Репозиторий GitHub + prod deployment | ✅ |
| 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.example.com |
| 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 |
| 2.2 | Daily report / heartbeat через SAC |
| 2.3 | fallback на агентах |
Выход: v0.2.0.
Фаза 3. Эксплуатация
См. roadmap.md.
Ближайшие 2 дня (чеклист исполнения)
День 1
d1-1Ingest:event_idUUID обязателен, UNIQUE индекс, коды duplicate, логи, docs/schemad1-2MVP Problems: модель, корреляцияhost+type+окно, APIGET/ack/resolved1-3Правила v1:brute-force burst,privilege spike,host silence
День 2
d2-1UI Problems: список, фильтры,Ack/Resolve, карточка с таймлайномd2-2Dashboard: top hosts/types,open vs resolved 24h, drill-downd2-3Ops: retention, health checks, runbook backup/restore/deploydodDoD: нет дублейevent_id, Problems e2e, 3 правила, UI MVP, docs, push в prod
Отображение хостов (display_name, как SERVER_DISPLAY_NAME у ssh)
Сейчас: ssh — SERVER_DISPLAY_NAME только в Telegram; в SAC уходит socket.gethostname(). RDP — параметра нет, в SAC только $env:COMPUTERNAME. В SAC UI «Хосты» уже показывает display_name || hostname, если поле пришло в ingest.
agent-display-rdpRDP-login-monitor:$ServerDisplayNameвlogin_monitor.settings.ps1/ example; подпись в Telegram; вSac-Client.ps1—host.display_name(и при необходимости согласоватьhostname)agent-display-sshssh-monitor: вsac-client.shпередаватьSERVER_DISPLAY_NAMEкакhost.display_nameв JSON ingestsac-display-hostsSAC: проверить ingest/обновлениеHost.display_name; колонка «Хосты» = человекочитаемое имя; поиск поdisplay_name;docs/agent-integration.md+ schemahost.display_name
Приёмка: хост с SERVER_DISPLAY_NAME="UNMS Kalina" (или RDP $ServerDisplayName) в SAC → Хосты отображается как UNMS Kalina, а не только короткое имя ОС.
Почасовой чеклист
День 1
09:00–10:00миграцияevent_id+ UNIQUE, валидация ingest10:00–11:00поведение duplicate (201/409) и логирование reject11:00–12:00обновитьevent-schema-v1.jsonиagent-integration.md(в т.ч.host.display_nameдля агентов)13:00–14:30модель Problems + миграция14:30–16:00корреляция при ingest (fingerprint,count,last_seen)16:00–17:30APIGET /problems,ack,resolve+ smoke18:00–19:00правилаbrute/privilege/silence+ unit tests
День 2
09:00–11:00UI Problems: таблица + фильтры (status/severity/host)11:00–12:00карточка проблемы + таймлайн событий13:00–14:30Dashboard: виджеты top hosts/types14:30–16:00Dashboard:open/resolved 24h+ drill-down16:00–17:00retention job (events 30–90d,problems 180d+)17:00–18:00health checks (DB/worker/heartbeat stale)18:00–19:00runbook + финальный push в prod + freeze dev
Неделя после freeze (только тестирование)
Чеклист: testing-e2e-checklist.md
дни 1–2функциональные E2E (RDP + SSH + mixed load)дни 3–4нагрузка, дубликаты, флаппинг heartbeatдень 5регресс + known issuesдни 6–7soak-test, только bugfix
Gantt (упрощённо)
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
Следующий рабочий день (29.05.2026)
Оповещения SAC (notif-01…32) — ✅ см. todo-2026-05-29.md. На prod: деплой, notif-02 E2E, timer sac-daily-report.
Отложенная аналитика: analytics-backlog.md.
См. также
- install-ubuntu-24.04.md — подготовка сервера
- operations-prod-status.md — статус prod и деплой
- roadmap.md
- TZ.md