Документация / Руководство администратора / Интеграции
Уведомления
Core отправляет уведомления одним способом - HTTP-запросом POST с телом JSON на заданный адрес. Чтобы получать уведомления на почту, в Telegram или Slack, примите вебхук своим сервисом или ботом и перешлите сообщение из поля text.
Раздел: "Глобальные настройки" → "Уведомления", вкладки "Настройки", "Уведомления о смене статуса" и "Расписание уведомлений". Нужна роль с правом "Глобальные настройки": "Просмотр" для чтения, "Изменение" для правки.
Интеграция
Интеграция задаёт получателя: адрес, заголовок авторизации и область действия. Вкладка "Настройки" → "Создать интеграцию уведомлений".
| Поле | Что задаёт | По умолчанию |
|---|---|---|
| "Название" | имя интеграции | - |
| "URL уведомлений" | адрес получателя | - |
| "Заголовок авторизации" | имя HTTP-заголовка, например Authorization |
пусто |
| "Значение заголовка авторизации" | значение заголовка, например Bearer <токен>; хранится зашифрованным |
пусто |
| "Проверять SSL" | проверка TLS-сертификата получателя | включено |
| "Уведомление об импортированных уязвимостях" | событие после обработки отчёта | выключено |
| "Уведомление о завершении валидации" | события после работы автовалидатора | выключено |
| область действия | продукты или ассеты, по уязвимостям которых отправляются события | - |
| активность | включить или выключить интеграцию | включена |
Без области действия событий нет
События об уязвимостях отправляются, только если уязвимости попадают в область действия интеграции. Интеграция без области получает лишь проверочное сообщение, а расписания по ней присылают нулевой результат. Для всех продуктов выберите "Глобально".
"Проверить соединение" отправляет проверочное сообщение и показывает "Код ответа:" получателя и итог "Подключено" или "Не подключено". Через API: POST /api/v1/notifications/credentials/<id>/test/.
Видимость и правка интеграции зависят от области видимости роли: Объекты с собственной областью действия.
Как отправляется запрос
- Метод
POST, заголовокContent-Type: application/json, плюс заголовок авторизации интеграции. - Параметры строки запроса из "URL уведомлений" дублируются в тело как поля JSON. Так можно передать получателю, например,
chat_id. - Таймаут - 10 секунд. Повторов нет: неудачная отправка только пишется в журнал Core.
- Текст в поле
text- на английском языке, со ссылками на "Внешний URL приложения".
События
event_name |
Когда отправляется | Что включает |
|---|---|---|
status_changed |
статус уязвимостей изменён вручную или автоматикой и совпал с правилом на вкладке "Уведомления о смене статуса" | правило уведомления о смене статуса |
findings_imported |
отчёт обработан, в нём есть уязвимости из области действия | "Уведомление об импортированных уязвимостях" |
validator_finished |
автовалидатор изменил уязвимости из области действия | "Уведомление о завершении валидации" |
import_validator_finished |
автовалидатор закончил разбор импорта в продукте из области действия | "Уведомление о завершении валидации" |
schedule_filter |
по расписанию с сохранённым фильтром уязвимостей | расписание на вкладке "Расписание уведомлений" |
test_credentials |
нажата "Проверить соединение" | - |
Уведомления о смене статуса
Вкладка "Уведомления о смене статуса" → "Создать уведомление". Правило срабатывает, если совпали все условия:
| Поле | Что задаёт |
|---|---|
| "Вебхук" | интеграция-получатель |
| "Было" | исходный статус или "Любой" |
| "Стало" | новый статус или "Любой" |
| "Как изменено" | "Как угодно", "Автоматически" или "Вручную" |
| порог | минимальное число уязвимостей в одной смене статуса; 0 - любое |
| "Передавать детали об уязвимостях" и "Поля" | добавить в текст список уязвимостей с выбранными полями |
Массовая смена статуса из разных исходных статусов отправляет отдельное уведомление на каждый исходный статус.
Пример тела:
{
"text": "3 Finding(s) has (have) changed its status from Unverified to Verified by Manual",
"event_name": "status_changed",
"affected_findings_count": 3,
"old_status": "Unverified",
"new_status": "Verified",
"changed_by": "Manual",
"objects_ids": [101, 102, 107],
"objects_url": "https://core.example.ru/findings",
"user_id": 4,
"user_name": "ivanov"
}
Статусы в теле - английские имена: Resolved, Unverified, Verified, Assigned, Rejected, Risk Accepted Temporarily, Risk Accepted Permanently. Способ смены: Anyone, Automation, Manual.
Тела других событий
event_name |
Поля |
|---|---|
findings_imported |
text, event_name, user_id, user_name, data - список с продуктом: поля продукта, affected_findings_ids, affected_findings_count, scanner, assets |
validator_finished |
text, event_name, data - список продуктов с affected_findings_ids и affected_findings_count |
import_validator_finished |
text, event_name, data - продукт с affected_findings_ids, affected_findings_count, scanner |
schedule_filter |
text, event_name, affected_findings_count, schedule_link и параметры фильтра |
test_credentials |
text, event_name |
Расписание уведомлений
Расписание присылает число уязвимостей по сохранённому фильтру. Создайте его из списка уязвимостей: настройте фильтры и нажмите "Создать уведомление для текущих фильтров".
| Поле | Что задаёт |
|---|---|
| "Название" | имя расписания |
| "Вебхук" | интеграция-получатель |
| расписание | крон или готовый вариант "Повтор"; "Установить вручную" - ввод крона |
| "Активно" | включено ли расписание |
| "Передавать детали об уязвимостях" и "Поля" | добавить список уязвимостей |
- Крон в Core записывается в нестандартном порядке:
минута час день_недели день_месяца месяц. Пример:0 9 1-5 * *- в 09:00 по будням. Время - UTC. - Расписание считает уязвимости в продуктах, доступных его создателю, и в области действия интеграции.
- Текст содержит число уязвимостей, ссылку на список с этим фильтром и ссылку на отключение расписания.
- Расписание удаляется вместе с пользователем, который его создал.
Детали уязвимостей
В правилах и расписаниях можно выбрать поля уязвимостей для текста: id, name, severity, scanner, description, current_sla_level, file_path, line, vulnerable_url, dependency, branch, repository, docker_image, domain, host, cloud_account, custom_field. Core добавляет их в text списком в разметке Markdown.
Проверка
- Создайте интеграцию с областью "Глобально" и нажмите "Проверить соединение": получатель вернул код 2xx, статус "Подключено".
- Создайте правило смены статуса "Было" - "Любой", "Стало" - "Отклонено".
- Отклоните тестовую уязвимость: получатель принял
status_changed.
Ограничения
- Один канал доставки - HTTP POST.
- Повторной отправки нет, очереди недоставленных сообщений нет.
- Тексты уведомлений не переводятся.