Dieses Dokument befindet sich in aktiver Entwicklung und ist noch nicht finalisiert.
Skip to content

8.2 Automatisierte Workflows

Architektur

Die CRA-Automatisierung der BAUER GROUP ist auf zwei Repositories aufgeteilt:

  • CRA-spezifische Workflows und Actions leben in SEC-CRACompliance (dieses Repo)
  • Generische Actions (VEX-Generierung, SBOM-Attestation) leben in automation-templates

Consumer-Repositories (Ihre Produkte) rufen den CRA-Release-Workflow mit einer einzigen uses:-Zeile auf.

┌──────────────────────────────────────────┐
│          Consumer-Repo (Produkt)          │
│                                          │
│  uses: bauer-group/SEC-CRACompliance/    │
│        .github/workflows/cra-release.yml │
└──────────────────┬───────────────────────┘

    ┌──────────────┼──────────────┐
    ▼              ▼              ▼
┌─────────┐  ┌──────────┐  ┌────────────┐
│ CRA-Repo│  │ CRA-Repo │  │ Automation │
│ Actions │  │ Actions  │  │ Templates  │
├─────────┤  ├──────────┤  ├────────────┤
│ SBOM    │  │Compliance│  │ VEX        │
│ Sign    │  │ Report   │  │ Attestation│
│ Scan    │  │          │  │            │
│ Hub     │  │          │  │            │
└─────────┘  └──────────┘  └────────────┘
CRA-spezifisch CRA-spezifisch  Generisch

Reusable Workflows

cra-release.yml — Release-Artefakte

Der primäre Workflow. Erzeugt, signiert und archiviert alle CRA-Artefakte bei einem Release.

Verwendung (Zero-Config):

yaml
jobs:
  cra:
    uses: bauer-group/SEC-CRACompliance/.github/workflows/cra-release.yml@main
    permissions:
      contents: write
      id-token: write
      attestations: write
      security-events: write

Pipeline-Ablauf:

SchrittActionArtefaktCRA-Referenz
1SBOM-Generierungsbom.cdx.jsonArt. 13(23)
2SBOM-Signierung (Cosign).sig + .certArt. 10(12)
3SBOM-AttestationGitHub AttestationArt. 10(12)
4Vulnerability Scanvulnerability-report.jsonArt. 10(6)
5VEX-Generierungvex.openvex.jsonAnnex I II.2
6Compliance Report.json + .mdAnnex VII
7SARIF-UploadGitHub Security TabArt. 10(8)
8Release-AnhangAlle Artefakte am ReleaseArt. 13

Zero Config

Alle neuen Features (Attestation, VEX, Compliance Report) sind standardmäßig aktiviert. Bestehende Consumer erhalten sie automatisch ohne Workflow-Änderungen.

cra-scan.yml — Geplanter Vulnerability Scan

Für kontinuierliches CVE-Monitoring (Art. 10 Abs. 8). Täglich per Cron-Schedule ausführen.

cra-report.yml — Hub-API-Report

Sendet Compliance-Daten an die Software Security Hub API zur zentralen Erfassung.

Vollständiger Consumer-Workflow

COPY & PASTE

Kopieren Sie diesen Workflow in Ihr Produkt-Repository als .github/workflows/cra.yml. Er deckt Release-Compliance, wöchentliches Scanning und Hub-Reporting ab.

Minimal (Zero-Config)

Funktioniert ohne Konfiguration für jedes Repository. Alle Features mit Defaults aktiviert.

yaml
# .github/workflows/cra.yml
name: CRA Compliance

on:
  release:
    types: [published]
  schedule:
    - cron: '0 6 * * 1'  # Wöchentlich Montag 06:00 UTC
  workflow_dispatch:

permissions:
  contents: write
  id-token: write
  attestations: write
  security-events: write
  issues: write

jobs:
  # Bei Release: Vollständige CRA-Pipeline
  cra-release:
    if: github.event_name == 'release'
    uses: bauer-group/SEC-CRACompliance/.github/workflows/cra-release.yml@main
    permissions:
      contents: write
      id-token: write
      attestations: write
      security-events: write

  # Wöchentlich: CVE-Scan
  cra-scan:
    if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
    uses: bauer-group/SEC-CRACompliance/.github/workflows/cra-scan.yml@main
    permissions:
      contents: read
      security-events: write
      issues: write

Vollständige Konfiguration (alle Parameter)

Für Produkte mit spezifischen Anforderungen — Node.js-Validierung, Class I, Grype-Scanning, etc.

yaml
# .github/workflows/cra.yml
name: CRA Compliance

on:
  release:
    types: [published]
  schedule:
    - cron: '0 6 * * 1'
  workflow_dispatch:

permissions:
  contents: write
  id-token: write
  attestations: write
  security-events: write
  issues: write

