Files
security-alert-center/docs/work-plan.md
T

7.5 KiB
Raw Blame History

План работ — Security Alert Center

Актуальный порядок: сначала подготовка агентов (параллельно с минимальным SAC ingest), затем полный SAC MVP, затем prod rollout UseSAC=exclusive.


Фаза 0. Документация

# Задача Статус
0.10.3 ТЗ, архитектура, схема, deployment
0.5 Репозиторий GitHub + зеркало kalinamall
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
2.2 Daily report / heartbeat через SAC
2.3 fallback на агентах

Выход: v0.2.0.


Фаза 3. Эксплуатация

См. roadmap.md.


Ближайшие 2 дня (чеклист исполнения)

День 1

  • d1-1 Ingest: event_id UUID обязателен, UNIQUE индекс, коды duplicate, логи, docs/schema
  • d1-2 MVP Problems: модель, корреляция host+type+окно, API GET/ack/resolve
  • d1-3 Правила v1: brute-force burst, privilege spike, host silence

День 2

  • d2-1 UI Problems: список, фильтры, Ack/Resolve, карточка с таймлайном
  • d2-2 Dashboard: top hosts/types, open vs resolved 24h, drill-down
  • d2-3 Ops: retention, health checks, runbook backup/restore/deploy
  • dod DoD: нет дублей event_id, Problems e2e, 3 правила, UI MVP, docs, push в kalinamall

Отображение хостов (display_name, как SERVER_DISPLAY_NAME у ssh)

Сейчас: sshSERVER_DISPLAY_NAME только в Telegram; в SAC уходит socket.gethostname(). RDP — параметра нет, в SAC только $env:COMPUTERNAME. В SAC UI «Хосты» уже показывает display_name || hostname, если поле пришло в ingest.

  • agent-display-rdp RDP-login-monitor: $ServerDisplayName в login_monitor.settings.ps1 / example; подпись в Telegram; в Sac-Client.ps1host.display_name (и при необходимости согласовать hostname)
  • agent-display-ssh ssh-monitor: в sac-client.sh передавать SERVER_DISPLAY_NAME как host.display_name в JSON ingest
  • 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

  • 09:0010:00 миграция event_id + UNIQUE, валидация ingest
  • 10:0011:00 поведение duplicate (201/409) и логирование reject
  • 11:0012:00 обновить event-schema-v1.json и agent-integration.md (в т.ч. host.display_name для агентов)
  • 13:0014:30 модель Problems + миграция
  • 14:3016:00 корреляция при ingest (fingerprint, count, last_seen)
  • 16:0017:30 API GET /problems, ack, resolve + smoke
  • 18:0019:00 правила brute/privilege/silence + unit tests

День 2

  • 09:0011:00 UI Problems: таблица + фильтры (status/severity/host)
  • 11:0012:00 карточка проблемы + таймлайн событий
  • 13:0014:30 Dashboard: виджеты top hosts/types
  • 14:3016:00 Dashboard: open/resolved 24h + drill-down
  • 16:0017:00 retention job (events 3090d, problems 180d+)
  • 17:0018:00 health checks (DB/worker/heartbeat stale)
  • 18:0019:00 runbook + финальный push в kalinamall + freeze dev

Неделя после freeze (только тестирование)

Чеклист: testing-e2e-checklist.md

  • дни 12 функциональные E2E (RDP + SSH + mixed load)
  • дни 34 нагрузка, дубликаты, флаппинг heartbeat
  • день 5 регресс + known issues
  • дни 67 soak-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.


См. также