feat: backend ingest API, Docker Compose, Ubuntu install guide

- FastAPI: POST /api/v1/events, GET /health, JSON Schema validation

- PostgreSQL models, Alembic migration, bootstrap API key

- deploy/docker-compose.yml, .env.example

- docs/install-ubuntu-24.04.md, updated work-plan (agents first)
This commit is contained in:
PTah
2026-05-26 20:21:31 +10:00
parent bf1c1c9fe9
commit 69a232d08a
34 changed files with 1139 additions and 134 deletions
+63 -114
View File
@@ -1,154 +1,103 @@
# План работ — Security Alert Center
План разработки **после утверждения ТЗ**. Код не пишется до завершения фазы 0.
**Актуальный порядок:** сначала подготовка агентов (параллельно с минимальным SAC ingest), затем полный SAC MVP, затем prod rollout `UseSAC=exclusive`.
---
## Фаза 0. Документация и согласование (текущая)
## Фаза 0. Документация
| # | Задача | Статус |
|---|--------|--------|
| 0.1 | ТЗ [TZ.md](TZ.md) | ✅ |
| 0.2 | Архитектура, схема событий, интеграция агентов | ✅ |
| 0.3 | План работ, roadmap, deployment | ✅ |
| 0.4 | Согласование ТЗ с заказчиком | ⏳ |
| 0.5 | Репозиторий на git.kalinamall.ru (создать remote, push) | ⏳ |
| 0.6 | Multi-root workspace для трёх репо | ⏳ |
**Выход:** утверждённое ТЗ v1.0, тег `docs-v1.0` в git.
| 0.10.3 | ТЗ, архитектура, схема, deployment | ✅ |
| 0.5 | Репозиторий git.kalinamall.ru | ✅ |
| 0.6 | Multi-root workspace | ✅ |
---
## Фаза 1. MVP — ядро SAC (оценка: 3–4 недели)
## Фаза 1A. Агенты — контракт SAC (параллельно с 1B)
### 1.1. Инфраструктура проекта
**Репозитории:** `ssh-monitor`, `RDP-login-monitor`
**Прод:** везде `UseSAC=off` по умолчанию.
| # | Задача | Зависимости |
|---|--------|-------------|
| 1.1.1 | Scaffold `backend/` FastAPI, структура пакетов | 0.4 |
| 1.1.2 | Scaffold `frontend/` Vue 3 + Vite | 0.4 |
| 1.1.3 | `deploy/docker-compose.yml` (api, postgres, nginx) | 1.1.1 |
| 1.1.4 | Alembic, первая миграция (hosts, events, users) | 1.1.1 |
| 1.1.5 | `.env.example`, документация локального dev | 1.1.3 |
| # | Задача | Статус |
|---|--------|--------|
| 1A.1 | Параметры `UseSAC`, `SAC_URL`, `SAC_API_KEY`, spool | ⏳ |
| 1A.2 | `build_sac_event()` + `send_sac_event()` по schema v1 | ⏳ |
| 1A.3 | `notify_or_sac()`: off / dual / exclusive / fallback | ⏳ |
| 1A.4 | `--check-sac` / `Test-SacConnection` | ⏳ |
| 1A.5 | README агентов | ⏳ |
### 1.2. Ingest API
| # | Задача |
|---|--------|
| 1.2.1 | Модель Event + валидация по JSON Schema |
| 1.2.2 | `POST /api/v1/events`, auth API key |
| 1.2.3 | Идемпотентность по `event_id` |
| 1.2.4 | Авторегистрация host при ingest |
| 1.2.5 | `GET /health` |
| 1.2.6 | Unit-тесты ingest |
### 1.3. UI — базовый
| # | Задача |
|---|--------|
| 1.3.1 | Auth: login, JWT |
| 1.3.2 | Страница Events (таблица, фильтры, пагинация) |
| 1.3.3 | Страница Hosts |
| 1.3.4 | Карточка события |
| 1.3.5 | SSE live-лента (последние N) |
### 1.4. Problems (минимум)
| # | Задача |
|---|--------|
| 1.4.1 | Модель Problem + 2 встроенных правила (brute SSH, missing heartbeat) |
| 1.4.2 | UI Problems: список, ack, resolve |
### 1.5. Уведомления из SAC
| # | Задача |
|---|--------|
| 1.5.1 | Канал Telegram (настройки в env/БД) |
| 1.5.2 | Worker: отправка по правилу severity ≥ warning |
| 1.5.3 | Шаблон сообщения (summary + ссылка на UI) |
### 1.6. Dashboard MVP
| # | Задача |
|---|--------|
| 1.6.1 | API агрегатов: events/hour, failed by type |
| 1.6.2 | UI: 3 виджета (график входов, failed, топ IP) |
### 1.7. Приёмка MVP
| # | Задача |
|---|--------|
| 1.7.1 | Чеклист [TZ.md](TZ.md) §9 |
| 1.7.2 | Развёртывание на тестовом Ubuntu 24.04 |
| 1.7.3 | Демо с curl / mock-agent |
**Выход фазы 1:** тег `v0.1.0-mvp`, работающий SAC без изменений в прод-агентах.
**Выход:** на тестовом хосте `dual` шлёт JSON в SAC + Telegram.
---
## Фаза 2. Интеграция агентов (оценка: 2–3 недели)
## Фаза 1B. SAC — минимальный ingest (текущая разработка)
| # | Задача | Репозиторий |
|---|--------|-------------|
| 2.1 | `UseSAC`, `send_sac_event`, spool | ssh-monitor |
| 2.2 | `UseSAC`, `Send-SacEvent`, spool | RDP-login-monitor |
| 2.3 | `--check-sac`, README | оба |
| 2.4 | E2E: exclusive на 1 Linux + 1 Windows | все три |
| 2.5 | Daily report через SAC | SAC + агенты |
| 2.6 | Режим `fallback` | агенты |
| # | Задача | Статус |
|---|--------|--------|
| 1B.1 | Scaffold backend FastAPI | 🔄 |
| 1B.2 | PostgreSQL + Alembic (hosts, events, api_keys) | 🔄 |
| 1B.3 | `POST /api/v1/events`, `GET /health` | 🔄 |
| 1B.4 | docker-compose + [install-ubuntu-24.04.md](install-ubuntu-24.04.md) | 🔄 |
| 1B.5 | Валидация JSON Schema v1 | ⏳ |
**Выход:** теги `ssh-monitor-x.y`, `rdp-monitor-x.y`, `sac-v0.2.0`.
**Выход:** сервер Ubuntu принимает события от curl и от агентов в `dual`.
---
## Фаза 3. Улучшения эксплуатации (оценка: 2–4 недели)
## Фаза 1C. SAC — MVP UI и оповещения
См. [roadmap.md](roadmap.md): batch ingest, email, правила UI, retention job, экспорт CSV, GeoIP, LDAP.
| # | Задача |
|---|--------|
| 1C.1 | Frontend Vue: Events, Hosts |
| 1C.2 | Auth JWT, admin bootstrap |
| 1C.3 | Problems (базовые правила) |
| 1C.4 | Telegram из SAC |
| 1C.5 | Dashboard (3 виджета), SSE |
**Выход:** тег `v0.1.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](roadmap.md).
---
## Gantt (упрощённо)
```mermaid
gantt
title План SAC (упрощённо)
title SAC — актуальный план
dateFormat YYYY-MM-DD
section Документы
Фаза 0 ТЗ :done, f0, 2026-05-26, 3d
Фаза 0 :done, 2026-05-26, 1d
section SAC
MVP backend+UI :f1, after f0, 21d
1B ingest+deploy :active, 2026-05-26, 7d
1C UI+notify :2026-06-02, 14d
section Агенты
ssh-monitor SAC :f2, after f1, 10d
RDP-monitor SAC :f2b, after f1, 10d
1A UseSAC dual :2026-05-26, 10d
section Prod
Пилот exclusive :f3, after f2, 7d
Пилот exclusive :2026-06-16, 7d
```
---
## Роли (рекомендация)
| Роль | Фокус |
|------|--------|
| Backend | API, БД, worker, правила |
| Frontend | UI, графики, SSE |
| DevOps | Ubuntu 24.04, nginx, backup |
| Агенты | ssh-monitor + RDP изменения |
На малой команде — одна person full-stack + выделенное время на агенты.
---
## Definition of Done (общий)
- Код в `main`, проходит lint/test в CI (когда появится).
- Документация обновлена.
- Нет секретов в git.
- Критерии приёмки фазы выполнены.
---
## См. также
- [roadmap.md](roadmap.md) — продуктовые фазы
- [TZ.md](TZ.md) — требования
- [install-ubuntu-24.04.md](install-ubuntu-24.04.md) — подготовка сервера
- [roadmap.md](roadmap.md)
- [TZ.md](TZ.md)