Files
AWatch-rus/docs/DETMIR_PRODUCTION_VALIDATION_RU.md
T

415 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AWatch-rus Production Validation
Дата проверки: 2026-06-07.
Статус после TASK_015: рабочий внутренний pilot-контур приведен к Demo Freeze
v1 по portal runtime, production-hardening endpoints и основным live smoke.
UEBA `critical` разобран в `docs/UEBA_CRITICAL_REVIEW_RU.md` и
классифицирован как `Needs Investigation`. Расширение пилота допустимо только
контролируемо, после проверки agent coverage и назначения операционного
ownership.
## Executive Summary
Проверка выполнялась read-only по рабочему внутреннему контуру на нескольких
пользователях. Реальные payload, логи, screenshots, IP-адреса, hostname,
логины, ФИО и подразделения в репозиторий не сохранялись.
Подтверждено:
- gateway и portal service доступны;
- базовый portal UI открывается;
- ActivityWatch API доступен и содержит свежие buckets;
- `/portal/api/reports` отвечает по ролям;
- Security events backend в рабочем контуре подключен;
- role gates в существующем portal smoke срабатывают;
- Forensics view и базовые portal tabs открываются;
- Windows runtime содержит активный текущий агентский процесс и watcher-процессы.
Ключевые gaps, найденные до TASK_014:
- фактический portal runtime отстает от Demo Freeze v1: отдельные endpoints
`/portal/api/workforce/kpi/explain`, `/portal/api/risk/narrative` и
`/portal/api/actions` на live-контуре возвращают `404`;
- production-hardening endpoints `/healthz`, `/readyz`, `/version`, `/metrics`
не доступны на фактическом portal port; gateway-level `/healthz` отвечает,
но это не заменяет portal production contract;
- request id / correlation id headers на live portal API не возвращаются;
- Executive visual conformance не проходит по текущему freeze smoke: в рабочем
runtime не отображаются новые Pilot v1 блоки Risk Narrative / Explainable KPI
/ Recommended Actions;
- UEBA на live-контуре возвращает `critical` score; TASK_015 классифицировал
его как `Needs Investigation`, а не как подтвержденный инцидент ИБ.
TASK_014 remediation update:
- deployment/version drift закрыт controlled deploy актуального release binary;
- live `/healthz`, `/readyz`, `/version`, `/metrics` теперь отвечают `200`;
- request id / correlation id headers возвращаются;
- live Explainable KPI, Risk Narrative и Executive Action Center endpoints
отвечают `200`;
- live production hardening smoke прошел;
- live browser conformance smoke прошел;
- live portal tabs smoke прошел.
Вывод: контур можно использовать для контролируемого внутреннего pilot review и
подготовки ограниченного пилота. Перед расширением на 10-50 пользователей
остается проверить agent coverage, уточнить missing application data и
закрепить порядок операционной поддержки.
## Scope
Проверялось:
- runtime health;
- gateway/portal topology;
- portal tabs and role views;
- Workforce KPI и related report structure;
- Explainable KPI availability;
- UEBA;
- Risk Narrative availability;
- Executive Action Center availability;
- agent/data flow;
- performance snapshot;
- data hygiene.
Не проверялось:
- destructive recovery;
- restart/redeploy;
- изменение правил scoring;
- изменение collectors;
- production rollout новой версии;
- raw evidence review с персональными данными.
## Environment
Обезличенно:
- пользователей: несколько;
- контур: working internal pilot;
- данные: реальные, но в документе не раскрываются;
- gateway: отдельный reverse-proxy host с внешней авторизацией;
- portal runtime: локальный сервис на gateway host;
- ActivityWatch/worktime: отдельный AW-rus server;
- Windows runtime: RDP host с текущим агентским контуром.
## Runtime Health
Проверено:
| Поверхность | Результат | Комментарий |
| --- | --- | --- |
| Gateway `/healthz` | `200` | Nginx/gateway-level health отвечает |
| Gateway `/portal/` | `401` снаружи | Внешний доступ закрыт авторизацией |
| Portal local `/portal/` | `200` | UI доступен на gateway host |
| Portal local `/portal/api/health` | `200` | API health доступен |
| Portal local `/healthz` | `200` | Production-hardening endpoint подтвержден после TASK_014 |
| Portal local `/readyz` | `200` | Production-hardening endpoint подтвержден после TASK_014 |
| Portal local `/version` | `200` | Production-hardening endpoint подтвержден после TASK_014 |
| Portal local `/metrics` | `200` | Prometheus text metrics подтверждены после TASK_014 |
| ActivityWatch `/api/0/settings` | `200` | AW API отвечает |
Request/correlation headers после TASK_014:
- `X-Request-Id`: возвращается live portal API;
- `X-Correlation-Id`: возвращается live portal API.
Metrics:
- Prometheus metrics format на фактическом portal runtime подтвержден через
`/metrics`.
## Portal Validation
Проверено через tunnel к фактическому gateway-local portal port. Screenshots
создавались только во временном каталоге вне репозитория и не коммитились.
Результат `scripts/browser-conformance-smoke.mjs` на live-контуре после
TASK_014:
| View | Результат | Комментарий |
| --- | --- | --- |
| Executive | OK | KPI, Explainable KPI, Risk Narrative и Recommended Actions отображаются |
| Workforce | OK | KPI, подразделения, тренды и explainability отображаются |
| Security | OK | Security actions, events, correlation и candidates отображаются |
| Forensics | OK | Расследования, timeline, материалы и аудит отображаются |
Результат `scripts/detmir-portal-tabs-smoke.mjs` на live-контуре после TASK_014:
- базовые tabs открываются;
- loading status доходит до ready;
- role switcher есть;
- Security events доступны;
- manager/security/forensics/admin view checks проходят;
- server role gates проходят;
- Executive dashboard layer и expected management block order проходят.
## KPI Validation
`/portal/api/reports?role=executive` возвращает валидный JSON и содержит:
- `kpis`: массив агрегированных KPI;
- `workforce`: объект с `department_comparison`, `owner_comparison`, `trend`,
`trend_status`, `insights`;
- `business_risk`;
- `risk_heatmap`;
- `security_events_summary`.
Обезличенные счетчики live response:
- KPI entries: `13`;
- department comparison entries: `1`;
- owner comparison entries: `3`;
- business risk entries: `2`;
- risk heatmap entries: `7`.
Оценка:
- базовый Workforce/Business Risk слой на live-контуре присутствует;
- KPI выглядит как рабочий агрегированный отчет, но текущий UI/API не
соответствует Demo Freeze v1 explainability контракту;
- перед расширением пилота нужно подтвердить свежесть источников по каждому
пользователю и роль ожидаемых подразделений.
## Explainable KPI Validation
Live endpoint после TASK_014:
```text
/portal/api/workforce/kpi/explain -> 200
```
Вывод:
- Explainable KPI развернут на рабочем контуре;
- live UI показывает ожидаемый блок `Почему такой индекс активности?`;
- прежний `404` был следствием устаревшего deployed binary.
## UEBA Validation
Live endpoint:
```text
/portal/api/ueba -> 200
```
Обезличенная сводка:
- response `ok=true`;
- severity: `critical`;
- status: `FAIL`;
- score: `100`;
- reason codes: несколько;
- score components: несколько.
Оценка после TASK_015:
- UEBA endpoint работает;
- score `critical` является фактическим rule-based результатом текущих
сигналов;
- классификация: `Needs Investigation`;
- security interpretation: `Operational Risk confirmed; Security Risk unknown`;
- executive readiness: `Insufficient Confidence`;
- основной вклад дают Workforce/baseline/history signals, а не DLP, network,
time или application anomaly.
## Risk Narrative Validation
Live endpoint после TASK_014:
```text
/portal/api/risk/narrative -> 200
```
Вывод:
- Risk Narrative развернут на рабочем контуре;
- Executive UI block соответствует Demo Freeze v1 ожиданиям;
- Risk Narrative можно показывать как deployed capability, сохраняя честное
ограничение: это rule-based объяснение, не ML-прогноз.
## Executive Action Center Validation
Live endpoint после TASK_014:
```text
/portal/api/actions -> 200
```
Вывод:
- Executive Action Center развернут на рабочем контуре;
- live runtime отдает отдельный actions endpoint;
- рекомендации можно показывать как deployed rule-based guidance, без claims об
автоматическом remediation.
## Agent/Data Flow Validation
AW-rus server:
- ActivityWatch server active;
- worktime API service active;
- failed systemd units: `0`;
- ActivityWatch API buckets endpoint отвечает `200`;
- buckets count: `27`;
- latest bucket timestamp близок к моменту проверки;
- oldest bucket timestamp старый, что нормально для исторических/event buckets,
но требует отдельной интерпретации freshness по bucket type.
Windows/RDP runtime:
- текущий `awatch-agent-rs` process активен;
- collector guard process активен;
- watcher/window/telemetry processes активны;
- scheduled tasks для ActivityWatch/AWatch runtime находятся в состоянии
`Ready` или `Running`.
Фактические роли:
```text
legacy/current runtime: awatch-agent-rs и существующие ActivityWatch watchers
new baseline core: adk-rust/crates/awatch-agent, покрыт тестами, но не подтвержден как основной live runtime
```
Backlog/dead-letter:
- явный dead-letter count на AW server: `0`;
- known spool directories на AW server не обнаружены в проверенных путях;
- Windows-side spool/backlog требует отдельной безопасной проверки без вывода
путей и payload.
## Performance Snapshot
Обезличенная сводка:
| API | Status | Время ответа |
| --- | --- | --- |
| `/portal/api/health` | `200` | < 1 ms на gateway-local check |
| `/portal/api/reports?role=executive` | `200` | первый observed run около 9 s, warm-cache run < 10 ms |
| `/portal/api/reports?role=manager` | `200` | < 10 ms на warm-cache run |
| `/portal/api/reports?role=security` | `200` | < 10 ms на warm-cache run |
| `/portal/api/reports?role=forensics` | `200` | < 10 ms на warm-cache run |
Логи:
- recent portal log scan за окно проверки не показал `500`, panic или явных
timeout в sanitized summary;
- ActivityWatch/worktime recent error scan не показал явных ошибок в sanitized
summary.
Ограничение:
- это snapshot, не load test и не sizing report.
## Noise / False Positive Findings
Потенциальный шум:
- UEBA severity `critical` / score `100` после TASK_015 классифицирован как
`Needs Investigation`: высокий score выглядит операционно значимым, но не
доказывает ИБ-инцидент;
- stale исторические buckets могут искажать общее восприятие freshness, если не
разделять active, inactive и event-driven bucket types;
- live Executive headline/runtime naming все еще может содержать старую
внутреннюю терминологию, что конфликтует с public naming hygiene.
Не исправлялось в этой задаче:
- scoring rules;
- UEBA thresholds;
- report content logic;
- deployed binary/runtime.
## Documentation Mismatches
Расхождения, найденные TASK_013, закрыты TASK_014:
1. Production-hardening endpoints `/healthz`, `/readyz`, `/version`,
`/metrics` теперь доступны на фактическом portal port.
2. Standalone endpoints `/api/workforce/kpi/explain`,
`/api/risk/narrative`, `/api/actions` теперь доступны на live runtime.
3. Visual smoke текущей freeze-ветки проходит Executive, Workforce, Security и
Forensics views.
4. Live runtime обновлен controlled deploy актуального release binary.
## Security / Privacy Notes
Соблюдено:
- raw logs не коммитились;
- raw JSON payload не коммитился;
- screenshots с реальными данными не коммитились;
- реальные IP/hostname/usernames/ФИО/подразделения в этот документ не внесены;
- deploy выполнялся controlled способом с backup старого binary и rollback path;
- destructive data operations не выполнялись;
- collectors, scoring rules и источники данных не менялись.
## Gaps
Критично перед расширением пилота:
1. Проверить agent coverage и missing application data, которые могли усилить
UEBA `critical`.
2. Назначить операционного владельца live smoke, deploy parity и rollback.
3. Зафиксировать регламент: после каждого deploy проверять binary/version,
endpoint matrix и live smoke.
Желательно до пилотного расширения:
1. Добавить отдельный pilot-feedback контур для замечаний руководителя, ИБ,
эксплуатации и расследователей.
2. Разделить freshness report по bucket types: active, inactive, event-driven,
historical.
3. Проверить Windows-side spool/backlog безопасной командой без раскрытия путей
и payload.
Можно перенести после первого ограниченного пилота:
1. Тонкая настройка UEBA thresholds.
2. Расширение Action Center rules.
3. Улучшение dashboard wording по результатам реальной обратной связи.
## Recommended Next Tasks
Не открывать feature roadmap. Следующие задачи должны быть pilot-feedback /
operations oriented:
- `docs/pilot-feedback/BUGS.md` - зафиксировать deployment/version drift как bug;
- `docs/pilot-feedback/FEATURE_REQUESTS.md` - собирать только запросы от
реальных ролей;
- `docs/pilot-feedback/LESSONS_LEARNED.md` - фиксировать, что было непонятно на
показе;
- отдельная operator task: сверить deployed portal binary/commit с freeze branch;
- отдельная operator task: повторить live smoke после controlled deploy.
## Explicit Non-Goals
В рамках TASK_013/TASK_014 не выполнялись:
- новые API;
- новый UI;
- новые collectors;
- ML/LLM;
- DLP/SIEM/EDR claims;
- изменение scoring logic;
- изменение collectors или источников данных;
- выгрузка персональных данных;
- сохранение real screenshots в git.
## Conclusion
Рабочий внутренний контур AWatch-rus существует и собирает реальные данные.
Portal, ActivityWatch, Security events, UEBA endpoint, Forensics и базовые role
views частично подтверждены.
После TASK_014 live runtime соответствует Demo Freeze v1 по production-hardening
endpoints, request/correlation headers, Explainable KPI, Risk Narrative,
Executive Action Center и основным smoke-проверкам. Текущий статус:
```text
ready for controlled internal pilot review;
ready for limited pilot preparation after agent coverage review and operations
ownership assignment.
```