Перейти к содержимому

Руководство

Экспорт в SARIF и интеграция с GitHub code scanning

Экспортируйте аудит vetkit в SARIF 2.1.0, сверьте отчёт с коммитом репозитория и загрузите его через свой workflow в GitHub Actions.

· 5 мин чтения · Команда vetkit

Робот подаёт разномастные листы бумаги в машину, которая превращает их в одну аккуратную стопку одинаковых отчётов для разработчика.Робот подаёт разномастные листы бумаги в машину, которая превращает их в одну аккуратную стопку одинаковых отчётов для разработчика.

Экспортируйте завершённый аудит vetkit через эндпоинт отчёта с format=sarif, а затем загрузите файл SARIF 2.1.0 из своего workflow в GitHub Actions. Перед загрузкой сверьте аудит с анализируемыми репозиторием и коммитом. Само по себе скачивание отчёта не публикует алерты в GitHub; загрузка — отдельный шаг, который вы настраиваете.

1. Проверьте предварительные условия

  • Вам понадобятся ID организации, ID аудита и API-ключ vetkit с правом reports:read. Автоматизированному workflow, который также запускает аудиты и опрашивает их статус, нужны audits:write и audits:read.
  • Проверьте репозиторий и SHA коммита аудита. Для CI запросите или переиспользуйте аудит именно для коммита workflow и дождитесь его завершения перед экспортом.
  • Проверьте JSON-отчёт на частичные результаты и фактическую область сканирования. Валидный SARIF-документ всё равно может отражать неполный анализ.

GitHub поддерживает code scanning для публичных репозиториев и подходящих репозиториев организаций с включённым GitHub Code Security. Проверьте, подходит ли ваш репозиторий и есть ли у вас права на запись, в документации GitHub по загрузке SARIF.

2. Экспортируйте аудит

Задайте переменные ниже в локальной оболочке или в окружении CI. VETKIT_API_URL — это origin вашего API vetkit без /v1. Храните ключ в менеджере секретов или в секретах CI, а не в файле workflow, репозитории или shell-скрипте. Для этой команды нужны curl и jq:

Скачать SARIF для существующего аудита
set -euo pipefail: "${VETKIT_API_URL:?Set the API origin}": "${VETKIT_ORG_ID:?Set the organization ID}": "${VETKIT_AUDIT_ID:?Set the completed audit ID}": "${VETKIT_API_KEY:?Set a reports:read key}" curl --fail-with-body --silent --show-error --max-time 30 \  "$VETKIT_API_URL/v1/orgs/$VETKIT_ORG_ID/audits/$VETKIT_AUDIT_ID/report?format=sarif" \  -H "Authorization: Bearer $VETKIT_API_KEY" \  -o vetkit.sarifjq -e '.version == "2.1.0" and (.runs | type == "array")' vetkit.sarif >/dev/null

Эндпоинт возвращает application/sarif+json и имя файла вложения на основе проверенного коммита. Команда намеренно сохраняет его как vetkit.sarif для шага загрузки. Проверка через jq — базовая проверка формата, а не полная валидация по схеме и не подтверждение полноты сканирования. Относитесь к скачанному отчёту как к информации о репозитории и контролируйте доступ к нему.

3. Загрузите из своего workflow

В workflow для просканированного репозитория сделайте checkout соответствующего исходного кода, получите завершённый аудит и выполните команду скачивания выше. Храните VETKIT_API_KEY в секрете Actions. Следующий фрагмент показывает права и финальный шаг загрузки; это не самостоятельный workflow сканирования. Добавьте скачивание между checkout и загрузкой:

Фрагмент загрузки в GitHub Actions
permissions:  contents: read  actions: read  security-events: write # Inside the job's steps, after choosing the matching audit:steps:  - uses: actions/checkout@v6    with:      persist-credentials: false  # Insert the authenticated download step here.  - name: Upload vetkit results    uses: github/codeql-action/upload-sarif@v4    with:      sarif_file: vetkit.sarif      category: vetkit

Action загрузки GitHub использует sarif_file для пути к отчёту и category, чтобы различать анализы. Повторное использование того же инструмента/категории для того же коммита может заменить предыдущие результаты; для отдельных анализов используйте разные категории. Права и версии actions выше соответствуют примеру GitHub.

В примере интеграции репозитория от vetkit загрузка SARIF опциональна и включается через VETKIT_UPLOAD_SARIF=true. Его workflow полного сканирования запрашивает аудит для точного коммита и отклоняет неудачные, частичные результаты или результаты без балла перед опциональной загрузкой. Эта проверка завершённости не задаёт порога по критичности находок или баллу: политику релиза определяйте отдельно. Проверки GitHub App и загрузка SARIF — это разные пути интеграции.

4. Интерпретируйте импортированные результаты

vetkit экспортирует один SARIF run с vetkit в качестве driver. Результаты включают ID правил, расположение в файлах, где оно доступно, текст рекомендаций по исправлению и fingerprint-ы vetkit. Версии анализаторов записываются как extensions, а происхождение (репозиторий/коммит) включено в отчёт. Сопоставление критичности использует уровни SARIF наряду со свойствами критичности vetkit; эти числовые сопоставления не являются независимо рассчитанными оценками CVSS.

Находки уровня репозитория используют синтетическое расположение (repository), поэтому они могут не указывать на реальную строку исходного кода. Подавленные находки остаются в экспорте с метаданными подавления SARIF. Не считайте, что число экспортированных результатов равно числу активных алертов, которые показывает GitHub. Сохраняйте исходный отчёт vetkit ради данных о покрытии, контекста балла и деталей для ревью.

Решение проблем

  • Скачивание не удаётся: проверьте origin API, ID организации и аудита, действительность ключа и право reports:read. Не выводите ключ при отладке.
  • Неверные расположения в исходном коде: сравните коммит аудита с коммитом workflow и checkout. Не загружайте более старый отчёт как доказательство для более новой ревизии.
  • Загрузка отклонена: проверьте, подходит ли репозиторий для GitHub, права workflow и вывод ошибок action загрузки. GitHub применяет собственный набор поддерживаемых свойств SARIF и ограничения на размер.
  • Алерты не видны: проверьте результаты в файле, метаданные подавления, выбранный анализ и покрытие исходного аудита. Успешная передача не доказывает чистое сканирование.

Источники и ограничения

Проверено 1 ноября 2026 года по контроллеру/сервису отчётов vetkit, сериализатору SARIF и примеру интеграции репозитория с GitHub Actions. Обе стороны интеграции описаны в справочнике по API и в требованиях GitHub к загрузке. Требования GitHub и поведение actions могут меняться. Экспорт в SARIF переносит существующие находки; он не запускает CodeQL, не добавляет проверки в исходный аудит и не гарантирует, что каждая деталь отчёта vetkit появится в интерфейсе GitHub.

Запросить ранний доступ

Расскажите немного о своей команде и репозиториях, которые хотите проверять. Мы подключаем команды небольшими группами и ответим по электронной почте.

Мы используем эти данные только для ответа на ваш запрос. Политика конфиденциальности