Cómo usar el comando docker scout sbom para generar y mostrar SBOMs

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá cómo utilizar el comando docker scout sbom para generar y mostrar el Inventario de Materiales de Software (Software Bill of Materials, SBOM) de imágenes Docker. Comenzará generando y mostrando un SBOM básico en formato JSON, que proporciona una lista detallada de los componentes de software dentro de una imagen.

Después de generar el SBOM básico, explorará cómo mostrar una lista de paquetes más legible para humanos que se encuentran en el SBOM. También aprenderá cómo filtrar esta lista de paquetes por tipo, lo que le permitirá centrarse en categorías específicas de componentes. Finalmente, practicará escribir el SBOM generado en un archivo para su uso o análisis posterior. Este laboratorio le proporcionará las habilidades fundamentales para aprovechar docker scout sbom y comprender la composición de sus imágenes 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{{"Cómo usar el comando docker scout sbom para generar y mostrar SBOMs"}} docker/inspect -.-> lab-555215{{"Cómo usar el comando docker scout sbom para generar y mostrar SBOMs"}} docker/pull -.-> lab-555215{{"Cómo usar el comando docker scout sbom para generar y mostrar SBOMs"}} docker/images -.-> lab-555215{{"Cómo usar el comando docker scout sbom para generar y mostrar SBOMs"}} docker/load -.-> lab-555215{{"Cómo usar el comando docker scout sbom para generar y mostrar SBOMs"}} docker/cp -.-> lab-555215{{"Cómo usar el comando docker scout sbom para generar y mostrar SBOMs"}} end

Generar y mostrar un SBOM básico en formato JSON

En este paso, aprenderemos cómo generar un Inventario de Materiales de Software (Software Bill of Materials, SBOM) básico para una imagen Docker y mostrarlo en formato JSON. Un SBOM es una lista formal de los componentes que conforman un componente de software. Es como una lista de embalaje para tu software, que detalla todos los componentes de terceros, bibliotecas y dependencias utilizadas. Generar un SBOM es crucial para entender la postura de seguridad y el cumplimiento de licencias de tu software.

Utilizaremos la herramienta syft para generar el SBOM. syft es una herramienta de línea de comandos y una biblioteca para generar un SBOM a partir de imágenes de contenedores y sistemas de archivos.

Primero, descarguemos una simple imagen Docker que usaremos para esta demostración. Utilizaremos la imagen alpine:latest, que es una distribución Linux ligera.

docker pull alpine:latest

Deberías ver una salida que indique que la imagen se está descargando.

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

Ahora que tenemos la imagen, podemos generar el SBOM. Utilizaremos el comando syft con el nombre de la imagen y especificaremos el formato de salida como JSON.

syft alpine:latest -o json

Este comando analizará la imagen alpine:latest y mostrará el SBOM en formato JSON directamente en tu terminal. La salida será un gran objeto JSON que contiene información sobre los paquetes encontrados en la imagen, incluyendo sus nombres, versiones, licencias y tipos.

Puedes desplazarte por la salida para ver los diferentes componentes enumerados en el SBOM. Esta salida JSON básica proporciona una visión integral de los componentes de software dentro de la imagen.

Mostrar una lista de paquetes en el SBOM

En el paso anterior, generamos un SBOM detallado en formato JSON. Aunque es exhaustivo, la salida JSON puede ser difícil de leer directamente en la terminal. En este paso, aprenderemos cómo mostrar una lista de los paquetes encontrados en la imagen Docker que sea más legible para humanos.

syft ofrece un formato de tabla simple que es fácil de revisar y entender. Podemos utilizar la opción -o table para generar el SBOM en este formato.

syft alpine:latest -o table

Este comando analizará nuevamente la imagen alpine:latest, pero esta vez mostrará el SBOM en forma de tabla. La tabla por lo general incluirá columnas como NAME, VERSION, TYPE y LOCATIONS.

Deberías ver una salida similar a esta:

 ✔ 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

Este formato de tabla facilita mucho ver rápidamente los nombres y versiones de los paquetes instalados en la imagen. Esto es especialmente útil para obtener una visión general rápida del contenido de la imagen.

Filtrar la lista de paquetes por tipo

En el paso anterior, mostramos el SBOM en forma de tabla, lo cual es más fácil de leer que la salida JSON. Sin embargo, a veces puede que solo estés interesado en tipos específicos de paquetes. Por ejemplo, es posible que solo quieras ver los paquetes del sistema operativo o las dependencias de la aplicación.

syft te permite filtrar la lista de paquetes por tipo utilizando la opción --package-type. Puedes especificar uno o más tipos de paquetes para incluirlos en la salida. Los tipos de paquetes comunes incluyen apk, deb, rpm, gem, npm, pip, go-module, etc. Para la imagen alpine:latest, el tipo de paquete principal es apk.

Filtrémos el SBOM para mostrar solo los paquetes de tipo apk.

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

Este comando generará el SBOM en formato de tabla, pero solo incluirá las entradas donde el tipo de paquete sea apk.

Deberías ver una salida similar a la tabla del paso anterior, pero posiblemente con menos entradas si había otros tipos de paquetes presentes en la imagen (aunque para una imagen mínima como alpine, apk es el tipo 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

Esta capacidad de filtrado es muy útil cuando necesitas centrarte en capas específicas o tipos de dependencias dentro de tu imagen de contenedor.

Escribir el SBOM en un archivo

En los pasos anteriores, mostramos el SBOM en diferentes formatos directamente en la terminal. Aunque es útil para una inspección rápida, a menudo necesitarás guardar el SBOM en un archivo para su posterior procesamiento, análisis o compartición.

syft te permite escribir la salida del SBOM en un archivo utilizando la opción -o seguida del formato deseado y una redirección a un archivo. Podemos generar el SBOM en varios formatos, incluyendo JSON, SPDX y CycloneDX. JSON es un formato común y versátil.

Generemos el SBOM en formato JSON y guardémoslo en un archivo llamado alpine_sbom.json en tu directorio actual (~/project).

syft alpine:latest -o json > alpine_sbom.json

Este comando generará el SBOM para la imagen alpine:latest en formato JSON y redirigirá la salida al archivo alpine_sbom.json. Esta vez no verás la salida JSON en tu terminal.

Para verificar que el archivo se ha creado y contiene los datos del SBOM, puedes utilizar el comando ls para listar los archivos en tu directorio actual y el comando cat para mostrar el contenido del archivo.

ls

Deberías ver alpine_sbom.json en la lista de archivos.

alpine_sbom.json

Ahora, veamos el contenido del archivo:

cat alpine_sbom.json

Deberías ver la salida del SBOM en formato JSON que vimos en el primer paso, pero ahora está almacenada en el archivo alpine_sbom.json.

Guardar el SBOM en un archivo es una práctica estándar para integrar la generación de SBOM en flujos de trabajo CI/CD o para compartir SBOM con otros.

Resumen

En este laboratorio, aprendimos cómo generar y mostrar un Inventario Básico de Software (Software Bill of Materials, SBOM) para una imagen de Docker utilizando la herramienta syft. Comenzamos descargando la imagen alpine:latest y luego utilizamos el comando syft alpine:latest -o json para generar y mostrar el SBOM en formato JSON, que proporciona una lista detallada de los componentes de software dentro de la imagen.

Luego exploramos cómo mostrar una lista de paquetes del SBOM más legible para humanos, filtrar esta lista por tipo de paquete y, finalmente, escribir el SBOM generado en un archivo para su uso o análisis posterior. Estos pasos demuestran las capacidades fundamentales de syft para comprender la composición de las imágenes de Docker.