Поделиться через


Присоединение подписанного SBOM к образу контейнера

Законопроект по программному обеспечению материалов (SBOM) — это манифест сборки, который перечисляет компоненты, используемые для создания части программного обеспечения. SBOM можно использовать для отслеживания происхождения части программного обеспечения, включая образы контейнеров на протяжении всего жизненного цикла. В этой статье показано, как создать SBOM для образа контейнера, подписать его и присоединить его к изображению с помощью инструментов CLI. Другие подходы возможны, включая использование конвейера CI/CD для автоматизации процесса.

Необходимые компоненты

Прежде чем быть, убедитесь, что у вас есть следующее:

Вход в реестр

Войдите в 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

Дополнительные сведения см. в обзоре каждого этапа.