Поиск по сайту:

Как индексировать зависимости вашего образа Docker с помощью Syft


Syft — это утилита CLI, которая создает спецификацию программного обеспечения (SBOM) для образов контейнеров. SBOM — это каталог зависимостей, используемых вашим образом. Это дает вам представление о «материалах», которые формируют файловую систему вашего изображения.

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

Syft разработан компанией Anchore, которая также предлагает полный механизм сканирования контейнеров. Интерфейс командной строки Syft может извлекать списки пакетов из образов с использованием популярных операционных систем и языков программирования. Поддерживаются образы Docker и OCI.

Установка Сифта

Доступен скрипт установки для загрузки последнего бинарного файла Syft и добавления его к вашему пути:

curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin

Пользователи Mac также могут получить Syft из Homebrew, добавив репозиторий anchore/syft и установив пакет syft.

После установки Syft в вашей системе запустите syft в своем терминале, чтобы отобразить доступные команды. Вы можете сгенерировать дополнения для своей оболочки, запустив syft завершение.

Используйте syft version, чтобы найти версию вашей установки. Периодически проверяйте страницу тегов GitHub, чтобы найти новые выпуски, а затем повторно используйте сценарий установки для загрузки каждого обновления.

Сканирование изображения

Функциональность Syft в настоящее время предоставляется одной подкомандой, syft packages. Передайте ему тег изображения, чтобы сгенерировать SBOM для:

syft packages alpine:latest

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

Список пакетов для этого образа короткий. Поскольку это базовый образ Alpine, установленные пакеты намеренно упрощены, чтобы обеспечить минимально возможную поверхность. Большие изображения могут содержать сотни или тысячи пакетов в нескольких разных форматах. Может быть полезно комбинировать Syft с существующими инструментами терминала Unix, такими как grep и awk, для извлечения нужных данных.

syft packages example-image:latest | grep example-package-to-find

Поддерживаемые типы пакетов

Syft поддерживает множество популярных форматов пакетов для ведущих операционных систем и языков программирования. Список включает:

    Пакеты ОС
  • APK (Alpine), DEB (Debian) и RPM (Fedora).
  • Идентификация дистрибутивов Linux среди Alpine, CentOS, Debian и RHEL.
  • Модули Go
  • Java в вариантах JAR, EAR и WAR
  • Пакеты NPM и Yarn
  • Колеса и яйца Python
  • Наборы Ruby

Хотя охватываются не все языки, вы все равно получите преимущества сканирования на уровне ОС независимо от выбранного стека вашего приложения.

Изменение формата вывода

Выходной формат по умолчанию называется table. Он отображает таблицу результатов на основе столбцов в вашем терминале, создавая новую строку для каждого обнаруженного пакета. Альтернативным удобочитаемым форматом является text, который представляет собой список пакетов с полями Version и Type, вложенными в каждый раздел.

Syft также поддерживает несколько программных форматов:

  • json — сохранение данных пакета в структуру JSON.
  • cyclonedx — отчет CycloneDX в формате XML.
  • spdx и spdx-json — отчеты, совместимые с SPDX, в формате значения тега или JSON.

Использование одного из этих отчетов позволяет архивировать результаты в файл для дальнейшего использования:

syft packages alpine:latest -o json > alpine-packages.json

Стандартизированные форматы CycloneDX и SPDX могут помочь интегрировать сканирование Syft в конвейеры CI/CD. Данные доступны другим инструментам экосистемы, которые работают со списками пакетов и результатами SBOM.

Syft также интегрируется с Grype, автономным средством поиска уязвимостей контейнерной файловой системы от Anchore. Данные из Syft можно передавать прямо в Grype, если вы используете выходной формат JSON.

syft packages example-image:latest -o json > sbom.json
grype sbom:./sbom.json

Grype сравнит список пакетов со своим индексом известных уязвимостей. Он выделит пакеты, содержащие проблемы, что даст вам немедленную отправную точку для улучшения вашей безопасности.

Использование других источников изображений

Syft может использовать образы из других источников, помимо общедоступных реестров Docker. Вы можете ссылаться на любой образ, совместимый с OCI, либо через тег реестра, либо в виде сохраненного изображения tar. Пути к архивам изображений можно передать прямо в Syft:

docker image save my-image:latest > my-image.tar
syft packages ./my-image.tar

Syft также работает с частными реестрами Docker. Он использует ваши существующие учетные данные в файле ~/.docker/config.json:

{
    "auths": {
        "registry.example.com": {
            "username": "",
            "password": ""
        }
    }
}

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

syft packages dir:/usr/bin

Вы должны явно добавить схему dir:, если вы ссылаетесь на путь за пределами вашего рабочего каталога. В противном случае Syft попытается интерпретировать его как ссылку на тег изображения.

Заключение

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

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

Добавление сканирования Syft в ваш рабочий процесс позволяет вам получать информацию об используемых вами пакетах. Получив эту информацию, вы можете приступить к оценке каждого пакета, чтобы определить, действительно ли он необходим. Если вы обнаружите много пакетов, которые не используются вашей рабочей нагрузкой, рассмотрите возможность перехода на минимальный базовый образ и размещение поверх только необходимого программного обеспечения.




Все права защищены. © Linux-Console.net • 2019-2024