SecurityFlow Кабинет лицензий , откроется в новой вкладке

Документация / Руководство пользователя / Объекты

Аудиты

Обновлено 20 октября 2026

Аудит - запись об одном прогоне сканирования: какие ассеты и сканеры в нём участвовали, ветка и коммит, сколько уязвимостей добавлено и решено. По аудиту видно, что принёс конкретный скан, и из него открывается список его уязвимостей.

Где в интерфейсе: "Аудиты" - все аудиты доступных продуктов; вкладка продукта "Аудиты продукта" - аудиты одного продукта.

Права: смотреть аудиты - "Продукты" - "Просмотр"; запускать сканирование - "Radar" - "Изменение" и лицензия "Платная" или лицензия только на Radar.

Когда создаётся аудит

Источник Сколько аудитов Что записывается
"Запустить аудит" по продуктам (POST /api/v1/products/bulk/run-audit/) один на продукт, в нём все ассеты продукта ассеты, ветка
"Запустить аудит" по ассетам, POST /api/v1/ci/pipelines/run/, Security checker по одному на каждый ассет ассет, ветка
Расписание сканирования в Core по одному на каждый ассет из области расписания ассет
Push в репозиторий через интеграцию с системой контроля версий по одному на каждый ассет с этим SSH URL ассет, ветка, "Хеш коммита", "Автор коммита"
Новый тег в реестре контейнеров по одному на каждый ассет-образ ассет; тег образа передаётся в Radar
Импорт отчёта без audit_id, если указан хотя бы один ассет один на импорт ассеты из запроса
Импорт отчёта с audit_id новый не создаётся, уязвимости пишутся в указанный -

Импорт без ассетов аудит не создаёт: форма "Импорт скана" показывает "Аудит недоступен". Подробно - в Импорт отчётов.

Radar получает номер аудита в переменной AUDIT_ID и возвращает его вместе с отчётом. Так отчёты всех сканеров одного прогона попадают в один аудит.

Список аудитов

Аудит показан в списке, если в нём есть ассет из доступного вам продукта.

По каждому аудиту видно:

  • "Аудит от" - дата и время создания;
  • продукты и их ассеты, ветка, "Хеш коммита", "Автор коммита";
  • сканеры и сколько уязвимостей каждый добавил и решил.

Если в аудите есть продукты вне вашей области, блок сканеров скрыт: "Нет доступа к данным сканеров".

Фильтры:

Фильтр Параметр API
"Сканер" scanners_records__scanner
"Branch равен" assets_records__branch
"Автор commit равен" assets_records__commit_author
"Хеш commit равен" assets_records__commit_hash
Период создания, даты включительно date_created_from, date_created_to (ГГГГ-ММ-ДД)
Значение ассета содержит assets_records__asset__value__icontains
Тип ассета assets_records__asset__asset_type (0-4)
Продукт assets_records__asset__product_id

Уязвимости аудита

  • В карточке уязвимости, в блоке "Затронуто", - строка "Добавлено в" со ссылкой на аудит ("Аудит от {дата}").
  • В списке уязвимостей - фильтр "Импортировано в аудите".
  • Через API: GET /api/v1/findings/?affected_by__content_type__model=audit&affected_by__object_id=<id аудита>.

Счётчики аудита и связь уязвимостей с аудитом заполняет обработчик импорта после разбора отчёта. Сразу после запуска счётчики нулевые.

У аудита нет статуса

Если сканер упал или отчёт не дошёл до Core, аудит выглядит как прогон без уязвимостей. Проверяйте статус пайплайнов в Radar: экран "Пайплайны", фильтр "Аудит" по номеру аудита (Как работает Radar).

Запуск сканирования из Core

Перед началом:

  • Radar подключён к Core: в "Radar" → "Настройки" блок "Статус подключения" показывает "Подключено" и "Аутентифицировано" (Первичная настройка);
  • у ассетов задана "Последовательность джоб" или в Core в разделе "Radar" → "Последовательности" есть последовательность по умолчанию (Джобы и последовательности);
  • у вашей роли "Radar" - "Изменение".

Шаги:

  1. Выделите продукты в "Продукты" или ассеты в "Ассеты". Можно открыть один продукт или ассет.
  2. Нажмите "Запустить аудит".
  3. В "Дополнительные параметры" при необходимости задайте:
    • "Ветка (необязательно)" - ветка репозитория;
    • "Тег докер образа (необязательно)" - тег для ассетов-образов;
    • "Последовательность джоб (необязательно)" - набор сканеров вместо заданного на ассете.
  4. Подтвердите. Core сразу ответит "Обработка" и отправит задания в Radar пачками по 100 ассетов: один пайплайн Radar на ассет.
  5. "Посмотреть в списке" откроет список аудитов.

Какая последовательность используется: заданная при запуске, иначе привязанная к ассету, иначе последовательность по умолчанию. После установки по умолчанию действует последовательность Default: Code Downloader, Trufflehog3 Scan, Gitleaks Scan, Semgrep, Trivy Code Dependencies.

Отчёты Radar отправляет в Core от имени пользователя, который запустил аудит. Для расписания - от имени автора расписания, для push-событий и реестров - от имени автора интеграции.

Запуск по всем продуктам

POST /api/v1/products/bulk/run-audit/ без фильтра в строке запроса запускает аудит по всем доступным продуктам. Передавайте фильтр, например ?id__in=3,8.

Ошибка связи с Radar

Если Radar недоступен, Core записывает ошибку в журнал своего воркера, а аудит остаётся пустым. Повторите запуск после восстановления связи.

Регулярный запуск настраивается расписанием: "Radar" → "Расписание" (Джобы и последовательности).

Удаление

"Удалить аудит" удаляет запись о прогоне. Уязвимости остаются. Удалить аудит можно, только если все его продукты входят в вашу область.

Массовое удаление (POST /api/v1/audit/bulk/delete/ с фильтром) выполняется в фоне и затрагивает только аудиты, все продукты которых вам доступны.

API

Метод и путь Назначение
GET /api/v1/audit/ Список аудитов с фильтрами из таблицы выше
GET /api/v1/audit/{id}/ Аудит: date_created, products с ассетами, scanners
DELETE /api/v1/audit/{id}/ Удаление аудита
POST /api/v1/audit/bulk/delete/ Удаление по фильтру в фоне, ответ 202
POST /api/v1/products/bulk/run-audit/ Запуск по продуктам из фильтра. Тело: branch, docker_image_tag, job_sequence, exclude_asset_ids. Ответ 202 с парами product_id/audit_id
POST /api/v1/product-assets/bulk/run-audit/ Запуск по ассетам из фильтра. Ответ 202 с парами asset_id/audit_id
POST /api/v1/ci/pipelines/run/ Запуск по списку продуктов: products, job_sequence, branch, exclude_asset_ids