Автоматически проверять безопасность компонентов в сборке и формировать отчет¶
Контекст¶
Если композиционный анализ запускается только вручную, уязвимости и нарушения политик легко заметить слишком поздно, уже после неудачной сборки или выпуска. Опытные команды встраивают такую проверку прямо в сборочный конвейер, чтобы каждый запуск сразу показывал состав компонентов, найденные уязвимости и срабатывания политик.
Для этого используется консольный агент Johnny: он анализирует зависимости, сохраняет результаты в CodeScoring и сохраняет SBOM и отчеты.
В сценарии ниже для примера используется GitLab CI, но тот же принцип подходит и для других конвейеров, где агент Johnny можно запускать как часть сборки.
Что получится¶
После прохождения сценария в .gitlab-ci.yml появится отдельное задание sca, которое:
- запускает агент Johnny на содержимом репозитория;
- сохраняет результаты в проект CodeScoring;
- формирует
bom.jsonиreport.sarifкак артефакты сборки.
Требования¶
Перед началом убедитесь, что есть:
- GitLab-репозиторий с настроенным GitLab CI;
- переменные GitLab CI
JOHNNY_API_URLиJOHNNY_API_TOKEN; - лицензия CodeScoring, в которой включен модуль SCA;
- доступ к CodeScoring, в котором можно автоматически создать проект для результатов агента Johnny через
--create-projectили использовать существующий; - понимание, какие политики должны применяться к запуску агента на этапе
build.
Шаги¶
Шаг 1. Подготовьте бинарный файл агента в среде сборки¶
Перед добавлением задания в конвейер важно убедиться, что сам агент доступен в той среде, где будет выполняться сборка.
- Откройте страницу
[platform-url]/download/в своей инсталляции CodeScoring. - При необходимости проверьте актуальную версию агента по адресу
[platform-url]/download/johnny_version. - Скачайте подходящий исполняемый файл агента в среду сборки, например в
/usr/local/bin/johnny. - Разрешите исполнение файла:
Если требуется более подробный пример именно для GitLab CI, его можно взять из руководства по добавлению агента в GitLab CI.
После этого в конвейере можно вызывать johnny как обычную исполняемую команду.
Шаг 2. Добавьте отдельное задание sca в .gitlab-ci.yml¶
Главная задача этого шага — вынести проверку зависимостей в самостоятельное задание и сразу определить, какие файлы останутся после выполнения сборки.
Пример задания в .gitlab-ci.yml
stages:
- test
sca:
stage: test
script:
- >
johnny scan dir .
--api_token $JOHNNY_API_TOKEN
--api_url $JOHNNY_API_URL
--project "billing-service-cli"
--save-results
--create-project
--stage build
--localization ru
--format "coloredtable,sarif>>report.sarif"
--ignore .git
artifacts:
paths:
- bom.json
- report.sarif
when: always
expire_in: 1 week
Что важно в этом задании:
scan dir .запускает анализ директории репозитория;--project,--save-resultsи--create-projectсохраняют результаты в CodeScoring;--stage buildприменяет политики, относящиеся к запуску через агент Johnny;--format "coloredtable,sarif>>report.sarif"оставляет консольный вывод и одновременно пишет отчет в форматеsarif;bom.jsonформируется агентом автоматически и сохраняется как артефакт вместе сreport.sarif.- полный список флагов и режимов запуска собран в руководстве по запуску агента Johnny.
После этого в конвейере появляется отдельное задание, которое не только запускает анализ, но и оставляет файлы, пригодные для отчётности и дальнейшей автоматизации.
Шаг 3. Запустите конвейер с новым заданием¶
Теперь важно добиться первого реального прогона, чтобы проверить сразу три вещи: команда выполняется, артефакты создаются, а результаты отправляются в платформу.
- Сохраните изменения в
.gitlab-ci.yml. - Зафиксируйте их в Git и отправьте ветку в GitLab.
- Дождитесь запуска задания
sca.
Как трактовать код возврата агента
Код возврата 1 означает, что агент Johnny завершил анализ и нашёл проблемы, соответствующие политикам безопасности. Это не аварийное завершение. Подробно коды возврата и форматы отчетов разобраны в руководстве по запуску агента Johnny.
После первого запуска станет понятно, хватает ли текущих переменных и прав, чтобы задание реально дошло до анализа и выгрузки результатов.
Шаг 4. Посмотрите, как выглядит типичный запуск агента Johnny¶
Ниже — интерактивное демо с примером задания и типичным выводом агента.
После такого запуска в сборке уже остаются SBOM и машинно-читаемый отчет в формате sarif.
Шаг 5. Проверьте, что результаты действительно пригодны для работы дальше¶
Автоматическая проверка имеет смысл только тогда, когда ее результат можно сразу использовать в сборке, платформе и дальнейшей обработке.
Проверьте, что после выполнения задания:
- В артефактах GitLab доступны файлы:
bom.json;report.sarif.
- В CodeScoring появился проект
billing-service-cli, если он не существовал раньше. - В этом проекте сохранены результаты последнего запуска.
Зачем нужны оба файла
bom.json удобно использовать как SBOM-артефакт сборки, а report.sarif — как машинно-читаемый отчет для CI/CD-инструментов, систем безопасной разработки и последующей автоматизации проверок.
На этом этапе сборка уже не просто выполняет проверку, а оставляет после себя понятный набор данных для анализа и отчетности.
Результат¶
Сценарий можно считать завершенным, если:
- в
.gitlab-ci.ymlпоявилось отдельное заданиеscaс запуском агента Johnny; - задание формирует
bom.jsonиreport.sarifкак артефакты; - агент Johnny сохраняет результаты в проект CodeScoring через
--save-results; - команда понимает, что код возврата
1означает найденные нарушения политик, а не сбой агента.
После этого безопасность компонентов проверяется автоматически на этапе сборки, а отчеты остаются доступны и в CI, и в платформе.
Что дальше¶
- добавить дополнительные форматы выгрузки результатов;
- уточнить параметры запуска агента Johnny и состав флагов;
- масштабировать сценарий на другие проекты.