Hur du genererar en CRA-kompatibel SBOM: Verktyg, format och CI/CD-integration
En praktisk guide för att generera Software Bill of Materials för CRA-efterlevnad. Täcker verktyg med öppen källkod, formatval och automatiserad pipelineintegration.
In this article
CRA kräver en Software Bill of Materials. Varje konkurrentartikel berättar detta för dig. Ingen visar hur du genererar en.
Den här guiden täcker verktyg med öppen källkod, formatval och CI/CD-integration utan krav på leverantörslåsning.
Tips: Börja med Syft eller Trivy för SBOM-generering — båda stöder CycloneDX- och SPDX-utdata och integreras enkelt i CI/CD-pipelines.
Sammanfattning
- CRA kräver maskinläsbara SBOM:er som täcker "minst beroenden på toppnivå"
- Rekommenderade format: CycloneDX 1.4+ eller SPDX 2.3+ (per BSI TR-03183)
- Verktyg med öppen källkod: Syft (avbildningar/filsystem), Trivy (containrar), cdxgen (källkod)
- Integrera SBOM-generering i CI/CD för automatiska uppdateringar
- Kvalitet spelar roll: minimifält inkluderar paketnamn, version, leverantör, hash, licens
Viktigt: CRA kräver maskinläsbara SBOM:er som täcker alla transitiva beroenden. En enkel package.json eller requirements.txt är INTE tillräcklig.
Vad CRA faktiskt kräver
Låt oss börja med vad förordningen säger. Bilaga I, Del II av CRA kräver att tillverkare:
"identifierar och dokumenterar sårbarheter och komponenter som ingår i produkten, inklusive genom att upprätta en programvarubilaga i ett vanligen använt och maskinläsbart format"
Nyckelpoänger:
- Maskinläsbart format: Inte en PDF, inte ett kalkylblad, utan strukturerad data
- Minst beroenden på toppnivå: Minimomfånget, men mer är bättre
- Behöver inte vara offentlig: Tillhandahålls till myndigheter på begäran
- Måste uppdateras: Med varje utgåva, patch eller komponentändring
CRA föreskriver inte ett specifikt format, men standardiseringsarbete pekar tydligt mot CycloneDX och SPDX.
Formatval: CycloneDX kontra SPDX
Två format dominerar SBOM-landskapet. Båda är acceptabla för CRA-efterlevnad.
CycloneDX
Ursprung: OWASP-projekt, säkerhetsfokuserat Aktuell version: 1.6 (1.4+ rekommenderas för CRA) Bäst för: Säkerhet och sårbarhethantering
Styrkor:
- Inbyggt VEX-stöd (Vulnerability Exploitability eXchange)
- Designat för säkerhetsändamål
- Lättare specifikation, enklare att implementera
- Starkt verktygsekosystem
- Direkt CVE/sårbarhetslänkning
JSON-exempel:
{
"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
Ursprung: Linux Foundation, licensefterlevnadsfokuserat Aktuell version: 2.3 (ISO/IEC 5962:2021-standard) Bäst för: Licensefterlevnad och juridisk granskning
Styrkor:
- ISO internationell standard
- Uttömmande licensuttryckssyntax
- Stark i öppen källkod-efterlevnadssammanhang
- Längre meritlista
- Bättre för komplexa licensscenarier
JSON-exempel:
{
"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..."
}
]
}
]
}
Vilket ska du välja?
| Användningsfall | Rekommendation |
|---|---|
| Primärt fokus är säkerhet/sårbarheter | CycloneDX |
| Primärt fokus är licensefterlevnad | SPDX |
| Behöver VEX-integration | CycloneDX |
| Företag med befintliga SPDX-verktyg | SPDX |
| Tysk marknad (BSI TR-03183) | Antingen (båda rekommenderas) |
| Börjar från scratch, ingen preferens | CycloneDX (enklare, säkerhetsfokuserat) |
För CRA-efterlevnad fungerar båda formaten. Välj ett och var konsekvent.
SBOM-genereringsverktyg med öppen källkod
Ingen leverantörslåsning krävs. Dessa verktyg är gratis, öppen källkod och produktionsklara.
Syft (Anchore)
Bäst för: Containeravbildningar, filsystem, arkiv Licens: Apache 2.0 Utdataformat: CycloneDX, SPDX, Syft JSON
Installation:
# 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
Användningsexempel:
# Skanna en containeravbildning
syft alpine:latest -o cyclonedx-json > sbom.cdx.json
# Skanna en katalog
syft dir:/path/to/project -o cyclonedx-json > sbom.cdx.json
# Skanna ett arkiv
syft /path/to/archive.tar.gz -o spdx-json > sbom.spdx.json
# Skanna med specifika katalogisatorer (t.ex. bara Python)
syft dir:. -o cyclonedx-json --select-catalogers python
Stödda ekosystem: Python, Node.js, Ruby, Java, Go, Rust, PHP, .NET och mer.
Trivy (Aqua Security)
Bäst för: Containeravbildningar med inbyggt sårbarhetsammanhang Licens: Apache 2.0 Utdataformat: CycloneDX, SPDX, plus sårbarhetrapporter
Installation:
# Linux (Debian/Ubuntu)
sudo apt-get install trivy
# macOS
brew install trivy
# Docker
docker pull aquasec/trivy
Användningsexempel:
# Generera SBOM från containeravbildning
trivy image --format cyclonedx --output sbom.cdx.json alpine:latest
# Generera SBOM från filsystem
trivy fs --format cyclonedx --output sbom.cdx.json /path/to/project
# Generera SBOM med sårbarhetsinformation
trivy image --format cyclonedx --output sbom.cdx.json \
--scanners vuln nginx:latest
Fördel: Trivy kan generera SBOM:er och skanna efter sårbarheter i ett svep.
cdxgen (CycloneDX)
Bäst för: Källkodsanalys för många språk Licens: Apache 2.0 Utdataformat: CycloneDX
Installation:
# npm (kräver Node.js)
npm install -g @cyclonedx/cdxgen
# Docker
docker pull ghcr.io/cyclonedx/cdxgen
Användningsexempel:
# Skanna aktuell katalog
cdxgen -o sbom.json
# Skanna specifik projekttyp
cdxgen -t python -o sbom.json
# Skanna med djup beroendeupplösning
cdxgen --deep -o sbom.json
# Skanna en specifik katalog
cdxgen -o sbom.json /path/to/project
Stödda språk: JavaScript, Python, Java, Go, Rust, PHP, Ruby, .NET, C/C++ och mer.
Verktygsjämförelse
| Funktion | Syft | Trivy | cdxgen |
|---|---|---|---|
| Containeravbildningar | Utmärkt | Utmärkt | Bra |
| Källkod | Bra | Bra | Utmärkt |
| Filsystemsskanning | Utmärkt | Bra | Bra |
| Sårbarhetsskanning | Nej (använd Grype) | Ja | Nej |
| CycloneDX-utdata | Ja | Ja | Ja |
| SPDX-utdata | Ja | Ja | Nej |
| Hastighet | Snabb | Medium | Medium |
| Språktäckning | Mycket bred | Bred | Mycket bred |
Rekommendation: Börja med Syft för de flesta användningsfall. Lägg till Trivy om du behöver integrerad sårbarhetsskanning. Använd cdxgen för komplexa källkodsprojekt.
CI/CD-integration
Manuell SBOM-generering skalar inte. Integrera det i din byggpipeline.
GitHub Actions
name: SBOM Generation
on:
push:
branches: [main]
release:
types: [published]
jobs:
sbom:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install Syft
run: |
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
- name: Generate SBOM
run: |
syft dir:. -o cyclonedx-json > sbom.cdx.json
- name: Upload SBOM as artifact
uses: actions/upload-artifact@v4
with:
name: sbom
path: sbom.cdx.json
retention-days: 90
# Valfritt: Ladda upp till CRA Evidence
- name: Upload to 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('Generate SBOM') {
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('Archive SBOM') {
steps {
archiveArtifacts artifacts: 'sbom.cdx.json', fingerprint: true
}
}
}
}
Docker Build-integration
Generera SBOM under Docker-bygget:
# Flerstegsbygge med SBOM-generering
FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Generera SBOM i byggsteget
FROM anchore/syft:latest AS sbom
COPY --from=builder /app /app
RUN syft dir:/app -o cyclonedx-json > /sbom.cdx.json
# Slutlig avbildning
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-kvalitet: Uppfylla TR-03183
Tyska BSIs tekniska riktlinje TR-03183 utökar NTIA:s minimielement. Även om det inte är juridiskt obligatoriskt i hela EU, säkerställer följande av TR-03183 högkvalitativa SBOM:er.
Obligatoriska fält
| Fält | Krävs av | Noteringar |
|---|---|---|
| Komponentnamn | NTIA + TR-03183 | Paketidentifierare |
| Version | NTIA + TR-03183 | Exakt versionssträng |
| Leverantör | NTIA + TR-03183 | Tillverkare eller underhållare |
| Unik identifierare | NTIA + TR-03183 | PURL rekommenderas |
| Beroendeförhållande | NTIA + TR-03183 | Direkt kontra transitiv |
| SBOM-författare | NTIA + TR-03183 | Vem som skapade SBOM:en |
| Tidsstämpel | NTIA + TR-03183 | När SBOM:en skapades |
| Hashvärden | TR-03183 | SHA-256 minimum |
| Licens | TR-03183 | SPDX-licens-ID |
| Källförvar | TR-03183 | VCS-URL om tillgänglig |
Validera SBOM-kvalitet
Använd dessa verktyg för att kontrollera din SBOM:
# Validera CycloneDX-format
npm install -g @cyclonedx/cyclonedx-cli
cyclonedx validate --input-file sbom.cdx.json
# Kontrollera för minimifält med jq
jq '.components[] | select(.version == null or .purl == null)' sbom.cdx.json
# Räkna komponenter med hashar
jq '[.components[] | select(.hashes != null)] | length' sbom.cdx.json
Förbättra SBOM-kvalitet
Om din SBOM saknar data:
- Använd låsfiler:
package-lock.json,Pipfile.lock,go.suminnehåller mer metadata - Skanna byggda artefakter: Mer kompletta än enbart källkodskanningar
- Kombinera verktyg: Olika verktyg hittar olika komponenter
- Lägg till manuella poster: För kommersiella eller interna komponenter
Hålla SBOM:er aktuella
En SBOM är en ögonblicksbild. Den måste uppdateras för att förbli användbar.
När du ska regenerera
- Varje utgåva (major, minor, patch)
- Efter beroendeuppdateringar
- Efter säkerhetspatchar
- När byggkonfigurationen ändras
Versionsstrategi
product-v1.0.0-sbom.cdx.json
product-v1.0.1-sbom.cdx.json
product-v1.1.0-sbom.cdx.json
Eller använd tidsstämplar:
product-sbom-2026-01-15T10-30-00Z.cdx.json
Lagring
CRA kräver 10 års lagring. Spara historiska SBOM:er:
- I ditt artefaktförvar
- I S3/molnlagring med livscykelpolicyer
- I CRA Evidence för integrerad efterlevnadsspårning
Vanliga fallgropar
Engångsgenerering av SBOM
Problem: Skapa en SBOM en gång och aldrig uppdatera den.
Lösning: Automatisera SBOM-generering i CI/CD. Varje bygg bör producera en färsk SBOM.
Saknade transitiva beroenden
Problem: SBOM listar bara direkta beroenden, missar kapslade paket.
Lösning: Använd låsfiler, skanna byggda artefakter, aktivera djupskanningsalternativ.
Fel formatversion
Problem: Använder CycloneDX 1.3 när TR-03183 rekommenderar 1.4+.
Lösning: Kontrollera din utdataversion. Uppdatera verktyg regelbundet.
Inga hashvärden
Problem: Komponenter utan kryptografiska hashar kan inte verifieras.
Lösning: Säkerställ att ditt verktyg inkluderar hashar. Skanna byggda artefakter snarare än bara källkod.
Manuell skapande
Problem: Manuellt utformade SBOM:er är felbenägna och ohållbara.
Lösning: Automatisera alltid. Manuella poster bara för komponenter som verktyg inte kan detektera.
Ignorera interna komponenter
Problem: Dokumentera bara öppen källkod-beroenden, inte proprietär kod.
Lösning: Interna komponenter behöver dokumentation också. Lägg till dem manuellt eller konfigurera verktyg på lämpligt sätt.
Checklista för SBOM-implementering
CHECKLISTA FÖR SBOM-IMPLEMENTERING
FORMATVAL:
[ ] CycloneDX 1.4+ eller SPDX 2.3+ valt
[ ] JSON-format (maskinläsbart)
[ ] Beslut dokumenterat
VERKTYG:
[ ] Primärt verktyg valt (Syft/Trivy/cdxgen)
[ ] Verktyg installerat och testat lokalt
[ ] Utdata validerat mot schema
CI/CD-INTEGRATION:
[ ] SBOM-generering tillagd i byggpipeline
[ ] Artefakter lagrade med lämplig lagring
[ ] Generering utlöst vid utgåvor
KVALITETSSÄKRING:
[ ] Alla komponenter har: namn, version, leverantör
[ ] Hashvärden finns (SHA-256+)
[ ] Licensinformation inkluderad
[ ] Transitiva beroenden fångade
[ ] PURL-identifierare använda
DRIFT:
[ ] SBOM versionerad tillsammans med produktutgåvor
[ ] Historiska SBOM:er arkiverade (10 års lagring)
[ ] Process dokumenterad för teamet
VALFRITT — CRA EVIDENCE-INTEGRATION:
[ ] API-token konfigurerad
[ ] Uppladdning automatiserad vid utgåva
[ ] Kvalitetspoängsättning aktiverad
Nästa steg
Med SBOM-generering automatiserad är du redo för:
- Sårbarhetsskanning: Anslut SBOM:er till sårbarhetsdatabaser
- Licensefterlevnad: Analysera licensskyldigheter
- Teknisk filintegration: Inkludera SBOM:er i CRA-dokumentation
- ENISA-rapporteringsförberedelse: SBOM:er möjliggör snabb sårbarhetidentifiering
CRA Evidence automatiserar hela detta arbetsflöde:
- Ladda upp SBOM:er via CLI eller CI/CD
- Automatisk sårbarhetsskanning med Trivy
- TR-03183-kvalitetspoängsättning
- Teknisk filexport med integrerade SBOM:er
Börja generera kompatibla SBOM:er på app.craevidence.com.
Den här artikeln är endast avsedd för informationsändamål och utgör inte juridisk rådgivning. För specifik efterlevnadsvägledning, konsultera kvalificerade juridiska rådgivare med erfarenhet av EU-produktreglering.
Relaterade artiklar
Hur man Genererar ett Firmware SBOM: Öppna...
Steg-för-steg-guide för att generera ett Software Bill of Materials (SBOM)...
10 minCRA får sin instruktionsmanual: Vad kommissionens...
EU-kommissionen publicerade utkast till vägledning om cyberresiliensakter...
6 minÄr smarta kameror viktiga produkter under EU:s cyberresiliensakt?
Smarta säkerhetskameror klassificeras som viktiga produkter (klass I) under...
8 minDoes the CRA apply to your product?
Besvara 6 enkla frågor för att ta reda på om din produkt omfattas av EU:s Cyber Resilience Act. Få ditt resultat på under 2 minuter.
Redo att uppnå CRA-efterlevnad?
Börja hantera dina SBOMs och efterlevnadsdokumentation med CRA Evidence.