Réglementations
Générez automatiquement les SBOM obligatoires pour les audits de conformité (CRA, NIS2, Executive Order US).
Mise à jour :
Un SBOM (Software Bill of Materials) est un inventaire complet de tous les composants logiciels de votre application : librairies, versions, licences, dépendances. C’est devenu un standard de sécurité obligatoire pour répondre aux réglementations comme le Cyber Resilience Act ou la directive NIS2.
Syft est un outil open source développé par Anchore qui génère des SBOM en quelques secondes, pour n’importe quelle image conteneur, projet source ou archive. Simple, rapide, intégrable partout.
Exemple concret : scanner une image FastAPI Python (devops-status-api) →
118 packages catalogués, SBOM de 618K en 2 secondes.
Réglementations
Générez automatiquement les SBOM obligatoires pour les audits de conformité (CRA, NIS2, Executive Order US).
Détection vulnérabilités
Alimentez des scanners comme Grype ou Dependency-Track avec des SBOM à jour.
Supply chain sécurisée
Créez des attestations signées qui prouvent l’intégrité de vos builds selon SLSA.
Transparence légale
Documentez automatiquement les licences et composants open source pour vos équipes juridiques.
Le script officiel installe la dernière version stable :
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/binVérifiez l’installation :
syft versionVous devriez voir :
Application: syftVersion: 1.38.2BuildDate: 2025-12-09T21:48:47ZGitCommit: bfe63f83dbaea88e22a5cfcd7d704c034c953730GitDescription: v1.38.2Platform: linux/amd64GoVersion: go1.25.4Compiler: gcSchemaVersion: 16.1.0brew install syftdocker run --rm -v /var/run/docker.sock:/var/run/docker.sock \anchore/syft:latest <source>scoop install syftTéléchargez depuis GitHub Releases ↗ :
wget https://github.com/anchore/syft/releases/download/v1.38.2/syft_1.38.2_linux_amd64.tar.gztar -xzf syft_1.38.2_linux_amd64.tar.gz -C /usr/local/bin syftchmod +x /usr/local/bin/syftSi vous avez une image Docker déjà téléchargée :
syft devops-status-api@sha256:0c4d2ee8...Ce qui se passe :
Résultat :
✔ Cataloged packages [118 packages]NAME VERSION TYPEalpine-baselayout 3.7.1-r8 apkpython 3.12.12 binaryfastapi 0.115.5 pythonpython-jose 3.3.0 pythonstarlette 0.41.3 pythonrequests 2.31.0 python... 112 autres packages118 packages : typique pour une image Python Alpine (base Alpine + dépendances Python + exécutables).
Pour exploiter le SBOM dans d’autres outils :
syft devops-status-api@sha256:0c4d2ee8... -o cyclonedx-json > sbom.json# ✔ Cataloged packages [118 packages]# Fichier généré : sbom.json (618K)Options disponibles :
cyclonedx-json : format JSON CycloneDX (standard DevSecOps)cyclonedx-xml : format XML CycloneDXspdx-json : format JSON SPDX (standard Linux Foundation)spdx-tag-value : format texte SPDX (lisible humain)github-json : format Dependency Graph GitHubtable : tableau terminal (par défaut)text : liste simple texteVérifier le contenu JSON :
jq '.components | length' sbom.json# 969 (composants CycloneDX détaillés : packages + dépendances)Lister les 5 premiers packages Python :
jq '.components[:5] | .[] | {name, version}' sbom.json# {"name": "alembic", "version": "1.14.0"}# {"name": "anthropic", "version": "0.40.0"}# ...Pourquoi CycloneDX ? Développé par l’OWASP, CycloneDX inclut nativement les vulnérabilités (VEX), licences, hashes et dépendances. C’est le format recommandé pour la sécurité applicative.
Pas besoin de docker pull :
syft registry:ghcr.io/mon-org/devops-status-api:v1.0.0 -o spdx-json > app.spdx.json# ✔ Cataloged packages [118 packages]Ce qui se passe :
Avantage : scanner 50 images sans remplir votre disque.
| Critère | CycloneDX | SPDX |
|---|---|---|
| Créateur | OWASP | Linux Foundation |
| Focus | Sécurité applicative + DevSecOps | Conformité légale + licences |
| Vulnérabilités | VEX natif (Vulnerability Exploitability eXchange) | Extension externe nécessaire |
| Taille fichier | Compact (focus composants critiques) | Verbeux (métadonnées exhaustives) |
| Adoption | Scanners (Dependency-Track, Grype, Trivy) | Tooling juridique + ISO/IEC 5962:2021 |
| Format | JSON, XML | JSON, tag-value, RDF, YAML |
Recommandation pratique :
Générer les deux formats simultanément :
syft alpine:latest -o cyclonedx-json=alpine.cdx.json -o spdx-json=alpine.spdx.jsonVous obtenez :
alpine.cdx.json → pour Dependency-Trackalpine.spdx.json → pour l’équipe juridiqueCycloneDX et SPDX évoluent. Syft permet de spécifier la version du schéma :
# CycloneDX 1.5 (recommandé en 2025)syft nginx:latest -o cyclonedx-json@1.5=sbom.json
# SPDX 2.3 (version stable actuelle)syft nginx:latest -o spdx-json@2.3=sbom.jsonPourquoi c’est important ? Les outils en aval (scanners, compliance tools) supportent des versions spécifiques. Vérifiez la doc de votre chaîne d’outils.
Syft ne scanne pas que des images Docker. Il analyse aussi :
cd ~/projets/devops-status-apisyft dir:. -o table | head -15# ✔ Cataloged packages [32 packages]NAME VERSION TYPEalembic 1.14.0 pythonfastapi 0.115.5 pythonpython-jose 3.3.0 pythonrequests 2.31.0 python... 28 autresCe qui est détecté :
requirements.txt, setup.py, pyproject.tomlDifférence image vs source :
Utile pour auditer un serveur :
sudo syft dir:/ -o cyclonedx-json > system-sbom.jsonAttention : cela scanne TOUT le système (paquets APT/YUM, binaires, libs). Le SBOM sera volumineux (plusieurs Mo).
Cas d’usage : Conformité PCI-DSS, audits de vulnérabilités sur machines virtuelles legacy, inventaire datacenter.
Ajoutez cette étape dans .github/workflows/build.yml :
name: Build avec SBOM
on: [push]
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4
- name: Build image run: docker build -t devops-status-api:${{ github.sha }} .
- name: Installer Syft run: curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
- name: Générer SBOM run: syft devops-status-api:${{ github.sha }} -o cyclonedx-json=sbom.json
- name: Uploader SBOM uses: actions/upload-artifact@v4 with: name: sbom-cyclonedx path: sbom.json retention-days: 90Résultat : SBOM stocké 90 jours dans GitHub Artifacts, téléchargeable ou envoyable à un scanner.
- name: Upload to Dependency Graph uses: advanced-security/sbom-generator-action@v1 with: sbom-file: sbom.jsonDans .gitlab-ci.yml :
generate-sbom: image: alpine:latest stage: build before_script: - apk add --no-cache curl - curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin script: - syft $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA -o cyclonedx-json=sbom.json artifacts: paths: - sbom.json expire_in: 1 monthVariables utilisées :
$CI_REGISTRY_IMAGE : chemin complet de l’image dans le registry GitLab$CI_COMMIT_SHA : hash du commit (tag de l’image)Une attestation est un SBOM signé cryptographiquement qui prouve :
Syft + Cosign = attestations SLSA conformes au framework SLSA.
Pré-requis : installer Cosign :
curl -sL https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-amd64 -o cosignchmod +x cosign && sudo mv cosign /usr/local/bin/Générer + signer avec Sigstore (keyless) :
syft attest --output cyclonedx-json devops-status-api@sha256:0c4d2ee8... | \ cosign attest --type cyclonedx --predicate - devops-status-api@sha256:0c4d2ee8...# ✔ Attestation signée et publiée dans le registryCe qui se passe :
Pourquoi crucial ? Sans signature, un attaquant peut modifier le SBOM (masquer une vulnérabilité). L’attestation garantit l’intégrité.
Plutôt que stocker les SBOM dans S3, attachez-les directement aux images avec ORAS.
# Générer SBOMsyft devops-status-api@sha256:0c4d2ee8... -o spdx-json > sbom.spdx.json
# Attacher au registry OCIoras attach --artifact-type application/spdx+json \ devops-status-api@sha256:0c4d2ee8... \ sbom.spdx.json:application/spdx+jsonAvantages : SBOM suit l’image (même registry, même permissions), pas de bucket S3 à gérer.
Votre équipe sécurité veut du CycloneDX, l’équipe juridique du SPDX, et le management un PDF. Générez tout d’un coup :
syft nginx:latest \ -o cyclonedx-json=sbom.cdx.json \ -o spdx-json=sbom.spdx.json \ -o table=sbom.txtEnsuite, convertissez le texte en PDF avec enscript ou pandoc.
Grype est le scanner de vulnérabilités d’Anchore :
# Générer SBOM + scanner en 1 commandesyft devops-status-api@sha256:0c4d2ee8... -o json | grype# ✔ Scanned [12 vulnerability matches]Pourquoi séparer SBOM et scan ? SBOM change rarement, CVE découvertes quotidiennement → re-scanner le même SBOM sans rebuilder l’image.
grype sbom:./sbom.jsonDependency-Track centralise tous vos SBOM et suit les vulnérabilités dans le temps.
Uploader un SBOM via API :
# Générer le SBOMsyft mon-app:latest -o cyclonedx-json > sbom.json
# Encoder en Base64SBOM_B64=$(cat sbom.json | base64 -w0)
# Uploader vers Dependency-Trackcurl -X PUT https://dependency-track.exemple.fr/api/v1/bom \ -H "X-Api-Key: ${DT_API_KEY}" \ -H "Content-Type: application/json" \ -d "{ \"projectName\": \"mon-app\", \"projectVersion\": \"1.0\", \"autoCreate\": true, \"bom\": \"${SBOM_B64}\" }"Dependency-Track détecte automatiquement si c’est du CycloneDX ou SPDX.
Utile pour détecter les ajouts/suppressions entre deux versions :
# Comparer v1.0 vs v1.1syft devops-status-api:v1.0 -o json > sbom-v1.jsonsyft devops-status-api:v1.1 -o json > sbom-v1.1.jsonjd -set sbom-v1.json sbom-v1.1.jsonCas d’usage : auditer changements de dépendances avant production (nouveau package suspect ?).
Guides connexes :
Documentation :