jobs:
  # ── Release: Vollständige CRA-Pipeline ──
  cra-release:
    if: github.event_name == 'release'
    uses: bauer-group/SEC-CRACompliance/.github/workflows/cra-release.yml@main
    with:
      # Validierung
      run-validation: true              # Lint/Build vor CRA-Artefakten
      node-version: '24'                # Node.js-Version
      validation-command: 'npm run ci'  # Validierungsbefehl

      # SBOM & Scanning
      scan-target: '.'                  # Verzeichnis, Image-Ref oder SBOM-Pfad
      scan-type: 'auto'                 # auto | fs | image | sbom
      sign-sbom: true                   # Cosign Keyless Signing
      fail-on-critical: true            # Release bei CRITICAL CVEs blockieren
      enable-grype: true                # Zusätzlicher Grype-Scan
      enable-osv: true                  # Zusätzlicher OSV-Scanner

      # Attestation & VEX
      attest-sbom: true                 # GitHub-native SBOM-Attestation
      generate-vex: true                # OpenVEX-Dokument
      vex-overrides: 'security/vex-overrides.json'

      # Compliance-Report
      generate-compliance-report: true
      support-period-years: 5           # Art. 13(8): mindestens 5 Jahre

      # EU-Konformitätserklärung
      generate-eu-doc: true             # Annex V JSON
      render-pdfs: true                 # JSON → PDF-Rendering
      classification: 'important-class-1'  # standard | important-class-1 | important-class-2 | critical
      conformity-module: 'module-a'     # module-a | module-b-c | module-h | eucc
      manufacturer-name: 'BAUER GROUP GmbH'

      # Release
      upload-to-release: true
      retention-days: 90
    permissions:
      contents: write
      id-token: write
      attestations: write
      security-events: write

  # ── Wöchentlich: CVE-Scan ──
  cra-scan:
    if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
    uses: bauer-group/SEC-CRACompliance/.github/workflows/cra-scan.yml@main
    with:
      severity-threshold: 'MEDIUM'
      fail-on-critical: false
      create-issue: true
      enable-grype: true
      enable-osv: true
    permissions:
      contents: read
      security-events: write
      issues: write

  # ── Nach Release: An Hub melden ──
  cra-report:
    if: github.event_name == 'release'
    needs: [cra-release]
    uses: bauer-group/SEC-CRACompliance/.github/workflows/cra-report.yml@main
    with:
      dry-run: true                     # Auf false setzen wenn Hub betriebsbereit
    permissions:
      contents: read
      id-token: write

Docker / Container Image

Für Produkte die Container-Images bauen — scannt das Image statt des Dateisystems.

yaml
jobs:
  cra-release:
    if: github.event_name == 'release'
    uses: bauer-group/SEC-CRACompliance/.github/workflows/cra-release.yml@main
    with:
      scan-target: 'ghcr.io/bauer-group/my-app:${{ github.ref_name }}'
      scan-type: 'image'
      classification: 'important-class-2'
    permissions:
      contents: write
      id-token: write
      attestations: write
      security-events: write

Parameter-Referenz

cra-release.yml

ParameterTypDefaultBeschreibung
run-validationbooleanfalseLint/Build vor CRA-Artefakten ausführen
node-versionstring'24'Node.js-Version (bei run-validation: true)
validation-commandstring'npm run lint'Validierungsbefehl
scan-targetstring'.'Verzeichnis, Image-Referenz oder SBOM-Pfad
scan-typestring'auto'auto, fs, image oder sbom
sign-sbombooleantrueSBOM mit Cosign signieren (keyless)
fail-on-criticalbooleanfalseBei CRITICAL-Schwachstellen fehlschlagen
enable-grypebooleanfalseGrype als zusätzlichen Scanner aktivieren
enable-osvbooleantrueOSV-Scanner aktivieren
attest-sbombooleantrueGitHub SBOM-Attestation erstellen
generate-vexbooleantrueOpenVEX-Dokument generieren
support-period-yearsnumber5Supportzeitraum (Art. 13(8))
generate-eu-docbooleantrueEU-Konformitätserklärung generieren
render-pdfsbooleantrueJSON → PDF rendern
classificationstring'standard'standard, important-class-1, important-class-2, critical
conformity-modulestring'module-a'module-a, module-b-c, module-h, eucc

cra-scan.yml

ParameterTypDefaultBeschreibung
severity-thresholdstring'MEDIUM'Minimale gemeldete Schwere
fail-on-criticalbooleanfalseBei CRITICAL fehlschlagen
create-issuebooleantrueGitHub Issue für CRITICALs erstellen

Benötigte Permissions

WorkflowPermissionGrund
cra-releasecontents: writeRelease-Assets hochladen
cra-releaseid-token: writeCosign Keyless Signing (OIDC)
cra-releaseattestations: writeGitHub SBOM-Attestation
cra-releasesecurity-events: writeSARIF-Upload in Security Tab
cra-scanissues: writeCVE-Issues erstellen

VEX-Triage

Erstellen Sie security/vex-overrides.json in Ihrem Produkt-Repo für manuelle Triage-Entscheidungen:

StatusVerwendung
not_affectedSchwachstelle existiert, ist aber im Produkt nicht ausnutzbar
affectedSchwachstelle ist ausnutzbar — Behebung erforderlich
fixedSchwachstelle wurde behoben
under_investigationBewertung ausstehend (automatisch generierter Standard)

Compliance-Scoring

KategorieMaxKriterien
SBOM20Generiert (10) + Signiert (5) + Attestiert (5)
Signierung15Cosign verifiziert (10) + Attestation vorhanden (5)
Schwachstellen200 kritische (15) + 0 hohe (5)
VEX10Generiert (5) + Manuelle Overrides vorhanden (5)
Sicherheitsrichtlinie15SECURITY.md (10) + CVD-Prozess definiert (5)
Supportzeitraum10In Konfiguration definiert (10)
CRA-Artikelabdeckung10Prozentsatz erfüllter Artikel

CLI-TOOL

Nutzen Sie den cra-check CLI zur lokalen Prüfung oder für beliebige GitHub-Repos.

Dokumentation lizenziert unter CC BY-NC 4.0 · Code lizenziert unter MIT