Присоединение подписанного SBOM к образу контейнера
Законопроект по программному обеспечению материалов (SBOM) — это манифест сборки, который перечисляет компоненты, используемые для создания части программного обеспечения. SBOM можно использовать для отслеживания происхождения части программного обеспечения, включая образы контейнеров на протяжении всего жизненного цикла. В этой статье показано, как создать SBOM для образа контейнера, подписать его и присоединить его к изображению с помощью инструментов CLI. Другие подходы возможны, включая использование конвейера CI/CD для автоматизации процесса.
Необходимые компоненты
Прежде чем быть, убедитесь, что у вас есть следующее:
- Подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
- Последняя версия Azure CLI установлена и настроена для вашей подписки.
- Существующий Реестр контейнеров Azure (ACR) в подписке.
- Установлен интерфейс командной строки нотации.
- Установлен ИНТЕРФЕЙС командной строки ORAS.
- Установлен sbom-tool .
Вход в реестр
Войдите в ACR и получите маркер доступа для реестра. Например, следующие команды используют Azure CLI для входа в реестр и задают маркер доступа для этого реестра переменной PASSWORD
среды.
# Update the ACR_NAME variable with the name of your registry
ACR_NAME=<acr-name>
PASSWORD=$(az acr login --name $ACR_NAME --expose-token --output tsv --query accessToken)
Примечание.
ACR и ORAS поддерживают несколько вариантов проверки подлинности для пользователей и системы автоматизации. В этой статье используется отдельное удостоверение с помощью маркера Azure. Дополнительные параметры проверки подлинности см. в разделе "Проверка подлинности с помощью реестра контейнеров Azure".
Создание и отправка образа контейнера
Используется az acr build
для сборки и отправки образа контейнера в реестр.
REPO=net-monitor
TAG=v1
REGISTRY=$ACR_NAME.azurecr.io
IMAGE=$REGISTRY/${REPO}:$TAG
IMAGE_SOURCE=https://github.com/wabbit-networks/net-monitor.git#main
az acr build -r $ACR_NAME -t $IMAGE $IMAGE_SOURCE
Вход с помощью интерфейса командной строки нотации
Используется notation login
для входа в реестр.
Внимание
При использовании маркера доступа для ACR необходимо использовать 00000000-0000-0000-0000-000000000000
в качестве имени пользователя.
export USER_NAME="00000000-0000-0000-0000-000000000000"
notation login -u $USER_NAME -p $PASSWORD $REGISTRY
Подписыв изображение
Используется notation sign
для подписывания изображения.
Внимание
Для подписывания образа необходимо иметь сертификат подписи и пару ключей. Например, создание, подпись и проверка образов контейнеров с помощью Нотари и Azure Key Vault показывает, как использовать Azure Key Vault для создания сертификата подписи и пары ключей.
notation sign $IMAGE
Используйте notation ls
для перечисления подписей на изображении.
notation ls $IMAGE
В следующем примере выходных данных показана подпись на изображении.
<acr-name>.azurecr.io/net-monitor@sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
└── application/vnd.cncf.notary.signature
└── sha256:111222333444555666777888999000aaabbbcccdddeeefff1112223334445556
Создание SBOM
Используется sbom-tool
для создания SBOM для образа. Например, следующие команды создают SBOM для образа и хранят его в каталоге ./sbom
.
SBOM_DIR=./sbom
PACKAGE_SUPPLIER=MyCompany
PACKAGE_NAME=TestProject
PACKAGE_VERSION=1.0.0
mkdir $SBOM_DIR
sbom-tool generate -m $SBOM_DIR -di $IMAGE -ps $PACKAGE_SUPPLIER -pn $PACKAGE_NAME -pv $PACKAGE_VERSION
Присоединение SBOM к изображению
Используйте oras attach
для подключения SBOM к изображению. Например, следующая команда присоединяет manifest.spdx.json
файл к изображению.
SBOM_FILE=$SBOM_DIR/_manifest/spdx_2.2/manifest.spdx.json
oras attach $IMAGE $SBOM_FILE --artifact-type example/sbom
Подписывай SBOM
Используется oras discover
для получения дайджеста для SBOM.
oras discover $IMAGE -o tree
В следующем примере выходных данных показаны дайджесты для подписи и изображения.
$ oras discover $IMAGE -o tree
<acr-name>.azurecr.io/net-monitor@sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
├── example/sbom
│ └── sha256:fffeeedddcccbbbaaa000999888777666555444333222111fffeeedddcccbbba
└── application/vnd.cncf.notary.signature
└── sha256:111222333444555666777888999000aaabbbcccdddeeefff1112223334445556
Используйте notation sign
для подписывания SBOM с помощью значения дайджеста SBOM из предыдущей команды.
SBOM=$REGISTRY/${REPO}@sha256:fffeeedddcccbbbaaa000999888777666555444333222111fffeeedddcccbbba
notation sign $SBOM
Используйте notation ls
для перечисления подписей в SBOM.
notation ls $SBOM
В следующем примере показана сигнатура SBOM.
$ notation ls $SBOM
<acr-name>.azurecr.io/net-monitor@sha256:fffeeedddcccbbbaaa000999888777666555444333222111fffeeedddcccbbba
└── application/vnd.cncf.notary.signature
└── sha256:fedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321
Next Steps
Дополнительные сведения см. в обзоре каждого этапа.