Hoe u een CRA-conforme SBOM genereert: tools, formaten en CI/CD-integratie
Een praktische gids voor het genereren van Software Bills of Materials voor CRA-compliance. Behandelt open-source tools, formaatkeuze en geautomatiseerde pipeline-integratie.
In this article
De CRA vereist een Software Bill of Materials. Elk concurrerend artikel vertelt u dit. Geen enkel laat u zien hoe u er een genereert.
Deze gids behandelt open-source tools, formaatkeuze en CI/CD-integratie — zonder vendor lock-in.
Tip: Begin met Syft of Trivy voor SBOM-generatie — beide ondersteunen CycloneDX- en SPDX-uitvoer en integreren eenvoudig in CI/CD-pipelines.
Samenvatting
- De CRA vereist machineleesbare SBOM's die "ten minste top-level dependencies" omvatten
- Aanbevolen formaten: CycloneDX 1.4+ of SPDX 2.3+ (per BSI TR-03183)
- Open-source tools: Syft (images/bestandssystemen), Trivy (containers), cdxgen (broncode)
- SBOM-generatie integreren in CI/CD voor automatische updates
- Kwaliteit telt: minimumvelden omvatten pakketnaam, versie, leverancier, hash, licentie
Belangrijk: De CRA vereist machineleesbare SBOM's die alle transitive dependencies omvatten. Een eenvoudig package.json of requirements.txt volstaat NIET.
Wat de CRA daadwerkelijk vereist
Laten we beginnen met wat de verordening zegt. Bijlage I, Deel II van de CRA vereist dat fabrikanten:
"kwetsbaarheden en componenten van het product identificeren en documenteren, onder meer door het opstellen van een softwarestuklijst in een gangbaar en machineleesbaar formaat"
Kernpunten:
- Machineleesbaar formaat: Geen PDF, geen spreadsheet, maar gestructureerde data
- Minimaal top-level dependencies: Het minimum, meer is beter
- Niet verplicht openbaar: Verstrekt aan autoriteiten op verzoek
- Moet worden bijgewerkt: Bij elke release, patch of componentwijziging
De CRA schrijft geen specifiek formaat voor, maar standaardiseringsinitiatieven wijzen duidelijk naar CycloneDX en SPDX.
Formaatkeuze: CycloneDX vs. SPDX
Twee formaten domineren het SBOM-landschap. Beide zijn acceptabel voor CRA-compliance.
CycloneDX
Oorsprong: OWASP-project, beveiligingsgericht Huidige versie: 1.6 (1.4+ aanbevolen voor CRA) Beste voor: Beveiligings- en kwetsbaarheidsbeheer
Sterke punten:
- Native VEX-ondersteuning (Vulnerability Exploitability eXchange)
- Ontworpen voor beveiligingsgebruiksscenario's
- Lichtere specificatie, eenvoudiger te implementeren
- Sterk tools-ecosysteem
- Directe CVE-/kwetsbaarheidskoppeling
JSON-voorbeeld:
{
"bomFormat": "CycloneDX",
"specVersion": "1.5",
"version": 1,
"components": [
{
"type": "library",
"name": "lodash",
"version": "4.17.21",
"purl": "pkg:npm/lodash@4.17.21",
"hashes": [
{
"alg": "SHA-256",
"content": "cc6d..."
}
],
"licenses": [
{
"license": {
"id": "MIT"
}
}
]
}
]
}
SPDX
Oorsprong: Linux Foundation, licentie-compliance-gericht Huidige versie: 2.3 (ISO/IEC 5962:2021-norm) Beste voor: Licentie-compliance en juridische review
Sterke punten:
- ISO internationale norm
- Uitgebreide licentie-expressiesyntax
- Sterk in open-source compliance-contexten
- Langere staat van dienst
- Beter voor complexe licentiescenario's
JSON-voorbeeld:
{
"spdxVersion": "SPDX-2.3",
"dataLicense": "CC0-1.0",
"SPDXID": "SPDXRef-DOCUMENT",
"name": "my-application",
"packages": [
{
"SPDXID": "SPDXRef-Package-lodash",
"name": "lodash",
"versionInfo": "4.17.21",
"downloadLocation": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"licenseConcluded": "MIT",
"checksums": [
{
"algorithm": "SHA256",
"checksumValue": "cc6d..."
}
]
}
]
}
Welk formaat kiezen?
| Gebruiksscenario | Aanbeveling |
|---|---|
| Primaire focus is beveiliging/kwetsbaarheden | CycloneDX |
| Primaire focus is licentie-compliance | SPDX |
| VEX-integratie nodig | CycloneDX |
| Onderneming met bestaande SPDX-tooling | SPDX |
| Duitse markt (BSI TR-03183) | Beide (beide aanbevolen) |
| Nieuw beginnen, geen voorkeur | CycloneDX (eenvoudiger, beveiligingsgericht) |
Voor CRA-compliance werkt elk formaat. Kies er één en wees consistent.
Open-source SBOM-generatietools
Geen vendor lock-in vereist. Deze tools zijn gratis, open-source en productieklaar.
Syft (Anchore)
Beste voor: Containerimages, bestandssystemen, archieven Licentie: Apache 2.0 Uitvoerformaten: CycloneDX, SPDX, Syft JSON
Installatie:
# Linux/macOS
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
# Homebrew
brew install syft
# Docker
docker pull anchore/syft
Gebruiksvoorbeelden:
# Containerimage scannen
syft alpine:latest -o cyclonedx-json > sbom.cdx.json
# Map scannen
syft dir:/pad/naar/project -o cyclonedx-json > sbom.cdx.json
# Archief scannen
syft /pad/naar/archief.tar.gz -o spdx-json > sbom.spdx.json
# Scannen met specifieke catalogiseerders (bijv. alleen Python)
syft dir:. -o cyclonedx-json --select-catalogers python
Ondersteunde ecosystemen: Python, Node.js, Ruby, Java, Go, Rust, PHP, .NET en meer.
Trivy (Aqua Security)
Beste voor: Containerimages met ingebouwde kwetsbaarheidscontext Licentie: Apache 2.0 Uitvoerformaten: CycloneDX, SPDX plus kwetsbaarheidsrapporten
Installatie:
# Linux (Debian/Ubuntu)
sudo apt-get install trivy
# macOS
brew install trivy
# Docker
docker pull aquasec/trivy
Gebruiksvoorbeelden:
# SBOM genereren vanuit containerimage
trivy image --format cyclonedx --output sbom.cdx.json alpine:latest
# SBOM genereren vanuit bestandssysteem
trivy fs --format cyclonedx --output sbom.cdx.json /pad/naar/project
# SBOM genereren met kwetsbaarheidsinfo
trivy image --format cyclonedx --output sbom.cdx.json \
--scanners vuln nginx:latest
Voordeel: Trivy kan SBOM's genereren én kwetsbaarheden scannen in één stap.
cdxgen (CycloneDX)
Beste voor: Broncodeanalyse in veel talen Licentie: Apache 2.0 Uitvoerformaat: CycloneDX
Installatie:
# npm (vereist Node.js)
npm install -g @cyclonedx/cdxgen
# Docker
docker pull ghcr.io/cyclonedx/cdxgen
Gebruiksvoorbeelden:
# Huidige map scannen
cdxgen -o sbom.json
# Specifiek projecttype scannen
cdxgen -t python -o sbom.json
# Scannen met diepe afhankelijkheidresolutie
cdxgen --deep -o sbom.json
# Specifieke map scannen
cdxgen -o sbom.json /pad/naar/project
Ondersteunde talen: JavaScript, Python, Java, Go, Rust, PHP, Ruby, .NET, C/C++ en meer.
Toolsvergelijking
| Functie | Syft | Trivy | cdxgen |
|---|---|---|---|
| Containerimages | Uitstekend | Uitstekend | Goed |
| Broncode | Goed | Goed | Uitstekend |
| Bestandssysteemscanning | Uitstekend | Goed | Goed |
| Kwetsbaarheidsscanning | Nee (gebruik Grype) | Ja | Nee |
| CycloneDX-uitvoer | Ja | Ja | Ja |
| SPDX-uitvoer | Ja | Ja | Nee |
| Snelheid | Snel | Gemiddeld | Gemiddeld |
| Taaldekking | Zeer breed | Breed | Zeer breed |
Aanbeveling: Begin met Syft voor de meeste gebruiksscenario's. Voeg Trivy toe als u geïntegreerde kwetsbaarheidsscanning nodig heeft. Gebruik cdxgen voor complexe broncodeprojecten.
CI/CD-integratie
Handmatige SBOM-generatie schaalt niet. Integreer het in uw buildpipeline.
GitHub Actions
name: SBOM-generatie
on:
push:
branches: [main]
release:
types: [published]
jobs:
sbom:
runs-on: ubuntu-latest
steps:
- name: Code uitchecken
uses: actions/checkout@v4
- name: Syft installeren
run: |
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
- name: SBOM genereren
run: |
syft dir:. -o cyclonedx-json > sbom.cdx.json
- name: SBOM uploaden als artifact
uses: actions/upload-artifact@v4
with:
name: sbom
path: sbom.cdx.json
retention-days: 90
# Optioneel: uploaden naar CRA Evidence
- name: Uploaden naar CRA Evidence
if: github.event_name == 'release'
env:
CRA_EVIDENCE_TOKEN: ${{ secrets.CRA_EVIDENCE_TOKEN }}
run: |
curl -X POST https://app.craevidence.com/api/v1/ci/sbom \
-H "Authorization: Bearer $CRA_EVIDENCE_TOKEN" \
-F "file=@sbom.cdx.json" \
-F "product_id=${{ vars.PRODUCT_ID }}" \
-F "version=${{ github.ref_name }}"
GitLab CI
generate-sbom:
stage: build
image: anchore/syft:latest
script:
- syft dir:. -o cyclonedx-json > sbom.cdx.json
artifacts:
paths:
- sbom.cdx.json
expire_in: 90 days
rules:
- if: $CI_COMMIT_BRANCH == "main"
- if: $CI_COMMIT_TAG
Jenkins
pipeline {
agent any
stages {
stage('SBOM genereren') {
steps {
sh '''
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b .
./syft dir:. -o cyclonedx-json > sbom.cdx.json
'''
}
}
stage('SBOM archiveren') {
steps {
archiveArtifacts artifacts: 'sbom.cdx.json', fingerprint: true
}
}
}
}
Docker Build-integratie
SBOM genereren tijdens Docker build:
# Multi-stage build met SBOM-generatie
FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# SBOM genereren in buildstage
FROM anchore/syft:latest AS sbom
COPY --from=builder /app /app
RUN syft dir:/app -o cyclonedx-json > /sbom.cdx.json
# Eindimage
FROM node:20-slim
COPY --from=builder /app/dist /app
COPY --from=sbom /sbom.cdx.json /app/sbom.cdx.json
CMD ["node", "/app/index.js"]
SBOM-kwaliteit: voldoen aan TR-03183
De Duitse BSI Technische Richtlijn TR-03183 breidt de NTIA-minimumelementen uit. Hoewel niet wettelijk verplicht in de hele EU, garandeert het volgen van TR-03183 hoge kwaliteit SBOM's.
Vereiste velden
| Veld | Vereist door | Opmerkingen |
|---|---|---|
| Componentnaam | NTIA + TR-03183 | Pakketidentificatie |
| Versie | NTIA + TR-03183 | Exacte versiereeks |
| Leverancier | NTIA + TR-03183 | Leverancier of beheerder |
| Unieke identifier | NTIA + TR-03183 | PURL aanbevolen |
| Afhankelijkheidsrelatie | NTIA + TR-03183 | Direct vs. transitief |
| Auteur van SBOM | NTIA + TR-03183 | Wie de SBOM heeft gemaakt |
| Tijdstempel | NTIA + TR-03183 | Wanneer SBOM is gemaakt |
| Hashwaarden | TR-03183 | Minimaal SHA-256 |
| Licentie | TR-03183 | SPDX-licentie-ID |
| Bronrepository | TR-03183 | VCS-URL indien beschikbaar |
SBOM-kwaliteit valideren
Gebruik deze tools om uw SBOM te controleren:
# CycloneDX-formaat valideren
npm install -g @cyclonedx/cyclonedx-cli
cyclonedx validate --input-file sbom.cdx.json
# Controleren op minimumvelden met jq
jq '.components[] | select(.version == null or .purl == null)' sbom.cdx.json
# Componenten met hashes tellen
jq '[.components[] | select(.hashes != null)] | length' sbom.cdx.json
SBOM-kwaliteit verbeteren
Als uw SBOM gegevens mist:
- Gebruik lockfiles:
package-lock.json,Pipfile.lock,go.sumbevatten meer metadata - Scan gebouwde artefacten: Completer dan alleen broncodeScans
- Combineer tools: Verschillende tools vinden verschillende componenten
- Handmatige vermeldingen toevoegen: Voor commerciële of interne componenten
SBOM's actueel houden
Een SBOM is een momentopname. Deze moet worden bijgewerkt om bruikbaar te blijven.
Wanneer opnieuw genereren
- Bij elke release (major, minor, patch)
- Na afhankelijkheidsupdates
- Na beveiligingspatches
- Als de buildconfiguratie verandert
Versioneringsstrategie
product-v1.0.0-sbom.cdx.json
product-v1.0.1-sbom.cdx.json
product-v1.1.0-sbom.cdx.json
Of gebruik tijdstempels:
product-sbom-2026-01-15T10-30-00Z.cdx.json
Bewaring
De CRA vereist 10 jaar bewaring. Sla historische SBOM's op:
- In uw artefactrepository
- In S3/cloudopslag met levenscyclusbeleid
- In CRA Evidence voor geïntegreerde compliance-tracking
Veelgemaakte fouten
Eenmalige SBOM-generatie
Probleem: Eenmalig een SBOM aanmaken en nooit bijwerken.
Oplossing: SBOM-generatie automatiseren in CI/CD. Elke build moet een verse SBOM produceren.
Ontbrekende transitive dependencies
Probleem: SBOM vermeldt alleen directe afhankelijkheden, niet geneste pakketten.
Oplossing: Gebruik lockfiles, scan gebouwde artefacten, schakel opties voor diep scannen in.
Onjuiste formaatversie
Probleem: CycloneDX 1.3 gebruiken terwijl TR-03183 1.4+ aanbeveelt.
Oplossing: Controleer de uitvoerversie van uw tool. Houd tools regelmatig up-to-date.
Geen hashwaarden
Probleem: Componenten zonder cryptografische hashes kunnen niet worden geverifieerd.
Oplossing: Zorg dat uw tool hashes opneemt. Scan gebouwde artefacten in plaats van alleen broncode.
Handmatig aanmaken
Probleem: Handmatig SBOM's opstellen is foutgevoelig en onhoudbaar.
Oplossing: Altijd automatiseren. Handmatige vermeldingen alleen voor componenten die tools niet kunnen detecteren.
Interne componenten negeren
Probleem: Alleen open-source afhankelijkheden documenteren, niet de eigen code.
Oplossing: Interne componenten moeten ook worden gedocumenteerd. Voeg ze handmatig toe of configureer tools op de juiste manier.
SBOM-implementatiechecklist
SBOM-IMPLEMENTATIECHECKLIST
FORMAATKEUZE:
[ ] CycloneDX 1.4+ of SPDX 2.3+ gekozen
[ ] JSON-formaat (machineleesbaar)
[ ] Beslissing gedocumenteerd
TOOLING:
[ ] Primaire tool geselecteerd (Syft/Trivy/cdxgen)
[ ] Tool lokaal geïnstalleerd en getest
[ ] Uitvoer gevalideerd tegen schema
CI/CD-INTEGRATIE:
[ ] SBOM-generatie toegevoegd aan buildpipeline
[ ] Artefacten opgeslagen met passende bewaring
[ ] Generatie getriggerd bij releases
KWALITEITSBORGING:
[ ] Alle componenten hebben: naam, versie, leverancier
[ ] Hashwaarden aanwezig (SHA-256+)
[ ] Licentie-informatie opgenomen
[ ] Transitive dependencies vastgelegd
[ ] PURL-identifiers gebruikt
OPERATIONEEL:
[ ] SBOM geversioned naast productreleases
[ ] Historische SBOM's gearchiveerd (10 jaar bewaring)
[ ] Proces gedocumenteerd voor het team
OPTIONEEL - CRA EVIDENCE-INTEGRATIE:
[ ] API-token geconfigureerd
[ ] Upload geautomatiseerd bij release
[ ] Kwaliteitsscoring ingeschakeld
Volgende stappen
Met geautomatiseerde SBOM-generatie bent u klaar voor:
- Kwetsbaarheidsscanning: SBOM's koppelen aan kwetsbaarheidsdatabases
- Licentie-compliance: Licentieveplichtingen analyseren
- Integratie technisch dossier: SBOM's opnemen in CRA-documentatie
- Voorbereiding ENISA-melding: SBOM's maken snelle kwetsbaarheidsidentificatie mogelijk
CRA Evidence automatiseert deze volledige workflow:
- SBOM's uploaden via CLI of CI/CD
- Automatische kwetsbaarheidsscanning met Trivy
- TR-03183-kwaliteitsscoring
- Export technisch dossier met geïntegreerde SBOM's
Begin met het genereren van conforme SBOM's op app.craevidence.com.
Vereisten: Begrijp wat de CRA vereist voor SBOM's in onze SBOM-vereistengids.
Kwaliteit: Valideer uw SBOM aan de hand van de BSI TR-03183-norm.
VEX: Voeg kwetsbaarheidscontext toe aan uw SBOM met VEX-documenten.
Dit artikel is uitsluitend bedoeld ter informatie en vormt geen juridisch advies. Raadpleeg voor specifieke compliancebegeleiding een gekwalificeerde juridisch adviseur met kennis van EU-productregelgeving.
Gerelateerde artikelen
Hoe een Firmware SBOM te Genereren: Open Source Tools en...
Stap-voor-stap handleiding voor het genereren van een Software Bill of...
10 Min.De CRA krijgt zijn instructiehandleiding: wat de...
De Europese Commissie heeft ontwerpleidraad gepubliceerd voor de Cyber...
9 Min.Zijn slimme camera's Belangrijke producten onder de EU...
Slimme beveiligingscamera's zijn geclassificeerd als Belangrijke producten...
9 Min.Does the CRA apply to your product?
Beantworte 6 einfache Fragen, um herauszufinden, ob dein Produkt unter den Geltungsbereich des EU Cyber Resilience Act fällt. Erhalte dein Ergebnis in weniger als 2 Minuten.
Bereit für CRA-Konformität?
Beginnen Sie mit der Verwaltung Ihrer SBOMs und Konformitätsdokumentation mit CRA Evidence.