5.3 KiB
Безопасность
omnichannel-mcp даёт ассистенту право управлять платформой, поэтому
безопасность строится в несколько независимых слоёв: конфигурация модуля,
подтверждения, и ограничения на стороне config_server.
Модель угроз
- Ошибочный или злонамеренный вызов управляющего инструмента (остановить прод, залить чужой конфиг).
- Утечка секретов (пароли, токен GitLab) в логи, в контекст модели, в репозиторий.
- Доступ не туда (SSRF, подмена хоста стенда).
- Чрезмерные привилегии (учётная запись только для чтения там, где нужен мониторинг).
Слои защиты
1. Учётные данные и секреты
- Пароли и токены — только из
${VAR}окружения илиconfig.local.json(в.gitignore). В репозитории — лишь шаблон. --check-configпечатает конфиг с маской секретов — можно безопасно проверять настройку и выкладывать вывод в тикеты.- Секреты не логируются: логи идут в stderr с маскированием, токен GitLab в выводе не отражается.
2. Режим «только чтение»
-
read_only: true(значение по умолчанию) запрещает все изменяющие инструменты. -
Для наблюдательных агентов поднимайте отдельный инстанс с
read_only: trueи отдельной read-only учётной записью:{ "servers": [{ "alias": "prod", "base_url": "http://…", "readonly_username": "${OMNI_RO_USER}", "readonly_password": "${OMNI_RO_PASSWORD}" }], "read_only": true } -
Если заданы
readonly_*-креды, read-инструменты ходят именно под ними — это least-privilege на стороне модуля.
3. Подтверждения (confirm)
Разрушительные операции требуют confirm="true":
down,restore_compose,restore_env_version,update_front,download_release,cleanup_old_versions.
Это второй слой: даже при включённом read_only=false ассистент обязан явно
подтвердить опасное действие. Дополнительно настройте политику подтверждений
вашего MCP-клиента (человеческое «да/нет» на управляющие инструменты).
4. Изоляция сети (allow_hosts)
Если задан allow_hosts, base_url любого сервера обязан быть на этих хостах —
защита от опечаток и подмены адреса.
5. Файловый jail (front_roots)
update_front принимает только каталоги внутри front_roots; при проверке
разрешаются симлинки и отсекаются побеги (.., ссылки наружу). Пусто —
загрузка фронта запрещена полностью.
6. Ограничение нагрузки
- Таймауты (
timeout_sec,upload_timeout_sec), лимиты вывода (max_output_bytes) и размера загрузки (max_upload_bytes). - Семафор мутаций (
max_concurrent_mutations) предотвращает наложение операций. - GET-запросы повторяются при сетевом сбое; мутации не повторяются — действие не выполнится дважды.
Что модуль НЕ делает
- Не работает с агентскими эндпоинтами
config_server(/api/register,/api/tasks/<host>) — только с пользовательским API. - Не хранит состояние и не пишет секреты на диск.
- Не выполняет код на хостах: все действия выполняет агент
config_server.
Рекомендации оператору
- Заведите отдельные учётные записи: read-only для мониторинга, полную — только для деплой-агента.
- Для мониторинга запускайте инстанс с
read_only: true. - Держите секреты в окружении/
config.local.json, не вconfig.json. - Включите подтверждения управляющих инструментов в MCP-клиенте.
- Ограничьте сетевой доступ к
config_server(VPN/private network); наружу порт 5005 не публикуйте. - Об уязвимостях сообщайте в службу безопасности компании (не публикуйте в общих трекерах).