Как использовать команду docker scout sbom для генерации и отображения SBOM

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы узнаете, как использовать команду docker scout sbom для генерации и отображения Списка материалов программного обеспечения (Software Bill of Materials, SBOM) для Docker-образов. Вы начнете с генерации и отображения базового SBOM в формате JSON, который предоставляет подробный список компонентов программного обеспечения в образе.

После генерации базового SBOM вы узнаете, как отобразить более удобочитаемый список пакетов, найденных в SBOM. Вы также научитесь фильтровать этот список пакетов по типу, что позволит вам сосредоточиться на определенных категориях компонентов. Наконец, вы научитесь записывать сгенерированный SBOM в файл для последующего использования или анализа. В результате этого практического занятия вы получите базовые навыки использования команды docker scout sbom для понимания состава ваших 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{{"Как использовать команду docker scout sbom для генерации и отображения SBOM"}} docker/inspect -.-> lab-555215{{"Как использовать команду docker scout sbom для генерации и отображения SBOM"}} docker/pull -.-> lab-555215{{"Как использовать команду docker scout sbom для генерации и отображения SBOM"}} docker/images -.-> lab-555215{{"Как использовать команду docker scout sbom для генерации и отображения SBOM"}} docker/load -.-> lab-555215{{"Как использовать команду docker scout sbom для генерации и отображения SBOM"}} docker/cp -.-> lab-555215{{"Как использовать команду docker scout sbom для генерации и отображения SBOM"}} end

Генерация и отображение базового SBOM в формате JSON

На этом этапе мы узнаем, как сгенерировать базовый Список материалов программного обеспечения (Software Bill of Materials, SBOM) для Docker-образа и отобразить его в формате JSON. SBOM представляет собой формальный список компонентов, составляющих программный продукт. Это похоже на инвентарный лист для вашего программного обеспечения, в котором детально перечислены все сторонние компоненты, библиотеки и зависимости. Генерация SBOM является важной частью для понимания безопасности и соответствия лицензиям вашего программного обеспечения.

Мы будем использовать инструмент syft для генерации SBOM. syft - это инструмент командной строки и библиотека для создания SBOM из контейнерных образов и файловых систем.

Сначала давайте загрузим простой Docker-образ, который мы будем использовать для этого примера. Мы будем использовать образ alpine:latest, который представляет собой легковесное дистрибутив Linux.

docker pull alpine:latest

Вы должны увидеть вывод, указывающий на то, что образ загружается.

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

Теперь, когда у нас есть образ, мы можем сгенерировать SBOM. Мы будем использовать команду syft с именем образа и укажем формат вывода в виде JSON.

syft alpine:latest -o json

Эта команда проанализирует образ alpine:latest и выведет SBOM в формате JSON прямо в вашем терминале. Вывод будет представлять собой большой JSON-объект, содержащий информацию о пакетах, найденных в образе, включая их имена, версии, лицензии и типы.

Вы можете прокрутить вывод, чтобы увидеть различные компоненты, перечисленные в SBOM. Этот базовый JSON-вывод дает полное представление о компонентах программного обеспечения в образе.

Отображение списка пакетов в SBOM

На предыдущем этапе мы сгенерировали подробный SBOM в формате JSON. Хотя этот вывод содержит полную информацию, он может быть сложно читаемым непосредственно в терминале. На этом этапе мы узнаем, как отобразить более удобочитаемый список пакетов, найденных в Docker-образе.

syft предоставляет простой табличный формат, который легко просматривать и понимать. Мы можем использовать опцию -o table для генерации SBOM в этом формате.

syft alpine:latest -o table

Эта команда снова проанализирует образ alpine:latest, но на этот раз выведет SBOM в виде таблицы. Таблица обычно включает столбцы, такие как NAME, VERSION, TYPE и LOCATIONS.

Вы должны увидеть вывод, похожий на следующий:

 ✔ 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

Этот табличный формат позволяет намного легче и быстрее увидеть имена и версии пакетов, установленных в образе. Это особенно полезно для быстрого ознакомления с содержимым образа.

Фильтрация списка пакетов по типу

На предыдущем этапе мы отобразили SBOM в виде таблицы, которая легче читается, чем вывод в формате JSON. Однако иногда вам может понадобиться просмотреть только определенные типы пакетов. Например, вы можете захотеть увидеть только пакеты операционной системы или зависимости приложения.

syft позволяет фильтровать список пакетов по типу с помощью опции --package-type. Вы можете указать один или несколько типов пакетов, которые должны быть включены в вывод. Среди распространенных типов пакетов есть apk, deb, rpm, gem, npm, pip, go-module и др. Для образа alpine:latest основным типом пакетов является apk.

Давайте отфильтруем SBOM так, чтобы он показывал только пакеты типа apk.

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

Эта команда сгенерирует SBOM в табличном формате, но включит только записи, где тип пакета равен apk.

Вы должны увидеть вывод, похожий на таблицу из предыдущего шага, но, возможно, с меньшим количеством записей, если в образе были другие типы пакетов (хотя для минимального образа, такого как alpine, apk является основным типом).

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

Эта возможность фильтрации очень полезна, когда вам нужно сосредоточиться на определенных слоях или типах зависимостей в вашем контейнерном образе.

Запись SBOM в файл

На предыдущих этапах мы отображали SBOM в различных форматах непосредственно в терминале. Хотя это полезно для быстрого просмотра, часто вам нужно сохранить SBOM в файл для дальнейшей обработки, анализа или обмена.

syft позволяет записать вывод SBOM в файл, используя опцию -o, за которой следует желаемый формат и перенаправление в файл. Мы можем выводить SBOM в различных форматах, включая JSON, SPDX и CycloneDX. JSON - это распространенный и универсальный формат.

Давайте сгенерируем SBOM в формате JSON и сохраним его в файл с именем alpine_sbom.json в текущем каталоге (~/project).

syft alpine:latest -o json > alpine_sbom.json

Эта команда сгенерирует SBOM для образа alpine:latest в формате JSON и перенаправит вывод в файл alpine_sbom.json. На этот раз вы не увидите вывод JSON в терминале.

Чтобы убедиться, что файл был создан и содержит данные SBOM, вы можете использовать команду ls для вывода списка файлов в текущем каталоге и команду cat для отображения содержимого файла.

ls

Вы должны увидеть alpine_sbom.json в списке файлов.

alpine_sbom.json

Теперь давайте посмотрим на содержимое файла:

cat alpine_sbom.json

Вы должны увидеть вывод SBOM в формате JSON, который мы видели на первом этапе, но теперь он сохранен в файле alpine_sbom.json.

Сохранение SBOM в файл - это стандартная практика для интеграции генерации SBOM в CI/CD - конвейеры или для обмена SBOM с другими людьми.

Резюме

В этом практическом занятии мы научились генерировать и отображать базовый Список программного обеспечения (Software Bill of Materials, SBOM) для Docker - образа с использованием инструмента syft. Мы начали с загрузки образа alpine:latest, а затем использовали команду syft alpine:latest -o json для генерации и отображения SBOM в формате JSON, которая предоставила подробный список программных компонентов в образе.

Затем мы изучили, как отобразить более удобочитаемый список пакетов из SBOM, отфильтровать этот список по типу пакета и, наконец, записать сгенерированный SBOM в файл для последующего использования или анализа. Эти шаги демонстрируют основные возможности syft для понимания состава Docker - образов.