Ansible ensemble for AWatch-rus
Эта директория содержит Ansible-ensemble для полного развёртывания AWatch-rus:
- деплой на уже существующий Debian host/CT;
- полный цикл с нуля в Proxmox: создание CT + bootstrap + установка ActivityWatch + RU patch;
- централизованное развёртывание Windows/RDP collector'ов по WinRM;
- развёртывание внешнего pfSense poller'а на Debian/Ubuntu utility VM.
Файлы
ansible/deploy_aw_server.yml— основной playbook для уже существующего Debian/CT host.ansible/provision_proxmox_ct_and_deploy_aw.yml— полный playbook для Proxmox.ansible/provision_proxmox_ct_matrix_and_deploy_aw.yml— массовый полный playbook (несколько CT).ansible/deploy_aw_windows.yml— WinRM playbook для развёртывания Windows/RDP collector'ов.ansible/deploy_aw_pfsense_poller.yml— развёртывание pfSense poller'а.ansible/deploy_grafana_dashboards.yml— импорт version-controlled Grafana dashboard'ов через HTTP API.ansible/deploy_tsj_guardian_bot_proxmox.yml— развёртывание TSJ Guardian Telegram Bot на Proxmox host.ansible/install_full_stack.yml— полный установочный playbook (оркестратор всех этапов).ansible/inventory.example.ini— шаблон inventory.ansible/group_vars/*.example.yml— шаблоны переменных.
Быстрый запуск
- Скопируйте шаблоны:
cp ansible/inventory.example.ini ansible/inventory.inicp ansible/group_vars/all.example.yml ansible/group_vars/all.yml
- Заполните значения в
inventory.iniиgroup_vars/all.yml. - Запустите:
cd ansible
ansible-playbook -i inventory.ini deploy_aw_server.yml
Секреты (пароли) безопасно
Рекомендуемый способ не хранить пароли в репозитории — перед запуском экспортировать их в переменные окружения:
- Linux
aw_server(SSH пароль root):AW_SSH_PASSWORD - Windows
aw_windows(WinRM пароль):AW_WINRM_PASSWORD
В group_vars/aw_server.yml и group_vars/windows.yml они читаются через lookup('env', ...).
Полный установочный playbook (всё за один запуск)
Если нужно прогнать полный цикл одной командой:
cd ansible
ansible-playbook -i inventory.ini install_full_stack.yml
Что делает:
provision_proxmox_ct_and_deploy_aw.yml(если есть хосты в группе[proxmox]);deploy_aw_server.yml(группа[aw_server]);deploy_aw_windows.yml(группа[aw_windows]);deploy_aw_pfsense_poller.yml(группа[aw_pfsense_pollers]);deploy_grafana_dashboards.yml(группа[grafana]).
Пустые группы в inventory.ini безопасны: соответствующий play будет пропущен.
Полный запуск с нуля в Proxmox
- Подготовьте inventory и vars:
cp ansible/inventory.example.ini ansible/inventory.inicp ansible/group_vars/all.example.yml ansible/group_vars/all.ymlcp ansible/group_vars/proxmox.example.yml ansible/group_vars/proxmox.yml
- Заполните
group_vars/proxmox.ymlиgroup_vars/all.yml. - Запустите playbook:
cd ansible
ansible-playbook -i inventory.ini provision_proxmox_ct_and_deploy_aw.yml
Массовый запуск (матрица CT)
- Подготовьте матрицу:
cp ansible/group_vars/proxmox-matrix.example.yml ansible/group_vars/proxmox-matrix.yml
- Заполните
proxmox-matrix.yml. - Запустите:
cd ansible
ansible-playbook -i inventory.ini provision_proxmox_ct_matrix_and_deploy_aw.yml
Windows/RDP rollout (WinRM)
Важно:
WinRMздесь остаётся транспортом дляAnsible deployиvalidation;- для интерактивной PowerShell-работы из Linux/Codex по DetMir используйте project MCP-over-SSH путь, а не
WSMan; - каноника лежит в
docs/DETMIR_POWERSHELL_MCP_REMOTE_RU.mdиscripts/install_detmir_powershell_mcp.sh.
- Подготовьте inventory и vars:
cp ansible/inventory.example.ini ansible/inventory.inicp ansible/group_vars/windows.example.yml ansible/group_vars/windows.yml
- Заполните
inventory.ini(секция[aw_windows]) иgroup_vars/windows.yml.- Для русской локализации Windows часто нужен
ansible_user=Администратор(а неAdministrator). - Если WinRM закрыт, playbook не сможет стартовать и нужно сначала открыть
5985/5986иwsman.
- Для русской локализации Windows часто нужен
- Запустите:
cd ansible
AW_WINRM_PASSWORD='...' bash ./run_deploy_aw_windows.sh
run_deploy_aw_windows.sh автоматически:
- очищает proxy env (
http_proxy/https_proxy/...), чтобы WinRM не уходил в локальный прокси; - включает OpenSSL legacy provider, если на хосте отключён
MD4(нужно для NTLM в pywinrm). - перезапускает
ansible-playbookпри временных WinRM/NTLM сбоях (по умолчанию 5 попыток, пауза 30 сек).
Параметры retry:
AW_DEPLOY_RETRIES(по умолчанию5);AW_DEPLOY_RETRY_DELAY_SEC(по умолчанию30).
Playbook:
- выгружает полный
windows/*toolkit на целевой хост в InnoSetup-compatible каталогC:\Program Files\AWatch-rus\windows, включая DLP иworktime-session-collector.ps1; - если найден legacy config
C:\ProgramData\ActivityWatch-Phase2\deployment-config.json, выполняет безопасную миграцию черезmigrate-awatch-rus-paths.ps1: backup, остановка задач, перенос данных, переписывание путей, пересоздание scheduled tasks и validation; - выполняет
deploy-ensemble.ps1(deploy + hardening/recovery) с policy/rules из AWatch-rus toolkit; - после deploy принудительно запускает
ActivityWatch Recoveryи managedActivityWatch Launch *задачи; - включает (
Enable-ScheduledTask)ActivityWatch Recoveryи managedActivityWatch Launch *задачи перед запуском (иначе WebUI может показыватьActive time: 0s); - оставляет
ActivityWatch Recoveryвключённым даже при активномAWatchRusCollectorGuard: guard является основным контроллером, recovery остаётся fallback/bootstrap path; - выполняет API smoke-check bucket
aw-watcher-afk_<COMPUTERNAME>и ожидает свежие события; - выполняет API smoke-check bucket
aw-watcher-window_<COMPUTERNAME>и ожидает свежие события (по умолчанию включено); - запускает
validate-deployment.ps1; - забирает JSON-отчёт в локальную директорию (
/tmp/aw-rus-validation-<USER>по умолчанию). - настраивает scheduled task
ActivityWatch Hayabusa Uploadс периодом и lookback по vars.
Дополнительные флаги:
aw_windows_afk_enabled: false— не запускатьaw-watcher-afk;aw_windows_window_enabled: false— не запускатьaw-watcher-window;aw_windows_incident_capture_enabled: false— отключить блок incidentCapture;aw_windows_incident_screenshot_enabled: false— не делать скриншот при DLP-инциденте;aw_windows_incident_artifacts_root: 'C:\...\incident-artifacts'— переопределить путь артефактов;aw_windows_deploy_root: 'C:\Program Files\AWatch-rus'— каталог toolkit, совпадает с InnoSetup{app};aw_windows_install_root: 'C:\Program Files\AWatch-rus\bin'— каталог бинарников, совпадает с InnoSetupAwDefaultInstallRoot;aw_windows_state_root: 'C:\ProgramData\AWatch-rus'— каталог состояния/отчётов, совпадает с InnoSetupAwDefaultStateRoot;aw_windows_validation_remote_path: '{{ aw_windows_state_root }}\aw_validate_ansible.json'— отчёт Ansible-валидации хранится рядом сensemble-report-*.json;aw_windows_migration_enabled: true— включить guard миграции текущего production изActivityWatch-Phase2в единыйAWatch-rus;aw_windows_legacy_install_root/aw_windows_legacy_state_root— старые production paths, откуда выполняется перенос;aw_windows_migration_report_remote_path— JSON-отчёт о миграции на Windows-хосте;aw_windows_package_version,aw_windows_package_url,aw_windows_package_zip_path— версия и источник Windows-пакета ActivityWatch;aw_windows_api_smoke_check_bucket: ""— автоматически использоватьaw-watcher-afk_<COMPUTERNAME>;aw_windows_api_smoke_check_window_enabled: true— включить дополнительный smoke-checkaw-watcher-window_<COMPUTERNAME>;aw_windows_api_smoke_check_window_bucket: ""— переопределить bucket для window smoke-check;aw_windows_api_smoke_check_min_events: 1— минимум событий, ожидаемых в smoke-check;aw_windows_fail_on_validation_error: true— завершать playbook ошибкой, еслиvalidate-deployment.ps1возвращаетoverallOk=false;aw_windows_skip_hardening: true— пропуститьhardening-recovery.ps1внутри ensemble-скрипта.aw_windows_hayabusa_auto_upload_enabled: true— включить авто-upload EVTX на AW-server;aw_windows_hayabusa_auto_upload_interval_hours: 6— период scheduled task;aw_windows_hayabusa_auto_upload_hours_back: 6— lookback для каждого запуска;aw_windows_hayabusa_auto_upload_mode: "incident"— mode для server-side processing;aw_windows_hayabusa_auto_upload_task_name: "ActivityWatch Hayabusa Upload"— имя scheduled task.
Server-side Hayabusa auto-case и Telegram alerting
На стороне deploy_aw_server.yml теперь есть server-side контур:
aw-hayabusa-drop.pathaw-hayabusa-drop.serviceaw-hayabusa-autoprocessaw-hayabusa-case-alert
Что делает контур:
- автоматически подхватывает
zipиз/opt/activitywatch/aw-rus-ops/drop; - запускает
aw-hayabusa; - считает severity/score по
timeline.jsonl; - создаёт или обновляет case;
- пишет bounded metadata в
forensics.hayabusa; - отправляет Telegram alert.
Основные vars:
aw_hayabusa_auto_case_enabled: trueaw_hayabusa_auto_case_min_severity: "medium"aw_hayabusa_telegram_enabled: trueaw_hayabusa_telegram_min_severity: "high"aw_hayabusa_telegram_bot_tokenaw_hayabusa_telegram_chat_ids
Развёртывание pfSense poller
- Подготовьте vars:
cp ansible/group_vars/pfsense-poller.example.yml ansible/group_vars/pfsense-poller.yml
- Добавьте inventory group
[aw_pfsense_pollers]. - Запустите:
cd ansible
ansible-playbook -i inventory.ini deploy_aw_pfsense_poller.yml
Playbook:
- ставит
python3; - копирует
pfsense-aw-poller.py; - пишет
/etc/aw-pfsense/poller.json; - поднимает
aw-pfsense-poller.service.
Импорт Grafana dashboard'ов
- Подготовьте inventory и vars:
cp ansible/inventory.example.ini ansible/inventory.inicp ansible/group_vars/grafana.example.yml ansible/group_vars/grafana.yml
- Укажите в inventory группу
[grafana]и переменнуюgrafana_url. - Экспортируйте пароль Grafana API:
export GRAFANA_ADMIN_PASSWORD='...'
- Запустите:
cd ansible
ansible-playbook -i inventory.ini deploy_grafana_dashboards.yml
Playbook:
- проверяет
GET /api/health; - создает или актуализирует folder
AWatch-rusв Grafana; - импортирует dashboard JSON из каталога
grafana/; - верифицирует доступность dashboard'ов по
uidчерез Grafana API.
По умолчанию импортируются:
DetMir: Работа пользователей в RDPDetMir: DLP и ИБ обзорDetMir: ИБ сводка для руководстваAW-rus: DLP обзор
Подробная документация: docs/GRAFANA_DASHBOARDS_RU.md
Развёртывание TSJ Guardian Bot на Proxmox
- Подготовьте vars:
cp ansible/group_vars/proxmox-bot.example.yml ansible/group_vars/proxmox-bot.yml
- Заполните минимум:
telegram_bot_tokentelegram_allowed_chat_idstsj_bot_source_local_path
- Убедитесь, что в inventory есть группа
[proxmox]. Для текущего контура AW-Rus bot ожидает Proxmox host<GATEWAY_HOST>. Рабочая модель для этого контура:igor+sudo, а не обязательныйrootlogin. - При необходимости задайте recovery-команды для AW-Rus:
tsj_bot_aw_rus_worktime_heal_cmdtsj_bot_aw_rus_dlp_heal_cmd
- Запустите:
cd ansible
ansible-playbook -i inventory.ini deploy_tsj_guardian_bot_proxmox.yml
После актуального production hardening:
- bot различает
worktime idleи реальную деградацию; - bot поддерживает отдельный
AW_RUS_DLP_HEAL_CMD; - redeploy не должен терять runtime env-ключи, связанные с proxy, FS checks и AI escalation.
Результат
- Установлен ActivityWatch Server.
- Создан systemd-unit
activitywatch-server.service. - Установлен RU Web UI patch.
- Для Web UI используется checksum-based cache-bust для
ru-patch-v5.jsиsw-cleanup.js, чтобы браузер не держал старую DLP/русскую статику после деплоя. - На
#/homeWeb UI делит хосты наWindows RDPиVirtual servers + Proxmox. - Выполнена валидация API
http://127.0.0.1:5600/api/0/info. - Для полного сценария CT создаётся автоматически через
pct create. - На Windows/RDP host развёрнуты AFK/window watchers, browser domain collector, DLP endpoint collector и worktime session collector.
- Проверочный JSON-отчёт Windows playbook должен иметь
overallOk=true.
Prod rollout одной командой
Для ручного запуска с dry-run и логированием используйте:
bash scripts/prod_rollout.sh
Скрипт попросит AW_SSH_PASSWORD и AW_WINRM_PASSWORD интерактивно (ввод скрыт) и сложит логи в .rollout-logs/.