Прием и отправка артефактов цепочек поставок с помощью реестра Azure (предварительная версия)
Используйте реестр контейнеров Azure для хранения графа артефактов цепочки поставок, включая подписи, спецификации программного обеспечения (SBOM), результаты проверки безопасности и другие типы.
Чтобы продемонстрировать эту возможность, в этой статье показано, как использовать OCI Registry as Storage (ORAS) CLI для push
, discover
а pull
также граф артефактов цепочки поставок в реестре контейнеров Azure.
Хранение отдельных (корневых) артефактов OCI рассматривается в разделе Отправка и извлечение артефактов OCI.
Для хранения графа артефактов ссылка на subject
артефакт определяется с помощью манифеста артефакта OCI, который является частью спецификации распространителя предварительной версии OCI 1.1.
Поддержка манифеста артефактов OCI 1.1 является предварительной версией функции ACR и имеет ограничения.
Предварительные требования
- Реестр контейнеров Azure. Создайте реестр контейнеров в своей подписке Azure. Это можно сделать на портале Azure или с помощью Azure CLI.
См . статью Ограничения предварительной версии для поддержки облака Azure. - Azure CLI — требуется версия
2.29.1
или более поздняя. Сведения об установке и (или) обновлении см. в статье Установка Azure CLI . - ORAS CLI — требуется версия
v0.16.0
. См. статью Установка ORAS. - Docker (необязательно) — для выполнения пошагового руководства используется ссылка на образ контейнера.
Docker, установленный локально, можно использовать для сборки и отправки образа контейнера или использовать
acr build
для удаленной сборки в Azure.
Хотя docker Desktop не требуется,oras
cli использует хранилище учетных данных Docker desktop для хранения учетных данных. Если установлен Docker Desktop, он должен быть запущен дляoras login
.
Ограничения предварительной версии
Поддержка манифеста артефактов OCI (спецификация OCI 1.1) доступна во всех общедоступных регионах Azure. Облака Azure для Китая и государственных организаций пока не поддерживаются.
Настройка реестра
Настройте переменные среды, чтобы легко копировать и вставлять команды в оболочку. Команды можно выполнять локально или в Cloud Shell Azure.
ACR_NAME=myregistry
REGISTRY=$ACR_NAME.azurecr.io
REPO=net-monitor
TAG=v1
IMAGE=$REGISTRY/${REPO}:$TAG
Выполните проверку подлинности с помощью отдельного удостоверения Azure AD с помощью маркера 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 повышает уровень артефактов от разработки до промежуточной среды в рабочей среде Безопасные рабочие процессы цепочки поставок повышают уровень общедоступного содержимого до закрытых сред. В любом случае необходимо повысить уровень подписей, SBOM, результатов сканирования и других связанных артефактов с помощью корневого артефакта, чтобы получить полный граф зависимостей.
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
С помощью CLI просмотрите полный список манифестов:
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 для отправки, обнаружения, извлечения и копирования графа артефактов цепочки поставок