Документация / Руководство пользователя / Объекты
Аудиты
Аудит - запись об одном прогоне сканирования: какие ассеты и сканеры в нём участвовали, ветка и коммит, сколько уязвимостей добавлено и решено. По аудиту видно, что принёс конкретный скан, и из него открывается список его уязвимостей.
Где в интерфейсе: "Аудиты" - все аудиты доступных продуктов; вкладка продукта "Аудиты продукта" - аудиты одного продукта.
Права: смотреть аудиты - "Продукты" - "Просмотр"; запускать сканирование - "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" - "Изменение".
Шаги:
- Выделите продукты в "Продукты" или ассеты в "Ассеты". Можно открыть один продукт или ассет.
- Нажмите "Запустить аудит".
- В "Дополнительные параметры" при необходимости задайте:
- "Ветка (необязательно)" - ветка репозитория;
- "Тег докер образа (необязательно)" - тег для ассетов-образов;
- "Последовательность джоб (необязательно)" - набор сканеров вместо заданного на ассете.
- Подтвердите. Core сразу ответит "Обработка" и отправит задания в Radar пачками по 100 ассетов: один пайплайн Radar на ассет.
- "Посмотреть в списке" откроет список аудитов.
Какая последовательность используется: заданная при запуске, иначе привязанная к ассету, иначе последовательность по умолчанию. После установки по умолчанию действует последовательность 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 |