Плагины¶
Плагины расширяют Hub, не требуя его пересборки: добавляют сведения к находкам из ваших систем учёта, приносят находки из внешних источников, добавляют каналы уведомлений.
Главное свойство: плагин исполняется в отдельном процессе, а не внутри backend. У него нет прямого доступа к базе данных Hub, и всё общение с внешним миром идёт через фиксированный набор обращений к среде исполнения.
Что умеют плагины¶
| Возможность | Что делает | Пример из поставки |
|---|---|---|
| Обогащение находок | Добавляет находке метки по данным внешней системы | Получение сведений об узле из CMDB |
| Источник находок | Периодически опрашивает внешнюю систему и приносит из неё находки | Сбор узлов и их уязвимостей из системы управления парком устройств |
| Канал уведомлений | Добавляет способ доставки уведомлений | Отправка в Telegram |
Модель изоляции¶
flowchart TD
Backend["Backend Hub"]
Runner["Среда исполнения<br/>отдельный процесс"]
Plugin["Код плагина"]
Ext["Внешняя система"]
DB[("PostgreSQL Hub")]
Backend --> |"запуск с задачей"| Runner
Runner --> Plugin
Plugin --> |"только 4 разрешённых обращения"| Runner
Runner --> |"HTTP по списку разрешённых узлов"| Ext
Runner --> |"результат"| Backend
Backend --> DB
Plugin -.-> |"прямого доступа нет"| DB
classDef hub fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#111827
classDef ext fill:#f3f4f6,stroke:#9ca3af,stroke-width:1px,stroke-dasharray:4 3,color:#111827
classDef store fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#111827
class Backend,Runner,Plugin hub
class Ext ext
class DB store
Плагину доступны ровно четыре обращения к среде исполнения:
| Обращение | Назначение |
|---|---|
| Выполнить HTTP-запрос | Единственный способ обратиться наружу |
| Получить секрет | Токен доступа к внешней системе |
| Получить секрет проекта | Тот же механизм, но со значением, заданным для конкретного проекта |
| Записать сообщение в журнал | Диагностика |
Исходящие обращения ограничены:
- по умолчанию запрещены схема
httpи обращения к локальным и внутренним адресам — это защита от подделки запросов на стороне сервера; - разрешённые узлы задаются либо в описании плагина, либо через его настройки: если адрес внешней системы вводит администратор, он же и становится разрешённым;
- ослабить ограничения можно переменными
PLUGIN_EGRESS_ALLOW_HTTP,PLUGIN_EGRESS_ALLOW_LOCAL_DIAL,PLUGIN_EGRESS_ALLOWLIST— делайте это осознанно.
Секреты плагина хранятся отдельно от его обычных настроек: поля, помеченные как секретные, нельзя записать через обычное сохранение настроек — попытка отклоняется.
Установка¶
Плагины распространяются как артефакты реестра образов, подписанные ключом издателя. Установка проходит через административный раздел интерфейса:
- Подключить источник плагинов. Указывается адрес реестра и открытый ключ, которым проверяется подпись. Источников может быть несколько.
- Просмотреть каталог подключённого источника.
- Установить плагин. Проверяются подпись и версия: установка более старой версии поверх более новой отклоняется.
- Заполнить настройки и секреты, затем включить плагин.
Ограничения на источники плагинов и на реестр образов задаются отдельными
переменными: PLUGIN_CATALOG_ALLOW_HTTP, PLUGIN_CATALOG_ALLOW_LOCAL_DIAL,
PLUGIN_CATALOG_ALLOWLIST — для каталога, PLUGIN_OCI_* — для загрузки
самих артефактов.
Изменение набора возможностей при обновлении
Если новая версия плагина заявляет возможности, которых не было у установленной, обновление не применяется молча — требуется явное подтверждение администратора. Так обновление не может незаметно расширить права плагина.
Обогащение находок¶
Плагин обогащения получает находку и возвращает набор меток. Метки сохраняются у находки и доступны для отбора, поиска и правил маршрутизации.
Запускается двумя способами:
- автоматически — появление находки ставит фоновую задачу обогащения;
- вручную — кнопкой в карточке находки
(
POST /api/v1/findings/<id>/enrich-tags/<plugin_id>), что удобно для находок, накопленных до установки плагина.
Частота ручного обогащения ограничена переменной
ENRICH_TAGS_RATE_LIMIT_PER_MINUTE.
Список доступных плагинов обогащения отдаёт
GET /api/v1/plugins/capabilities/finding-enrichers.
Источники находок¶
Плагин-источник опрашивает внешнюю систему по расписанию и приносит из неё
находки. Расписание задаётся в описании плагина и переопределяется при
установке; опрос можно запустить вручную —
POST /api/v1/admin/installed-plugins/<id>/sync-now.
Принесённые находки проходят тот же путь, что и загруженные извне: та же дедупликация, те же состояния, те же интеграции.
Пустой ответ и удалённые узлы
Плагин-источник обязан сообщать об ошибке, если не смог опросить свою систему. Пустой корректный ответ означает «в системе действительно ноль узлов» — а это, в свою очередь, может привести к массовому закрытию находок как относящихся к исчезнувшим узлам.
Hub дополнительно защищён: если опрос вернул пустой перечень, а сведения об узлах в базе есть, сверка исчезнувших узлов не выполняется. Но это вторая линия обороны, а не замена корректному поведению плагина.
Каналы уведомлений¶
Плагин-канал добавляет способ доставки. Его настройки задаются на уровне проекта: у разных проектов могут быть разные получатели и разные токены.
| Метод и путь | Назначение |
|---|---|
GET /api/v1/projects/<id>/plugin-channels |
Доступные каналы проекта |
GET /api/v1/projects/<id>/plugin-channels/<plugin_id>/config |
Настройки канала |
PUT /api/v1/projects/<id>/plugin-channels/<plugin_id>/config |
Изменение настроек |
Для изменения требуется право manage_notifications. Оно даёт доступ к
токенам ботов — выдавайте его так же осторожно, как административные права.
Настройки среды исполнения¶
| Переменная | Назначение |
|---|---|
PLUGIN_RUNNER_GLOBAL_LIMIT |
Предел одновременно работающих процессов плагинов |
PLUGIN_RUNNER_PER_PLUGIN_LIMIT |
Предел одновременных запусков одного плагина |
PLUGIN_RUNNER_KEEP_WARM_SECONDS |
Сколько держать процесс готовым после работы |
PLUGIN_FINDING_SOURCE_SYNC_WORKERS |
Параллелизм опроса источников |
WASM_RUNNER_BINARY_PATH |
Путь к исполняемому файлу среды исполнения |
Число обработчиков очереди обогащения выводится из
PLUGIN_RUNNER_PER_PLUGIN_LIMIT: оно на единицу меньше, чтобы задачи
обогащения не занимали все доступные запуски плагина и не блокировали ручной
вызов.
Для плагинов, исполняемых как обычные процессы, а не в виртуальной машине,
существует отдельная группа настроек с префиксом PLUGIN_NATIVE_ —
ограничение памяти, тайм-ауты, политика перезапуска после аварийного
завершения и ограничение частоты обращений. Значения по умолчанию рассчитаны
на то, что аварийно завершающийся плагин не должен ни перезапускаться
бесконечно, ни оставаться выключенным навсегда.
Плагины в поставке¶
| Плагин | Возможность | Что делает |
|---|---|---|
| Обогащение из CMDB | Обогащение находок | Подтягивает сведения об узле из системы учёта активов и превращает их в метки |
| Интеграция с системой управления парком устройств | Источник находок | Периодически забирает узлы и их уязвимости, сопоставляет команды с продуктами |
| Отправка в Telegram | Канал уведомлений | Доставка уведомлений через бота |
Подробности по обогащению из CMDB — в описании самого плагина в каталоге: набор настроек и перечень переносимых полей задаются там и могут отличаться между версиями.