Прием и отправка артефактов цепочек поставок с помощью реестра Azure (предварительная версия)

Используйте реестр контейнеров Azure для хранения артефактов цепочки поставок и управления ими, включая подписи, счет за программное обеспечение материалов (SBOM), результаты проверки безопасности и другие типы.

Graph of artifacts, including a container image, signature and signed software bill of materials

Чтобы продемонстрировать эту возможность, в этой статье показано, как использовать реестр OCI в качестве интерфейса командной pushdiscover строки служба хранилища (ORAS) и pull граф артефактов цепочки поставок в реестр контейнеров Azure. Хранение отдельных (корневых) артефактов OCI рассматривается в артефактах push-уведомлений и извлечения OCI.

Для хранения графа артефактов ссылка на subject артефакт определяется с помощью манифеста артефакта OCI, который является частью спецификации распространения OCI 1.1. Поддержка манифеста артефактов OCI 1.1 является функцией предварительной версии ACR и подвержена ограничениям.

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

  • Реестр контейнеров Azure. Создайте реестр контейнеров в своей подписке Azure. Это можно сделать на портале Azure или с помощью Azure CLI.
    Сведения об ограничениях предварительной версии для облачной поддержки Azure.
  • Azure CLI — требуется версия 2.29.1 или более поздняя версия. См. статью "Установка Azure CLI " для установки и (или) обновления.
  • ИНТЕРФЕЙС командной строки ORAS — требуется версия v0.16.0 . См. статью о установке ORAS.
  • Docker (необязательно) — чтобы завершить пошаговое руководство, ссылается образ контейнера. Вы можете использовать Docker, установленный локально для сборки и отправки образа контейнера, или для acr build удаленной сборки в Azure.
    Хотя Docker Desktop не требуется, oras cli использует хранилище учетных данных рабочего стола Docker для хранения учетных данных. Если установлен Docker Desktop, он должен быть запущен для oras login.

Ограничения предварительной версии

Поддержка манифеста артефактов OCI (спецификация OCI 1.1) доступна во всех общедоступных регионах Azure. Microsoft Azure, управляемые 21Vianet и облачными службами государственных организаций, пока не поддерживаются.

Настройка реестра

Настройте переменные среды, чтобы легко копировать и вставлять команды в оболочку. Команды можно выполнять локально или в Azure Cloud Shell.

ACR_NAME=myregistry
REGISTRY=$ACR_NAME.azurecr.io
REPO=net-monitor
TAG=v1
IMAGE=$REGISTRY/${REPO}:$TAG

Проверка подлинности с помощью отдельного удостоверения Microsoft Entra с помощью маркера AD. Всегда используйте значение "000..." для USER_NAME маркера, который анализируется с помощью переменной PASSWORD .

# Login to Azure
az login

# Login to ACR, using a token based on your Azure identity
USER_NAME="00000000-0000-0000-0000-000000000000"
PASSWORD=$(az acr login --name $ACR_NAME --expose-token --output tsv --query accessToken)

Примечание.

ACR и ORAS поддерживают несколько вариантов проверки подлинности для пользователей и системы автоматизации. В этой статье используется отдельное удостоверение с помощью маркера Azure. Дополнительные параметры проверки подлинности см. в разделе "Проверка подлинности с помощью реестра контейнеров Azure"

Вход с помощью ORAS

Укажите учетные oras loginданные.

oras login $REGISTRY \
  --username $USER_NAME \
  --password $PASSWORD

Отправка образа контейнера

В этом примере показано создание связи между графом артефактов и образом контейнера.

Создайте и отправьте образ контейнера или пропустите этот шаг, если $IMAGE ссылается на существующий образ в реестре.

az acr build -r $ACR_NAME -t $IMAGE https://github.com/wabbit-networks/net-monitor.git#main

Создание образца сигнатуры для образа контейнера

echo '{"artifact": "'${IMAGE}'", "signature": "jayden hancock"}' > signature.json

Привязка сигнатуры к реестру в качестве ссылки на образ контейнера

Команда oras attach создает ссылку между файлом (./signature.json) и файлом $IMAGE. --artifact-type предназначен для различения артефактов, подобно расширениям файлов, которые образуют различные типы файлов. Можно вложить один или несколько файлов, указав [file]:[mediaType].

oras attach $IMAGE \
    --artifact-type signature/example \
    ./signature.json:application/json

