Files
AWatch-rus/docs/DLP_RESOURCE_PROFILES_RU.md
igor04091968 fe87c85a31
CI / Rust checks (push) Canceled after 0s
CI / Docs and registry checks (push) Canceled after 0s
CI / Smoke checks (push) Canceled after 0s
Coverage / Coverage baseline (push) Canceled after 0s
Security / Cargo audit (push) Canceled after 0s
Security / Cargo deny (push) Canceled after 0s
Security / Secret pattern check (push) Canceled after 0s
Security / Dependency review (push) Canceled after 0s
Harden DetMir DLP production runtime
- default DetMir DLP runtime to core_only/disabled with load-guard protection

- add fail-closed placeholder validation and runtime-scoped artifact checks

- document operator re-enable flow for light profile and guard rollback

- update prod docs, env examples, and Ansible DLP defaults
2026-07-01 00:05:23 +03:00

8.5 KiB
Raw Permalink Blame History

DLP resource profiles for DetMir

Дата фиксации: 2026-06-30.

Цель: сохранить стабильный Workforce/AW hot path на малом DetMir Proxmox контуре и оставить DLP подключаемым модулем. Loki CT в текущем production resource profile отключен намеренно и не является обязательной зависимостью AWatch-rus.

Профили

core_only

Production default и аварийный/экономный профиль для DetMir.

  • DLP runtime: выключен.
  • DLP Influx exporter: выключен.
  • DLP aggregators/report/syslog/webhook/CEF/case/evidence units: выключены.
  • Loki/Promtail: выключены.
  • Workforce, Worktime, ActivityWatch, ClickHouse 1C, Grafana core, Hayabusa/Security Finding Inbox: работают независимо от DLP.

Назначение: безопасное состояние при перегрузе CPU/RAM/IOPS или при ручном отключении DLP.

light

Операторский re-enable профиль для DetMir после проверки ресурсов: лёгкий DLP режим без Loki и без Influx-heavy path.

  • Разрешены activitywatch-dlp-aggregator.timer и aw-dlp-ioc-refresh.timer.
  • dlp-aggregator-rust собирает ограниченный срез из bucket-ов aw-file-operations_ и aw-dlp-incidents_ в локальный dlp_warehouse.sqlite для последующей UEBA-корреляции.
  • detmir-dlp-warehouse-sync.timer доставляет SQLite warehouse на portal host через атомарный snapshot, чтобы DetMir Portal/UEBA читали локальный файл, а не блокировали AW server hot path.
  • Для агрегатора заданы короткий lookback, малый event limit, timeout, CPUQuota и MemoryMax.
  • Evidence, screenshots, case management и exporters остаются выключенными.
  • InfluxDB/Grafana/Loki не участвуют в hot path лёгкого DLP.
  • Используется для ежедневной эксплуатации, когда нужны DLP-сигналы для UEBA, но нельзя нагружать Proxmox/Influx/Grafana/ClickHouse.

on_demand

Временный режим для конкретного инцидента или окна проверки.

  • Разрешены IOC refresh, policy engine, case management и evidence API.
  • Influx exporter, CEF/syslog/webhook/report scheduler и aggregator остаются выключенными, если администратор отдельно не выбрал full.
  • После окна проверки профиль должен быть возвращён в core_only.

full

Только вручную, только после resource preflight.

  • Может включать DLP Influx exporter, aggregator, reports, integrations, policy/case и evidence.
  • На DetMir не является штатным production режимом.
  • Запрещено включать автоматически при обычном deploy/recovery.

Управление

На AW server:

sudo /usr/local/bin/detmir-dlp-runtime-control status
sudo /usr/local/bin/detmir-dlp-runtime-control set-profile core_only
sudo /usr/local/bin/detmir-dlp-runtime-control set-profile light
sudo /usr/local/bin/detmir-dlp-runtime-control set-profile on_demand
sudo /usr/local/bin/detmir-dlp-runtime-control set-profile full
sudo /usr/local/bin/detmir-dlp-load-guard

Перед каждым set-profile скрипт сохраняет rollback-снимок active/enabled состояния DLP units:

/var/lib/activitywatch/health/dlp-runtime-rollback.state

Откат к предыдущему состоянию:

sudo /usr/local/bin/detmir-dlp-runtime-control rollback

Важно: rollback восстанавливает только systemd active/enabled состояния DLP units. Он не меняет retention, не удаляет данные и не включает Loki CT.

Автоотключение при перегрузе

detmir-dlp-load-guard.timer запускает /usr/local/bin/detmir-dlp-load-guard. Guard читает /proc/loadavg, /proc/meminfo и /proc/stat; если load, свободная память или iowait выходят за пороги несколько запусков подряд (AW_DLP_GUARD_STRIKES_REQUIRED, default 3), а DLP units активны, он переводит DLP в core_only через:

AW_DLP_DISABLED_REASON=auto_disabled_by_dlp_load_guard:<reason> \
  /usr/local/bin/detmir-dlp-runtime-control set-profile core_only

State и история пишутся в:

/var/lib/activitywatch/health/dlp-light-guard-state.json
/var/lib/activitywatch/health/dlp-light-guard-history/

Единичный IO/load spike фиксируется как observe_overload, но DLP не отключается до достижения порога подряд. Guard не перезапускает ActivityWatch/портал, не меняет маршруты, не трогает ClickHouse/Grafana и не включает Loki. Возврат из core_only в light делает администратор после стабилизации контура и проверки Proxmox/AW/Influx/Grafana/ClickHouse load. Если перегруз повторится, guard снова переведёт профиль в core_only.

Доставка DLP warehouse на портал

Portal читает DLP-срез из локального /var/lib/activitywatch/dlp_warehouse.sqlite. На разнесённом контуре DetMir этот файл создаётся на AW server, поэтому используется лёгкий sync:

sudo systemctl start detmir-dlp-warehouse-sync.service
sudo systemctl status detmir-dlp-warehouse-sync.timer
sudo jq . /var/lib/activitywatch/health/dlp-warehouse-sync-state.json

Sync делает SQLite backup на AW server и атомарно заменяет локальный файл на portal host. Он не запускает DLP evidence/case/exporters и не включает Loki.

Ansible defaults

Для DetMir production defaults должны оставаться экономными и самозащищающимися:

aw_dlp_profile: "core_only"
aw_dlp_enabled: false
aw_dlp_influx_enabled: false
aw_dlp_light_collector_enabled: false
aw_dlp_light_guard_enabled: true
detmir_portal_dlp_profile: "core_only"
detmir_portal_dlp_module_enabled_override: true

Для временного возврата в лёгкий профиль:

aw_dlp_profile: "light"
aw_dlp_enabled: true
aw_dlp_influx_enabled: false
aw_dlp_light_collector_enabled: true
aw_dlp_light_guard_enabled: true
detmir_portal_dlp_profile: "light"
detmir_portal_dlp_module_enabled_override: true

Все тяжёлые DLP component flags должны быть false, пока администратор явно не выбрал on_demand или full.

Resource preflight перед full

Перед временным включением full проверить:

  • Proxmox host load и steal/wait;
  • свободную RAM и swap pressure;
  • IOPS/latency storage;
  • ClickHouse health и backlog ingest;
  • InfluxDB/Grafana health, если они участвуют в выбранном профиле;
  • ActivityWatch /healthz, Worktime API и portal latency;
  • отсутствие старого Loki CT в autostart.

Если любой core-сервис деградирует, DLP возвращается в core_only.

Проверка

DETMIR_RESILIENCE_EXPECT_DLP_PROFILE=light \
DETMIR_RESILIENCE_EXPECT_LOKI_OFF=1 \
scripts/detmir_resilience_check.sh --repo

Live check на сервере в light должен показывать inactive для heavy DLP units и Loki units. В core_only inactive должны быть все optional DLP units.

Запрещённые утверждения

  • Не заявлять, что AWatch-rus заменяет DLP/SIEM/EDR.
  • Не заявлять, что Loki обязателен для DetMir production.
  • Не заявлять DLP health OK, если DLP выключен.
  • Не запускать автоматическое блокирование рабочих станций без approve/apply workflow.