Comment utiliser la commande docker scout sbom pour générer et afficher des SBOM

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous apprendrez à utiliser la commande docker scout sbom pour générer et afficher les listes de matériel logiciel (Software Bill of Materials - SBOM) pour les images Docker. Vous commencerez par générer et afficher un SBOM de base au format JSON, qui fournit une liste détaillée des composants logiciels présents dans une image.

Après avoir généré le SBOM de base, vous explorerez comment afficher une liste de packages plus lisible pour les humains, extraite du SBOM. Vous apprendrez également à filtrer cette liste de packages par type, vous permettant de vous concentrer sur des catégories spécifiques de composants. Enfin, vous pratiquerez l'écriture du SBOM généré dans un fichier pour une utilisation ou une analyse ultérieure. Ce laboratoire vous dotera des compétences fondamentales pour utiliser docker scout sbom afin de comprendre la composition de vos images Docker.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/ImageOperationsGroup -.-> docker/load("Load Image") docker/VolumeOperationsGroup -.-> docker/cp("Copy Data Between Host and Container") subgraph Lab Skills docker/ls -.-> lab-555215{{"Comment utiliser la commande docker scout sbom pour générer et afficher des SBOM"}} docker/inspect -.-> lab-555215{{"Comment utiliser la commande docker scout sbom pour générer et afficher des SBOM"}} docker/pull -.-> lab-555215{{"Comment utiliser la commande docker scout sbom pour générer et afficher des SBOM"}} docker/images -.-> lab-555215{{"Comment utiliser la commande docker scout sbom pour générer et afficher des SBOM"}} docker/load -.-> lab-555215{{"Comment utiliser la commande docker scout sbom pour générer et afficher des SBOM"}} docker/cp -.-> lab-555215{{"Comment utiliser la commande docker scout sbom pour générer et afficher des SBOM"}} end

Générer et afficher un SBOM de base au format JSON

Dans cette étape, nous apprendrons à générer une liste de matériel logiciel (Software Bill of Materials - SBOM) de base pour une image Docker et à l'afficher au format JSON. Un SBOM est une liste formelle des éléments composant un composant logiciel. C'est comme une liste d'emballage pour votre logiciel, détaillant tous les composants tiers, les bibliothèques et les dépendances utilisées. La génération d'un SBOM est essentielle pour comprendre la posture de sécurité et la conformité en matière de licences de votre logiciel.

Nous utiliserons l'outil syft pour générer le SBOM. syft est un outil en ligne de commande et une bibliothèque permettant de générer un SBOM à partir d'images conteneur et de systèmes de fichiers.

Tout d'abord, téléchargeons une simple image Docker que nous utiliserons pour cette démonstration. Nous utiliserons l'image alpine:latest, qui est une distribution Linux légère.

docker pull alpine:latest

Vous devriez voir un affichage indiquant que l'image est en cours de téléchargement.

Using default tag: latest
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

Maintenant que nous avons l'image, nous pouvons générer le SBOM. Nous utiliserons la commande syft avec le nom de l'image et spécifierons le format de sortie en JSON.

syft alpine:latest -o json

Cette commande analysera l'image alpine:latest et affichera le SBOM au format JSON directement dans votre terminal. La sortie sera un grand objet JSON contenant des informations sur les packages trouvés dans l'image, y compris leurs noms, versions, licences et types.

Vous pouvez faire défiler la sortie pour voir les différents composants répertoriés dans le SBOM. Cette sortie JSON de base fournit une vue complète des composants logiciels présents dans l'image.

Afficher une liste de packages dans le SBOM

Dans l'étape précédente, nous avons généré un SBOM détaillé au format JSON. Bien que complet, la sortie JSON peut être difficile à lire directement dans le terminal. Dans cette étape, nous apprendrons à afficher une liste plus lisible pour les humains des packages trouvés dans l'image Docker.

syft propose un format de tableau simple qui est facile à parcourir et à comprendre. Nous pouvons utiliser l'option -o table pour générer le SBOM dans ce format.

syft alpine:latest -o table

Cette commande analysera à nouveau l'image alpine:latest, mais cette fois-ci, elle affichera le SBOM sous forme de tableau. Le tableau inclura généralement des colonnes telles que NAME, VERSION, TYPE et LOCATIONS.

Vous devriez voir une sortie similaire à celle-ci :

 ✔ Loaded image
 ✔ Analyzed image
 ├── apk
 │   ├── busybox
 │   ├── alpine-baselayout
 │   ├── alpine-keys
 │   ├── apk-tools
 │   ├── zlib
 │   ├── libcrypto1.1
 │   ├── libssl1.1
 │   ├── musl
 │   ├── musl-utils
 │   ├── scanelf
 │   ├── ssl_certs
 │   └── zlib
 └── filesystem
     └── etc/os-release

