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.

CRA Evidence Team
Författare
5 februari 2026
Uppdaterad 25 februari 2026 00:00:00 UTC
10 min läsning
Hur du genererar en CRA-kompatibel SBOM: Verktyg, format och CI/CD-integration
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:

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:

  1. Använd låsfiler: package-lock.json, Pipfile.lock, go.sum innehåller mer metadata
  2. Skanna byggda artefakter: Mer kompletta än enbart källkodskanningar
  3. Kombinera verktyg: Olika verktyg hittar olika komponenter
  4. 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:

  1. Sårbarhetsskanning: Anslut SBOM:er till sårbarhetsdatabaser
  2. Licensefterlevnad: Analysera licensskyldigheter
  3. Teknisk filintegration: Inkludera SBOM:er i CRA-dokumentation
  4. 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.

Ämnen som tas upp i den här artikeln

Dela den här artikeln

Relaterade artiklar

Does 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.