Syft: сохранять состав каждого образа
Добавлено 2026-10-11. Нужны Syft, Docker и уже собранный локальный образ.
Проблема
Появилась новая CVE, а состав старого релизного образа неизвестен. Тег уже переместили на другую сборку, исходный контейнер недоступен.
Решение
Создавать SBOM — перечень обнаруженных компонентов — при сборке и сохранять его вместе с идентификатором образа. Syft формирует инвентарь, а поиск CVE выполняет отдельный сканер. Наличие SBOM не означает отсутствие уязвимостей или подтверждённое происхождение образа.
Пример
Сначала задать IMAGE_REF именем реально собранного образа. Использование локального ID предотвращает случайный анализ другой сборки, если тег изменится между командами.
#!/usr/bin/env bash
set -euo pipefail
: "${IMAGE_REF:?Укажите локальный образ для анализа}"
mkdir -p artifacts
image_id=$(docker image inspect --format '{{.Id}}' "$IMAGE_REF")
printf '%s\n' "$image_id" > artifacts/image-id.txt
syft version > artifacts/syft-version.txt
syft "docker:$image_id" \
-o cyclonedx-json=artifacts/sbom.cdx.json \
-o syft-json=artifacts/sbom.syft.json
test -s artifacts/sbom.cdx.json
В CI загрузить три отчёта и файл ID в артефакты соответствующего релиза. Локальный Docker image ID — digest конфигурации, а не digest registry-манифеста. После публикации отдельно сохранить registry digest из результата push; для multi-platform образа учитывать состав каждой платформы. Не называть локальный ID доказательством того, что именно этот manifest опубликован.
Формат CycloneDX удобен для обмена; собственный JSON Syft сохраняет дополнительные сведения. Перед передачей конкретному сканеру проверить поддерживаемую им версию формата. Инвентарь зависит от распознаваемых пакетов и области сканирования; вручную сравнить несколько ожидаемых компонентов с отчётом.
Когда применять
Для образов, которые живут дольше одного CI-запуска, и поиска затронутых релизов после появления CVE. Дополняет Trivy в CI.
Источник
Как применить у себя
- Получить SBOM одного релизного образа и найти в нём ожидаемые системные пакеты и зависимости приложения.
- Проверить, что используемый сканер читает выбранный формат.
- По ID релиза найти SBOM и соответствующий image digest после удаления рабочего каталога CI.
- После настройки хранения и повторного анализа отчёта отметить «Изучено».