Ce format de tableau facilite grandement la visualisation rapide des noms et des versions des packages installés dans l'image. Cela est particulièrement utile pour obtenir un aperçu rapide du contenu de l'image.

Filtrer la liste de packages par type

Dans l'étape précédente, nous avons affiché le SBOM sous forme de tableau, ce qui est plus facile à lire que la sortie JSON. Cependant, parfois, vous pourriez être intéressé seulement par des types spécifiques de packages. Par exemple, vous pourriez seulement vouloir voir les packages du système d'exploitation ou les dépendances d'application.

syft vous permet de filtrer la liste de packages par type en utilisant l'option --package-type. Vous pouvez spécifier un ou plusieurs types de packages à inclure dans la sortie. Les types de packages courants incluent apk, deb, rpm, gem, npm, pip, go-module, etc. Pour l'image alpine:latest, le type de package principal est apk.

Filtrons le SBOM pour n'afficher que les packages de type apk.

syft alpine:latest -o table --package-type apk

Cette commande générera le SBOM au format tableau, mais elle n'inclura que les entrées où le type de package est apk.

Vous devriez voir une sortie similaire au tableau de l'étape précédente, mais potentiellement avec moins d'entrées s'il y avait d'autres types de packages présents dans l'image (bien que pour une image minimale comme alpine, apk est le type principal).

 ✔ Loaded image
 ✔ Analyzed image
 ├── apk
 │   ├── busybox
 │   ├── alpine-baselayout
 │   ├── alpine-keys
 │   ├── apk-tools
 │   ├── zlib
 │   ├── libcrypto1.1
 │   ├── libssl1.1
 │   ├── musl
 │   ├── musl-utils
 │   ├── scanelf
 │   ├── ssl_certs
 │   └── zlib

Cette capacité de filtrage est très utile lorsque vous avez besoin de vous concentrer sur des couches spécifiques ou des types de dépendances au sein de votre image conteneur.

Écrire le SBOM dans un fichier

Dans les étapes précédentes, nous avons affiché le SBOM dans différents formats directement dans le terminal. Bien que pratique pour une inspection rapide, vous aurez souvent besoin de sauvegarder le SBOM dans un fichier pour un traitement, une analyse supplémentaires ou pour le partager.

syft vous permet d'écrire la sortie du SBOM dans un fichier en utilisant l'option -o suivie du format souhaité et d'une redirection vers un fichier. Nous pouvons exporter le SBOM dans différents formats, notamment JSON, SPDX et CycloneDX. JSON est un format commun et polyvalent.

Générons le SBOM au format JSON et sauvegardons-le dans un fichier nommé alpine_sbom.json dans votre répertoire actuel (~/project).

syft alpine:latest -o json > alpine_sbom.json

Cette commande générera le SBOM pour l'image alpine:latest au format JSON et redirigera la sortie vers le fichier alpine_sbom.json. Vous ne verrez pas la sortie JSON dans votre terminal cette fois-ci.

Pour vérifier que le fichier a été créé et qu'il contient les données du SBOM, vous pouvez utiliser la commande ls pour lister les fichiers dans votre répertoire actuel et la commande cat pour afficher le contenu du fichier.

ls

Vous devriez voir alpine_sbom.json répertorié parmi les fichiers.

alpine_sbom.json

Maintenant, affichons le contenu du fichier :

cat alpine_sbom.json

Vous devriez voir la sortie du SBOM formatée en JSON que nous avons vue dans la première étape, mais maintenant elle est stockée dans le fichier alpine_sbom.json.

Sauvegarder le SBOM dans un fichier est une pratique standard pour intégrer la génération de SBOM dans les pipelines CI/CD ou pour partager des SBOM avec d'autres personnes.

Résumé

Dans ce laboratoire, nous avons appris à générer et afficher un inventaire logiciel de base (Software Bill of Materials - SBOM) pour une image Docker en utilisant l'outil syft. Nous avons commencé par télécharger l'image alpine:latest, puis nous avons utilisé la commande syft alpine:latest -o json pour générer et afficher le SBOM au format JSON, fournissant ainsi une liste détaillée des composants logiciels présents dans l'image.

Ensuite, nous avons exploré comment afficher une liste de packages plus lisible pour l'homme à partir du SBOM, filtrer cette liste par type de package et, enfin, écrire le SBOM généré dans un fichier pour une utilisation ou une analyse ultérieure. Ces étapes démontrent les capacités fondamentales de syft pour comprendre la composition des images Docker.