Harden DetMir DLP production runtime
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
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
- 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
This commit is contained in:
@@ -26,19 +26,38 @@ logical host id остаётся `SHARKON2025`. Подробный post-restore
|
||||
`653b22b0fbf29a22f7de42ade7b689490b1de16fa07e785e4e0efd3078e7a3bc`.
|
||||
- Бэкап предыдущего binary на сервере:
|
||||
`/usr/local/bin/detmir-portal.bak.20260625T045640Z`.
|
||||
- Runtime mode после phase 1 deploy:
|
||||
`DETMIR_PORTAL_DLP_MODULE_ENABLED=false`.
|
||||
- Runtime mode после 2026-06-30 prod hardening:
|
||||
server-side DLP runtime зафиксирован в `core_only/disabled`.
|
||||
Portal DLP UI/API module может оставаться включённым для чтения исторического
|
||||
SQLite/evidence-среза, но это не означает запуск DLP collectors/exporters.
|
||||
- Server-side optional DLP runtime control:
|
||||
`AW_DLP_ENABLED=false|true` и `DETMIR_DLP_ENABLED=false|true`.
|
||||
- Current resource profile: `AW_DLP_ENABLED=false`,
|
||||
`AW_DLP_PROFILE=core_only`; возврат в `light` выполняется только вручную
|
||||
после проверки нагрузки.
|
||||
- Runtime control/statistics script:
|
||||
`scripts/detmir_dlp_runtime_control.sh` / live
|
||||
`/usr/local/bin/detmir-dlp-runtime-control`.
|
||||
- Live DLP runtime state after 2026-06-25 controlled disable:
|
||||
`AW_DLP_ENABLED=false`, `AW_DLP_INFLUX_ENABLED=false`;
|
||||
active/enabled DLP units: `0/0`.
|
||||
- DLP runtime state after 2026-06-30 prod hardening:
|
||||
`AW_DLP_ENABLED=false`, `AW_DLP_PROFILE=core_only`,
|
||||
`AW_DLP_INFLUX_ENABLED=false`; optional DLP units should be
|
||||
`inactive/disabled`. `detmir-dlp-load-guard.timer` remains enabled and active
|
||||
as protection for any later operator re-enable.
|
||||
- Reason: DLP runtime materially increases Proxmox VM/LXC, InfluxDB, Grafana,
|
||||
ClickHouse and AW server load. In production DetMir it is currently kept
|
||||
disabled, but remains a documented optional module that can be enabled later.
|
||||
ClickHouse and AW server load. In production DetMir the safe default is
|
||||
`core_only`; `light` is a reconnectable profile, not the automatic default.
|
||||
- Auto-disable guard:
|
||||
`scripts/detmir_dlp_load_guard.sh` / live
|
||||
`/usr/local/bin/detmir-dlp-load-guard`. При перегрузе переводит DLP в
|
||||
`core_only` через runtime-control и пишет evidence в
|
||||
`/var/lib/activitywatch/health/dlp-light-guard-state.json`.
|
||||
- DLP warehouse sync для портала:
|
||||
`scripts/detmir_dlp_warehouse_sync.sh` / live
|
||||
`/usr/local/bin/detmir-dlp-warehouse-sync`. Доставляет локальный SQLite
|
||||
snapshot на portal host для UEBA/DLP views без heavy DLP hot path.
|
||||
- Loki CT is intentionally excluded from the current DetMir production resource
|
||||
profile. It must not be returned by routine deploy/recovery while the goal is
|
||||
to keep Proxmox VM/LXC load low.
|
||||
- Health после деплоя: `/healthz` возвращал `status=ok`.
|
||||
- Readiness после деплоя: `/readyz` возвращал `status=ready`.
|
||||
|
||||
@@ -84,9 +103,11 @@ logical host id остаётся `SHARKON2025`. Подробный post-restore
|
||||
- DLP evidence, screenshots, endpoint signals, case review и forensics
|
||||
enrichment требуют больше CPU/IO/сетевых операций, чем Workforce core.
|
||||
|
||||
Вывод: DLP/evidence/forensics enrichment уже вынесен из обязательного hot path
|
||||
phase 1 через `DETMIR_PORTAL_DLP_MODULE_ENABLED=false`, но полная оптимизация
|
||||
тяжелого snapshot/prewarm остается отдельной инженерной задачей.
|
||||
Вывод: DLP/evidence/forensics enrichment вынесен из обязательного hot path.
|
||||
Phase 1 делал это через `DETMIR_PORTAL_DLP_MODULE_ENABLED=false`; текущий
|
||||
lightweight-профиль оставляет DLP-status/UEBA-сигналы включенными без тяжелого
|
||||
evidence/case/exporter path. Полная оптимизация тяжелого snapshot/prewarm
|
||||
остается отдельной инженерной задачей.
|
||||
|
||||
## Целевая граница после переработки
|
||||
|
||||
@@ -154,23 +175,45 @@ AW_DLP_ENABLED=true|false
|
||||
DETMIR_DLP_ENABLED=true|false
|
||||
```
|
||||
|
||||
Default остается `true`, чтобы существующее поведение не менялось без явного
|
||||
решения администратора. Для ускоренного Workforce/operator режима допускается
|
||||
`DETMIR_PORTAL_DLP_MODULE_ENABLED=false`; в этом режиме портал:
|
||||
DetMir production default после 2026-06-30 hardening:
|
||||
`AW_DLP_ENABLED=false` / `AW_DLP_PROFILE=core_only`. Portal DLP module may stay
|
||||
enabled for historical/security views, but server-side DLP collectors/exporters
|
||||
remain off. В этом режиме портал:
|
||||
|
||||
- не читает DLP incident/case/review/audit файлы в основном report/operator
|
||||
path;
|
||||
- отключает security-events backend внутри snapshot, не меняя сохраненные
|
||||
ClickHouse credentials;
|
||||
- возвращает disabled-state для DLP evidence API;
|
||||
- не считает отсутствие DLP ошибкой Workforce core.
|
||||
- использует только уже имеющийся лёгкий DLP-срез для UEBA и статуса;
|
||||
- не включает evidence/case/exporters/Loki/Influx-heavy path;
|
||||
- не считает отсутствие heavy DLP ошибкой Workforce core.
|
||||
|
||||
Ansible-параметр поставки:
|
||||
Ansible-параметр поставки для старого disabled-профиля:
|
||||
|
||||
```yaml
|
||||
detmir_portal_dlp_module_enabled_override: false
|
||||
```
|
||||
|
||||
Для текущего safe production профиля:
|
||||
|
||||
```yaml
|
||||
detmir_portal_dlp_module_enabled_override: true
|
||||
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
|
||||
```
|
||||
|
||||
Возврат в `light` выполняется только после resource check:
|
||||
|
||||
```bash
|
||||
sudo AW_DLP_DISABLED_REASON=operator_reenable_after_resource_check \
|
||||
/usr/local/bin/detmir-dlp-runtime-control set-profile light
|
||||
sudo sed -i \
|
||||
-e 's/^AW_DLP_ENABLED=.*/AW_DLP_ENABLED=true/' \
|
||||
-e 's/^AW_DLP_PROFILE=.*/AW_DLP_PROFILE=light/' \
|
||||
/etc/activitywatch/aw-server.env
|
||||
```
|
||||
|
||||
Отдельный `detmir-portal-evidence` сервис не отключается этим флагом и остается
|
||||
самостоятельным контуром evidence/API при наличии отдельной конфигурации.
|
||||
|
||||
@@ -189,6 +232,7 @@ Hayabusa/Velociraptor boundary:
|
||||
Server-side optional DLP runtime описан отдельно:
|
||||
|
||||
- [DLP_OPTIONAL_RUNTIME_RU.md](DLP_OPTIONAL_RUNTIME_RU.md).
|
||||
- [DLP_RESOURCE_PROFILES_RU.md](DLP_RESOURCE_PROFILES_RU.md).
|
||||
|
||||
При `AW_DLP_ENABLED=false`:
|
||||
|
||||
@@ -197,10 +241,27 @@ Server-side optional DLP runtime описан отдельно:
|
||||
- `detmir-check`, `check-aw-full` и `check-aw-data` не считают DLP buckets
|
||||
обязательными;
|
||||
- `detmir-readiness` не требует DLP Influx write и DLP systemd units;
|
||||
- DLP profile changes use
|
||||
`/usr/local/bin/detmir-dlp-runtime-control set-profile <profile>` and keep a
|
||||
rollback snapshot for `/usr/local/bin/detmir-dlp-runtime-control rollback`;
|
||||
- перед отключением и после отключения собираются JSON-срезы в
|
||||
`/var/lib/activitywatch/health/dlp-runtime-history/`, latest-срез остается в
|
||||
`/var/lib/activitywatch/health/dlp-runtime-state.json`.
|
||||
|
||||
При `AW_DLP_PROFILE=light`:
|
||||
|
||||
- `activitywatch-dlp-aggregator.timer` собирает только ограниченный набор DLP
|
||||
events в локальный SQLite warehouse;
|
||||
- `detmir-dlp-warehouse-sync.timer` доставляет этот warehouse на portal host
|
||||
атомарным snapshot;
|
||||
- UEBA может учитывать `dlp_warn`/`dlp_fail` без запуска Loki/Influx-heavy path;
|
||||
- `detmir-dlp-load-guard.timer` автоматически переводит профиль в `core_only`
|
||||
при превышении порогов load/RAM/iowait;
|
||||
- тяжёлые DLP units (`aw-dlp-influx-exporter`, report/syslog/webhook/CEF,
|
||||
policy engine, case management, evidence API) должны оставаться выключенными.
|
||||
- если `detmir-dlp-load-guard.timer` видит повторный перегруз, он автоматически
|
||||
возвращает DLP runtime в `core_only`.
|
||||
|
||||
Live disable evidence 2026-06-25:
|
||||
|
||||
- `dlp-health-check` returned `ok=true`, `dlp:mode=disabled`;
|
||||
@@ -307,6 +368,7 @@ curl -sS --max-time 5 http://10.10.10.2:8720/healthz
|
||||
- Не удалять DLP collectors и warehouse ради ускорения портала.
|
||||
- Не включать heavy DLP или Velociraptor server runtime автоматически при
|
||||
обычном deploy без ресурсного решения.
|
||||
- Не включать Loki CT автоматически при обычном deploy/recovery DetMir.
|
||||
- Не менять UI/API несовместимо: новые поля должны быть additive.
|
||||
- Не заявлять completed DLP decoupling до live deploy и browser/API smoke.
|
||||
- Не позиционировать AWatch-rus как сертифицированную DLP/SIEM/EDR/СЗИ.
|
||||
|
||||
@@ -1,14 +1,37 @@
|
||||
# Optional DLP runtime for DetMir
|
||||
|
||||
Цель: DLP-контур должен отключаться управляемо, без ложных аварий в health/readiness и без автоматического подъема heavy-пайплайна, когда задача контура - снизить нагрузку на InfluxDB, Grafana и ClickHouse.
|
||||
Цель: DLP-контур должен оставаться подключаемым, но production default для
|
||||
DetMir сейчас `core_only/disabled`. Возврат в лёгкий режим выполняется вручную
|
||||
после resource check; при перегрузе guard снова переводит DLP в `core_only`.
|
||||
|
||||
Ресурсные профили и rollback-процедура описаны отдельно:
|
||||
[DLP_RESOURCE_PROFILES_RU.md](DLP_RESOURCE_PROFILES_RU.md).
|
||||
|
||||
## Что отключается
|
||||
|
||||
Текущий production-профиль DetMir после 2026-06-30 prod hardening -
|
||||
`core_only/disabled`:
|
||||
|
||||
- `AW_DLP_ENABLED=false`;
|
||||
- `AW_DLP_PROFILE=core_only`;
|
||||
- `AW_DLP_INFLUX_ENABLED=false`;
|
||||
- optional DLP timers/services inactive/disabled;
|
||||
- `detmir-dlp-load-guard.timer` остаётся enabled/active как защита на случай
|
||||
последующего operator re-enable;
|
||||
- heavy DLP units, Influx exporter, evidence/case/report/integration units и
|
||||
Loki остаются выключенными.
|
||||
|
||||
Автоотключение выполняет `detmir-dlp-load-guard`: при превышении порогов
|
||||
load/RAM/iowait он переводит DLP в `core_only` через
|
||||
`detmir-dlp-runtime-control set-profile core_only`. После стабилизации контур
|
||||
возвращается вручную командой `set-profile light`.
|
||||
|
||||
Штатный runtime off включает:
|
||||
|
||||
- `AW_DLP_ENABLED=false` на AW server;
|
||||
- `DETMIR_DLP_ENABLED=false` в управляющем DetMir contour check;
|
||||
- `DETMIR_PORTAL_DLP_MODULE_ENABLED=false` для portal UI/API DLP-модуля;
|
||||
- portal UI/API DLP-модуль может оставаться включённым для исторического
|
||||
SQLite/evidence-среза; это не запускает server-side DLP runtime;
|
||||
- остановку DLP timers/services:
|
||||
- `aw-dlp-influx-exporter.timer`;
|
||||
- `activitywatch-dlp-aggregator.timer`;
|
||||
@@ -137,10 +160,31 @@ AW_DLP_ENABLED=false check-aw-full
|
||||
|
||||
## Возврат DLP
|
||||
|
||||
Для DetMir предпочтительно возвращать не весь DLP сразу, а лёгкий профиль.
|
||||
Перед этим проверить load/RAM/iowait на Proxmox/AW/Influx/Grafana/ClickHouse.
|
||||
|
||||
```bash
|
||||
sudo sed -i 's/^AW_DLP_ENABLED=.*/AW_DLP_ENABLED=true/' /etc/activitywatch/aw-server.env
|
||||
sudo /usr/local/bin/detmir-dlp-runtime-control enable
|
||||
sudo systemctl restart aw-worktime-api.service || true
|
||||
sudo AW_DLP_DISABLED_REASON=operator_reenable_after_resource_check \
|
||||
/usr/local/bin/detmir-dlp-runtime-control set-profile light
|
||||
sudo sed -i \
|
||||
-e 's/^AW_DLP_ENABLED=.*/AW_DLP_ENABLED=true/' \
|
||||
-e 's/^AW_DLP_PROFILE=.*/AW_DLP_PROFILE=light/' \
|
||||
-e 's/^AW_DLP_INFLUX_ENABLED=.*/AW_DLP_INFLUX_ENABLED=false/' \
|
||||
/etc/activitywatch/aw-server.env
|
||||
```
|
||||
|
||||
Если профиль ухудшил состояние контура:
|
||||
|
||||
```bash
|
||||
sudo /usr/local/bin/detmir-dlp-runtime-control rollback
|
||||
```
|
||||
|
||||
`on_demand` и `full` включаются только вручную после отдельного resource
|
||||
preflight:
|
||||
|
||||
```bash
|
||||
sudo /usr/local/bin/detmir-dlp-runtime-control set-profile on_demand
|
||||
sudo /usr/local/bin/detmir-dlp-runtime-control set-profile full
|
||||
```
|
||||
|
||||
Для portal:
|
||||
@@ -187,13 +231,27 @@ production DetMir без отдельного ресурсного решени
|
||||
В inventory/group vars:
|
||||
|
||||
```yaml
|
||||
aw_dlp_profile: "core_only"
|
||||
aw_dlp_enabled: false
|
||||
aw_dlp_disabled_reason: "operator_disabled_to_reduce_influx_grafana_clickhouse_load"
|
||||
aw_dlp_disabled_since: "2026-06-25"
|
||||
detmir_portal_dlp_module_enabled_override: false
|
||||
aw_dlp_influx_enabled: false
|
||||
aw_dlp_light_collector_enabled: false
|
||||
aw_dlp_light_guard_enabled: true
|
||||
detmir_portal_dlp_module_enabled_override: true
|
||||
```
|
||||
|
||||
При `aw_dlp_enabled: false` playbook пишет `AW_DLP_ENABLED=false`, не включает DLP service/timer runtime и не должен возвращать DLP Influx exporter/aggregator в active state.
|
||||
Для временного operator re-enable в `light`:
|
||||
|
||||
```yaml
|
||||
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
|
||||
```
|
||||
|
||||
При `aw_dlp_profile: light` playbook включает только лёгкий агрегатор, IOC
|
||||
refresh и load guard. DLP Influx exporter, report/syslog/webhook/CEF,
|
||||
policy/case/evidence и Loki не должны возвращаться в active state.
|
||||
|
||||
## Ограничения
|
||||
|
||||
|
||||
@@ -0,0 +1,196 @@
|
||||
# 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:
|
||||
|
||||
```bash
|
||||
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:
|
||||
|
||||
```text
|
||||
/var/lib/activitywatch/health/dlp-runtime-rollback.state
|
||||
```
|
||||
|
||||
Откат к предыдущему состоянию:
|
||||
|
||||
```bash
|
||||
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` через:
|
||||
|
||||
```bash
|
||||
AW_DLP_DISABLED_REASON=auto_disabled_by_dlp_load_guard:<reason> \
|
||||
/usr/local/bin/detmir-dlp-runtime-control set-profile core_only
|
||||
```
|
||||
|
||||
State и история пишутся в:
|
||||
|
||||
```text
|
||||
/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:
|
||||
|
||||
```bash
|
||||
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 должны оставаться экономными и
|
||||
самозащищающимися:
|
||||
|
||||
```yaml
|
||||
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
|
||||
```
|
||||
|
||||
Для временного возврата в лёгкий профиль:
|
||||
|
||||
```yaml
|
||||
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`.
|
||||
|
||||
## Проверка
|
||||
|
||||
```bash
|
||||
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.
|
||||
@@ -47,6 +47,8 @@ bounded payload/query limits и role-gate smoke.
|
||||
| `--slow-request-log-ms` | `AWATCH_PORTAL_SLOW_REQUEST_LOG_MS` | Порог медленного запроса для логов |
|
||||
| `--environment` | `AWATCH_PORTAL_ENVIRONMENT` | Безопасное имя окружения |
|
||||
| `--enabled-modules` | `AWATCH_PORTAL_ENABLED_MODULES` | Разрешенные модули портала |
|
||||
| `--dlp-module-enabled` | `DETMIR_PORTAL_DLP_MODULE_ENABLED` | Включает DLP/security status для портала; может оставаться `true` для исторического SQLite/evidence-среза без запуска server-side DLP runtime |
|
||||
| DLP resource profile | `AW_DLP_PROFILE`, `DETMIR_PORTAL_DLP_PROFILE` | Для DetMir production default `core_only`; `light` включается оператором после resource check |
|
||||
|
||||
Ограничения применяются к тяжелым API:
|
||||
|
||||
@@ -66,6 +68,21 @@ bounded payload/query limits и role-gate smoke.
|
||||
возвращает `400`;
|
||||
- слишком большое тело запроса возвращает `413`;
|
||||
- role gate возвращает `403`.
|
||||
- при `DETMIR_PORTAL_DLP_MODULE_ENABLED=true` и `AW_DLP_PROFILE=core_only`
|
||||
портал может показывать исторический DLP/security status без запуска
|
||||
collectors/exporters.
|
||||
- при `DETMIR_PORTAL_DLP_MODULE_ENABLED=true` и `AW_DLP_PROFILE=light`
|
||||
Workforce core, `/healthz`, `/readyz`, `/api/reports` и `/api/operator`
|
||||
должны оставаться доступными без тяжелого DLP/case/evidence чтения.
|
||||
- при `AW_DLP_ENABLED=false` и `DETMIR_DLP_ENABLED=false` server-side
|
||||
DLP health/readiness/checks должны возвращать контролируемый disabled-state,
|
||||
а не пытаться поднять DLP Influx/exporter/aggregator/case runtime.
|
||||
Runbook: [DLP_OPTIONAL_RUNTIME_RU.md](DLP_OPTIONAL_RUNTIME_RU.md).
|
||||
- при `AW_DLP_PROFILE=light` активны только lightweight collector/IOC/guard;
|
||||
Loki/DLP heavy runtime должен оставаться inactive. При перегрузе
|
||||
`detmir-dlp-load-guard` переводит DLP в `core_only`; возврат выполняется
|
||||
только через profile switch и rollback, см.
|
||||
[DLP_RESOURCE_PROFILES_RU.md](DLP_RESOURCE_PROFILES_RU.md).
|
||||
|
||||
### Request ID, logs и metrics
|
||||
|
||||
|
||||
+22
-17
@@ -66,23 +66,25 @@ backup, registry-readiness документации, плана российск
|
||||
`653b22b0fbf29a22f7de42ade7b689490b1de16fa07e785e4e0efd3078e7a3bc`.
|
||||
- DetMir portal cold-start UI hang: mitigated. During cold/prewarm state the UI
|
||||
now shows `STALE / Первичный срез прогревается`, not endless loading.
|
||||
- DetMir DLP hot-path boundary: phase 1 deployed on the portal service with
|
||||
`DETMIR_PORTAL_DLP_MODULE_ENABLED=false`.
|
||||
- DetMir DLP hot-path boundary: phase 1 deployed; current production runtime
|
||||
uses `AW_DLP_ENABLED=false`, `AW_DLP_PROFILE=core_only`. The portal DLP module
|
||||
may stay enabled for historical/security views, but server-side DLP
|
||||
collectors/exporters are off.
|
||||
- DetMir optional DLP runtime controls: implemented in code/docs through
|
||||
`AW_DLP_ENABLED`, `DETMIR_DLP_ENABLED`,
|
||||
`scripts/detmir_dlp_runtime_control.sh` and
|
||||
`docs/DLP_OPTIONAL_RUNTIME_RU.md`.
|
||||
- DetMir optional DLP runtime live state: disabled on 2026-06-25 to reduce
|
||||
InfluxDB/Grafana/ClickHouse/AW server load. Evidence:
|
||||
`dlp-health-check=dlp:mode disabled`, `detmir-dlp=dlp:mode disabled`,
|
||||
active/enabled DLP units `0/0`, history snapshots under
|
||||
`/var/lib/activitywatch/health/dlp-runtime-history/`.
|
||||
- DetMir DLP contour status: disabled for the current production resource
|
||||
profile, not removed. It remains a documented optional module and must only be
|
||||
re-enabled after explicit operator decision and Proxmox/InfluxDB/Grafana/
|
||||
ClickHouse capacity check.
|
||||
- DetMir DLP buckets in manual full check: `SKIPPED` under
|
||||
`AW_DLP_ENABLED=false`, not reported as dead.
|
||||
`docs/DLP_OPTIONAL_RUNTIME_RU.md`. Resource profiles
|
||||
`core_only|light|on_demand|full` and rollback are documented in
|
||||
`docs/DLP_RESOURCE_PROFILES_RU.md`.
|
||||
- DetMir optional DLP runtime state: 2026-06-25 controlled disable evidence is
|
||||
retained; 2026-06-30 prod hardening keeps production in `core_only` by
|
||||
default. `light` can be re-enabled by operator command after
|
||||
Proxmox/InfluxDB/Grafana/ClickHouse capacity check.
|
||||
- DetMir DLP contour status: server-side DLP collection is currently disabled;
|
||||
heavy DLP remains optional and must only be enabled after explicit operator
|
||||
decision and resource check.
|
||||
- DetMir DLP auto-disable guard: `detmir-dlp-load-guard` records load/RAM/iowait
|
||||
state and switches DLP to `core_only` if thresholds are exceeded.
|
||||
- DetMir RDP collector freshness after 2026-06-29 restore: physical RDP target
|
||||
is `192.168.100.19`, stable AW logical host id remains `SHARKON2025`.
|
||||
Buckets are fresh/inactive as expected, collector guard quarantine was reset,
|
||||
@@ -112,6 +114,9 @@ backup, registry-readiness документации, плана российск
|
||||
resource usage. Proxmox LXC `202 loki-logs` is stopped, active config has
|
||||
`onboot: 0`, and smoke checks skip Loki by default unless
|
||||
`AW_SMOKE_LOKI_ENABLED=1` is set.
|
||||
- DetMir DLP rollback guard: `detmir-dlp-runtime-control set-profile` stores
|
||||
the previous DLP systemd active/enabled state and `rollback` restores it.
|
||||
Rollback does not start Loki CT.
|
||||
- DetMir restore baseline 2026-06-29:
|
||||
`docs/DETMIR_RESTORE_BASELINE_2026-06-29_RU.md`.
|
||||
- DetMir API smoke after phase 1: `/healthz` and `/readyz` OK;
|
||||
@@ -197,9 +202,9 @@ backup, registry-readiness документации, плана российск
|
||||
- External peer review remains pending.
|
||||
- Community adoption remains low until external contributors, public reviews
|
||||
and sustained third-party activity appear.
|
||||
- DetMir DLP runtime disable is complete for the current live contour; deeper
|
||||
long-term DLP product modularization and retention/cleanup policy remain
|
||||
separate future work.
|
||||
- DetMir lightweight DLP profile is implemented in repo defaults/scripts/docs;
|
||||
heavy DLP modularization and retention/cleanup policy remain separate future
|
||||
work.
|
||||
- DetMir RDP collector/session recovery after 2026-06-29 restore is verified by
|
||||
live smoke: `check-aw-full` reports `FRESH=8 STALE=0 DEAD=0`.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user