Перейти к содержанию

Syft: сохранять состав каждого образа

Безопасность · SBOM
Не изучено

Добавлено 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.

Источник

Как применить у себя

  1. Получить SBOM одного релизного образа и найти в нём ожидаемые системные пакеты и зависимости приложения.
  2. Проверить, что используемый сканер читает выбранный формат.
  3. По ID релиза найти SBOM и соответствующий image digest после удаления рабочего каталога CI.
  4. После настройки хранения и повторного анализа отчёта отметить «Изучено».