Дополнительные сведения о подключении ORAS см. в документации по ORAS.

Привязка артефакта, включающего несколько файлов, в качестве ссылки

Когда артефакты OCI отправляются в реестр с ORAS, каждая ссылка на файл отправляется в виде большого двоичного объекта. Чтобы отправить отдельные большие двоичные объекты, по отдельности ссылаться на файлы или коллекцию файлов, ссылаясь на каталог.
Дополнительные сведения о отправке коллекции файлов см. в разделе "Отправка артефактов с несколькими файлами".

Создайте некоторую документацию по артефакту:

echo 'Readme Content' > readme.md
mkdir details/
echo 'Detailed Content' > details/readme-details.md
echo 'More detailed Content' > details/readme-more-details.md

Присоединение артефакта с несколькими файлами в качестве ссылки на $IMAGE:

Linux, WSL2 или macOS

oras attach $IMAGE \
    --artifact-type readme/example \
    ./readme.md:application/markdown \
    ./details

Windows

.\oras.exe attach $IMAGE ^
    --artifact-type readme/example ^
    .\readme.md:application/markdown ^
    .\details

Обнаружение ссылок на артефакты

Спецификация OCI версии 1.1 определяет API ссылок для обнаружения ссылок на subject артефакт. Команда oras discover может отображать список ссылок на образ контейнера.

Просмотрите граф артефактов, которые сохранены в реестре, с помощью oras discover.

oras discover -o tree $IMAGE

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

myregistry.azurecr.io/net-monitor:v1
├── signature/example
│   └── sha256:555ea91f39e7fb30c06f3b7aa483663f067f2950dcb...
└── readme/example
    └── sha256:1a118663d1085e229ff1b2d4d89b5f6d67911f22e55...

Создание глубоких графов артефактов

Спецификация OCI версии 1.1 включает глубокие графы, что позволяет получить подписанный счет за программное обеспечение материалов (SBOM) и другие типы артефактов.

Создание примера SBOM

echo '{"version": "0.0.0.0", "artifact": "'${IMAGE}'", "contents": "good"}' > sbom.json

Присоединение примера SBOM к изображению в реестре

Linux, WSL2 или macOS

oras attach $IMAGE \
  --artifact-type sbom/example \
  ./sbom.json:application/json

Windows

.\oras.exe attach $IMAGE ^
    --artifact-type sbom/example ^
    ./sbom.json:application/json

Подписывай SBOM

Артефакты, которые отправляются в качестве ссылок, обычно не имеют тегов, так как они считаются частью артефакта subject . Чтобы отправить сигнатуру артефакту, который является дочерним по отношению к другому артефакту, используйте oras discover с фильтрацией --artifact-type для поиска хэша.

SBOM_DIGEST=$(oras discover -o json \
                --artifact-type sbom/example \
                $IMAGE | jq -r ".manifests[0].digest")

Создание подписи SBOM

echo '{"artifact": "'$IMAGE@$SBOM_DIGEST'", "signature": "jayden hancock"}' > sbom-signature.json

Присоединение подписи SBOM

oras attach $IMAGE@$SBOM_DIGEST \
  --artifact-type 'signature/example' \
  ./sbom-signature.json:application/json

Просмотр графа

oras discover -o tree $IMAGE

Будут получены следующие выходные данные:

myregistry.azurecr.io/net-monitor:v1
├── sbom/example
│   └── sha256:4f1843833c029ecf0524bc214a0df9a5787409fd27bed2160d83f8cc39fedef5
│       └── signature/example
│           └── sha256:3c43b8cb0c941ec165c9f33f197d7f75980a292400d340f1a51c6b325764aa93
├── readme/example
│   └── sha256:5fafd40589e2c980e2864a78818bff51ee641119cf96ebb0d5be83f42aa215af
└── signature/example
    └── sha256:00da2c1c3ceea087b16e70c3f4e80dbce6f5b7625d6c8308ad095f7d3f6107b5

Повышение уровня графа

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

oras copy С помощью команды можно повысить отфильтрованный граф артефактов в реестрах.

net-monitor:v1 Скопируйте изображение, и это связанные артефактыsample-staging/net-monitor:v1:

TARGET_REPO=$REGISTRY/sample-staging/$REPO
oras copy -r $IMAGE $TARGET_REPO:$TAG

Выходные данные oras copy:

