Skip to content

Как генерировать SBOM

Коротко:

SBOM (Software Bill of Materials) — machine-readable inventory всех компонентов в вашем артефакте (image / binary / source). Требуется US federal contractors (EO 14028), expected в EU CRA 2027. Formats: SPDX (Linux Foundation), CycloneDX (OWASP). Tools: Syft (Anchore, open), Trivy, Docker Scout. Generate → sign через cosign → upload в dependency-track.

Ниже: пошаговая инструкция, рабочие примеры, типичные ошибки, FAQ.

Попробовать бесплатно →

Пошаговая настройка

  1. brew install syft или download binary
  2. Generate для Docker image: syft ghcr.io/me/app:v1 -o spdx-json > sbom.json
  3. Formats: SPDX или CycloneDX (--output cyclonedx-json)
  4. CI integration: syft GitHub Action
  5. Sign + attest: cosign attest --predicate sbom.json --type spdx image
  6. Upload в dependency-track (OWASP) для continuous vulnerability analysis
  7. Link в release notes для consumers

Рабочие примеры

СценарийКонфиг
Syft basic Docker# From Docker image $ syft ghcr.io/me/app:v1 -o spdx-json > sbom.spdx.json # From directory $ syft dir:./src -o cyclonedx-json > sbom.cdx.json # From archive $ syft file:./app.tar.gz
GitHub Action- uses: anchore/sbom-action@v0 with: image: ghcr.io/me/app:v1 format: spdx-json output-file: sbom.json - uses: actions/upload-artifact@v4 with: name: sbom path: sbom.json
Scan SBOM for CVEs# Grype reads SBOM + checks против CVE DB $ grype sbom:sbom.json # In CI $ grype sbom:sbom.json --fail-on high
Dependency-Track upload# POST SBOM для continuous monitoring $ curl -X POST https://dtrack.example.com/api/v1/bom \ -H 'X-API-Key: ${DT_TOKEN}' \ -F 'project=<UUID>' \ -F 'bom=@sbom.json'
Attest SBOM (cosign)$ cosign attest --predicate sbom.spdx.json \ --type spdx \ ghcr.io/me/app:v1 # Downloads → verified: $ cosign verify-attestation --type spdx ghcr.io/me/app:v1

Типичные ошибки

  • SBOM не включает transitive vendor code (header files, build tools). Use syft --scope all-layers
  • Multi-stage builds — final image содержит только runtime packages. Build-time tools missing из SBOM
  • Dynamic languages (Python, Node) — pip/npm lockfile важны. No lockfile = incomplete SBOM
  • Outdated SBOM — generate per release + re-run weekly grype scan (new CVEs появляются)
  • CycloneDX vs SPDX: convert между ними возможен но lose info. Stick с one format per project

Больше по теме

Часто задаваемые вопросы

Когда нужен SBOM?

US federal contractors с 2023 (EO 14028). EU Cyber Resilience Act (CRA) с 2027 — весь software на EU рынке. Enterprise customers — expected в RFP.

SPDX или CycloneDX?

SPDX: Linux Foundation, широкое acceptance в enterprise. CycloneDX: OWASP, focus на security, richer vulnerability info. Оба — ISO стандарты 2024+.

SBOM scanning?

Grype (Anchore) reads SPDX/CycloneDX + CVE DB. Dependency-Track (OWASP) — continuous monitoring, new CVEs alert on old release.

Monitor endpoint for SBOM?

Upload в Dependency-Track / Snyk / GitHub Advisory. Для endpoint uptime — <a href="/check">Enterno HTTP checker</a>.