Como usar o comando docker scout sbom para gerar e exibir SBOMs

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar o comando docker scout sbom para gerar e exibir Software Bill of Materials (SBOMs) para imagens Docker. Você começará gerando e exibindo um SBOM básico em formato JSON, que fornece uma lista detalhada dos componentes de software dentro de uma imagem.

Após a geração do SBOM básico, você explorará como exibir uma lista de pacotes mais legível para humanos, encontrada no SBOM. Você também aprenderá como filtrar esta lista de pacotes por tipo, permitindo que você se concentre em categorias específicas de componentes. Finalmente, você praticará a escrita do SBOM gerado em um arquivo para uso ou análise posterior. Este laboratório irá equipá-lo com as habilidades fundamentais para alavancar docker scout sbom para entender a composição de suas imagens Docker.

Gerar e exibir um SBOM básico em formato JSON

Nesta etapa, aprenderemos como gerar um Software Bill of Materials (SBOM) básico para uma imagem Docker e exibi-lo em formato JSON. Um SBOM é uma lista formal de ingredientes que compõem um componente de software. É como uma lista de embalagem para seu software, detalhando todos os componentes de terceiros, bibliotecas e dependências usadas. Gerar um SBOM é crucial para entender a postura de segurança e a conformidade de licenciamento do seu software.

Usaremos a ferramenta syft para gerar o SBOM. syft é uma ferramenta de linha de comando e biblioteca para gerar um SBOM a partir de imagens de contêiner e sistemas de arquivos.

Primeiro, vamos puxar uma imagem Docker simples que usaremos para esta demonstração. Usaremos a imagem alpine:latest, que é uma distribuição Linux leve.

docker pull alpine:latest

Você deve ver uma saída indicando que a imagem está sendo puxada e baixada.

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

Agora que temos a imagem, podemos gerar o SBOM. Usaremos o comando syft com o nome da imagem e especificaremos o formato de saída como JSON.

syft alpine:latest -o json

Este comando analisará a imagem alpine:latest e emitirá o SBOM em formato JSON diretamente no seu terminal. A saída será um grande objeto JSON contendo informações sobre os pacotes encontrados na imagem, incluindo seus nomes, versões, licenças e tipos.

Você pode rolar pela saída para ver os diferentes componentes listados no SBOM. Esta saída JSON básica fornece uma visão abrangente dos componentes de software dentro da imagem.

Exibir uma lista de pacotes no SBOM

Na etapa anterior, geramos um SBOM detalhado em formato JSON. Embora abrangente, a saída JSON pode ser difícil de ler diretamente no terminal. Nesta etapa, aprenderemos como exibir uma lista mais legível para humanos dos pacotes encontrados na imagem Docker.

syft fornece um formato de tabela simples que é fácil de escanear e entender. Podemos usar a opção -o table para gerar o SBOM neste formato.

syft alpine:latest -o table

Este comando analisará a imagem alpine:latest novamente, mas desta vez ele emitirá o SBOM como uma tabela. A tabela normalmente incluirá colunas como NAME (Nome), VERSION (Versão), TYPE (Tipo) e LOCATIONS (Localizações).

Você deve ver uma saída semelhante 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 tabela torna muito mais fácil ver rapidamente os nomes e versões dos pacotes instalados na imagem. Isso é particularmente útil para obter uma visão geral rápida do conteúdo da imagem.

Filtrar a lista de pacotes por tipo

Na etapa anterior, exibimos o SBOM como uma tabela, que é mais fácil de ler do que a saída JSON. No entanto, às vezes você pode estar interessado apenas em tipos específicos de pacotes. Por exemplo, você pode querer ver apenas os pacotes do sistema operacional ou as dependências da aplicação.

syft permite que você filtre a lista de pacotes por tipo usando a opção --package-type. Você pode especificar um ou mais tipos de pacotes para incluir na saída. Tipos de pacotes comuns incluem apk, deb, rpm, gem, npm, pip, go-module, etc. Para a imagem alpine:latest, o tipo de pacote principal é apk.

Vamos filtrar o SBOM para mostrar apenas pacotes do tipo apk.

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

Este comando gerará o SBOM em formato de tabela, mas incluirá apenas as entradas onde o tipo de pacote é apk.

Você deve ver uma saída semelhante à tabela da etapa anterior, mas potencialmente com menos entradas se houver outros tipos de pacotes presentes na imagem (embora para uma imagem mínima como alpine, apk seja o 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

Essa capacidade de filtragem é muito útil quando você precisa se concentrar em camadas ou tipos específicos de dependências dentro da sua imagem de contêiner.

Escrever o SBOM para um arquivo

Nas etapas anteriores, exibimos o SBOM em diferentes formatos diretamente no terminal. Embora útil para inspeção rápida, você frequentemente precisará salvar o SBOM em um arquivo para processamento, análise ou compartilhamento posterior.

syft permite que você escreva a saída do SBOM em um arquivo usando a opção -o seguida pelo formato desejado e um redirecionamento para um arquivo. Podemos gerar o SBOM em vários formatos, incluindo JSON, SPDX e CycloneDX. JSON é um formato comum e versátil.

Vamos gerar o SBOM em formato JSON e salvá-lo em um arquivo chamado alpine_sbom.json no seu diretório atual (~/project).

syft alpine:latest -o json > alpine_sbom.json

Este comando gerará o SBOM para a imagem alpine:latest em formato JSON e redirecionará a saída para o arquivo alpine_sbom.json. Você não verá a saída JSON no seu terminal desta vez.

Para verificar se o arquivo foi criado e contém os dados do SBOM, você pode usar o comando ls para listar os arquivos no seu diretório atual e o comando cat para exibir o conteúdo do arquivo.

ls

Você deve ver alpine_sbom.json listado entre os arquivos.

alpine_sbom.json

Agora, vamos visualizar o conteúdo do arquivo:

cat alpine_sbom.json

Você deve ver a saída do SBOM formatada em JSON que vimos na primeira etapa, mas agora ela está armazenada no arquivo alpine_sbom.json.

Salvar o SBOM em um arquivo é uma prática padrão para integrar a geração do SBOM em pipelines CI/CD ou para compartilhar SBOMs com outras pessoas.

Resumo

Neste laboratório, aprendemos como gerar e exibir uma Software Bill of Materials (SBOM) básica para uma imagem Docker usando a ferramenta syft. Começamos puxando a imagem alpine:latest e, em seguida, usamos o comando syft alpine:latest -o json para gerar e exibir o SBOM em formato JSON, fornecendo uma lista detalhada dos componentes de software dentro da imagem.

Em seguida, exploramos como exibir uma lista de pacotes do SBOM mais legível para humanos, filtrar essa lista por tipo de pacote e, finalmente, escrever o SBOM gerado em um arquivo para uso ou análise posterior. Essas etapas demonstram as capacidades fundamentais do syft para entender a composição de imagens Docker.