Copying 6bdea3cdc730 sbom-signature.json
Copying 78e159e81c6b sbom.json
Copied  6bdea3cdc730 sbom-signature.json
Copied  78e159e81c6b sbom.json
Copying 7cf1385c7f4d signature.json
Copied  7cf1385c7f4d signature.json
Copying 3e797ecd0697 details
Copying 2fdeac43552b readme.md
Copied  3e797ecd0697 details
Copied  2fdeac43552b readme.md
Copied demo42.myregistry.io/net-monitor:v1 => myregistry.azurecr.io/sample-staging/net-monitor:v1
Digest: sha256:ff858b2ea3cdf4373cba65d2ca6bcede4da1d620503a547cab5916614080c763

Обнаружение графа артефактов с повышением уровня

oras discover -o tree $TARGET_REPO:$TAG

Выходные oras discoverданные:

myregistry.azurecr.io/sample-staging/net-monitor:v1
├── sbom/example
│   └── sha256:4f1843833c029ecf0524bc214a0df9a5787409fd27bed2160d83f8cc39fedef5
│       └── signature/example
│           └── sha256:3c43b8cb0c941ec165c9f33f197d7f75980a292400d340f1a51c6b325764aa93
├── readme/example
│   └── sha256:5fafd40589e2c980e2864a78818bff51ee641119cf96ebb0d5be83f42aa215af
└── signature/example
    └── sha256:00da2c1c3ceea087b16e70c3f4e80dbce6f5b7625d6c8308ad095f7d3f6107b5

Извлечение артефакта, на который указывает ссылка

Для извлечения определенного артефакта, на который ссылается ссылка, обнаруживается дайджест ссылки с помощью oras discover команды:

DOC_DIGEST=$(oras discover -o json \
              --artifact-type 'readme/example' \
              $TARGET_REPO:$TAG | jq -r ".manifests[0].digest")

Создание чистого каталога для загрузки

mkdir ./download

Извлечение документов в каталог загрузки

oras pull -o ./download $TARGET_REPO@$DOC_DIGEST

Просмотр документов

tree ./download

Выходные данные tree:

./download
├── details
│   ├── readme-details.md
│   └── readme-more-details.md
└── readme.md

Просмотр репозитория и списка тегов

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

Просмотр списка тегов

oras repo tags $REGISTRY/$REPO

Просмотр списка манифестов

Репозиторий может содержать список манифестов, которые помечены как тегами, так и отключаются. az acr manifest С помощью интерфейса командной строки просмотрите полный список манифестов:

az acr manifest list-metadata \
  --name $REPO \
  --registry $ACR_NAME \
  --output jsonc

Обратите внимание, что манифесты образа контейнера имеются "tags", а ссылочные типы ("mediaType": "application/vnd.oci.artifact.manifest.v1+json") не имеют.

В выходных данных подпись отключается, но отслеживается как oci.artifact.manifest ссылка на образ контейнера:

{
  "changeableAttributes": {
    "deleteEnabled": true,
    "listEnabled": true,
    "readEnabled": true,
    "writeEnabled": true
  },
  "createdTime": "2023-01-10T17:58:28.4403142Z",
  "digest": "sha256:00da2c1c3ceea087b16e70c3f4e80dbce6f5b7625d6c8308ad095f7d3f6107b5",
  "imageSize": 80,
  "lastUpdateTime": "2023-01-10T17:58:28.4403142Z",
  "mediaType": "application/vnd.oci.artifact.manifest.v1+json"
}

Удаление всех артефактов в графе

Поддержка спецификации OCI версии 1.1 позволяет удалить граф артефактов, связанных с корневым артефактом. oras delete Используйте команду для удаления графа артефактов (сигнатуры, SBOM и сигнатуры SBOM).

oras manifest delete -f $REGISTRY/$REPO:$TAG

oras manifest delete -f $REGISTRY/sample-staging/$REPO:$TAG

Просмотр оставшихся манифестов

При удалении корневого артефакта все связанные артефакты также удаляются из чистой среды:

az acr manifest list-metadata \
  --name $REPO \
  --registry $ACR_NAME -o jsonc

Выходные данные:

2023-01-10 18:38:45.366387 Error: repository "net-monitor" is not found.

Итоги

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

Следующие шаги

  • Узнайте больше об ORAS CLI
  • Дополнительные сведения о манифесте артефакта OCI для отправки, обнаружения, извлечения, копирования графа артефактов цепочки поставок