Управление артефактами OCI и артефактами цепочки поставок с помощью ORAS
Реестр контейнеров Azure (ACR) помогает управлять артефактами open container initiative (OCI) и артефактами цепочки поставок. В этой статье описано, как эффективно использовать ACR для управления артефактами OCI и артефактами цепочки поставок. Узнайте, как хранить, управлять и извлекать артефакты OCI и граф артефактов цепочки поставок, включая подписи, счет за программное обеспечение материалов (SBOM), результаты проверки безопасности и другие типы.
Эта статья разделена на два основных раздела:
- Отправка и извлечение артефактов OCI с помощью ORAS
- Присоединение, отправка и извлечение артефактов цепочки поставок с помощью ORAS
Необходимые компоненты
- Реестр контейнеров Azure. Создайте реестр контейнеров в своей подписке Azure. Это можно сделать на портале Azure или с помощью Azure CLI.
- Azure CLI — требуется версия
2.29.1
или более поздняя версия. См. статью "Установка Azure CLI " для установки и (или) обновления. - ORAS CLI — требуется версия
v1.1.0
или более поздняя версия. См. статью о установке ORAS. - Docker (необязательно) — чтобы завершить пошаговое руководство, ссылается образ контейнера.
Вы можете использовать Docker, установленный локально для сборки и отправки образа контейнера, или для
acr build
удаленной сборки в Azure.
Хотя Docker Desktop не требуется,oras
cli использует хранилище учетных данных рабочего стола Docker для хранения учетных данных. Если установлен Docker Desktop, он должен быть запущен дляoras login
.
Настройка реестра
Чтобы настроить среду для простого выполнения команд, выполните следующие действия.
- Задайте для переменной
ACR_NAME
имя реестра. - Задайте для переменной
REGISTRY
$ACR_NAME.azurecr.io
значение . - Задайте для переменной
REPO
имя репозитория. - Задайте для переменной нужный
TAG
тег. - Задайте для переменной
IMAGE
$REGISTRY/${REPO}:$TAG
значение .
Настройка переменных среды
Настройте имя реестра, учетные данные входа, имя репозитория и тег для отправки и извлечения артефактов. В следующем примере используется net-monitor
имя и v1
тег репозитория. Замените собственным именем и тегом репозитория.
ACR_NAME=myregistry
REGISTRY=$ACR_NAME.azurecr.io
REPO=net-monitor
TAG=v1
IMAGE=$REGISTRY/${REPO}:$TAG
Вход в реестр
Проверка подлинности с помощью ACR позволяет извлекать и отправлять образы контейнеров.
az login
az acr login -n $REGISTRY
Если Docker недоступен, можно использовать маркер AD, предоставленный для проверки подлинности. Проверка подлинности с помощью отдельного удостоверения Microsoft Entra с помощью маркера AD. Всегда используйте значение "000..." для USER_NAME
маркера, который анализируется с помощью переменной PASSWORD
.
# Login to Azure
az login
Вход с помощью ORAS
Укажите учетные oras login
данные.
oras login $REGISTRY \
--username $USER_NAME \
--password $PASSWORD
Эта настройка позволяет легко отправлять и извлекать артефакты из Реестр контейнеров Azure. Настройте переменные по мере необходимости для конкретной конфигурации.
Отправка и извлечение артефактов OCI с ORAS
Реестр контейнеров Azure можно использовать для хранения артефактов Open Container Initiative (OCI), а также образов контейнеров Docker и OCI.
Чтобы продемонстрировать эту возможность, в этом разделе показано, как использовать интерфейс командной строки реестра OCI в качестве хранилища (ORAS) для отправки и извлечения артефактов OCI в реестр контейнеров Azure или из нее. Вы можете управлять различными артефактами OCI в реестре контейнеров Azure с помощью различных средств командной строки, соответствующих каждому артефакту.
Примечание.
ACR и ORAS поддерживают несколько вариантов проверки подлинности для пользователей и системы автоматизации. В этой статье используется отдельное удостоверение с помощью маркера Azure. Дополнительные параметры проверки подлинности см. в разделе "Проверка подлинности с помощью реестра контейнеров Azure".
Отправка артефакта
Один артефакт файла, имеющий родительский subject
объект, не может быть ничего из образа контейнера, диаграммы helm, файла readme для репозитория. Эталонные артефакты могут быть любым из подписи, программного счета за материалы, отчеты сканирования или другие изменяющиеся типы. Эталонные артефакты, описанные в разделе "Присоединение,отправка" и артефакты цепочки поставок по запросу, являются артефактами, ссылающимися на другой артефакт.
Отправка артефакта с одним файлом
В этом примере создайте содержимое, представляющее файл markdown:
echo 'Readme Content' > readme.md
На следующем шаге readme.md
файл отправляется <myregistry>.azurecr.io/samples/artifact:readme
в .
- Реестр определяется с полным именем
<myregistry>.azurecr.io
реестра (все строчные регистры), за которым следует пространство имен и репозиторий:/samples/artifact
- Артефакт помечается
:readme
, чтобы определить его уникально из других артефактов, перечисленных в репозитории (:latest, :v1, :v1.0.1
). - Параметр
--artifact-type readme/example
отличает артефакт от образа контейнера, который используетapplication/vnd.oci.image.config.v1+json
. - Определяет
./readme.md
отправленный файл и:application/markdown
представляет IANAmediaType
файла.
Дополнительные сведения см . в руководстве авторов артефактов OCI.
oras push
Используйте команду, чтобы отправить файл в реестр.
Linux, WSL2 или macOS
oras push $REGISTRY/samples/artifact:readme \
--artifact-type readme/example \
./readme.md:application/markdown
Windows
.\oras.exe push $REGISTRY/samples/artifact:readme ^
--artifact-type readme/example ^
.\readme.md:application/markdown
Выходные данные для успешной отправки похожи на следующие выходные данные:
Uploading 2fdeac43552b readme.md
Uploaded 2fdeac43552b readme.md
Pushed <myregistry>.azurecr.io/samples/artifact:readme
Digest: sha256:e2d60d1b171f08bd10e2ed171d56092e39c7bac1
aec5d9dcf7748dd702682d53
Отправка артефакта с несколькими файлами
Когда артефакты 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
Отправьте артефакт с несколькими файлами:
Linux, WSL2 или macOS
oras push $REGISTRY/samples/artifact:readme \
--artifact-type readme/example\
./readme.md:application/markdown\
./details
Windows
.\oras.exe push $REGISTRY/samples/artifact:readme ^
--artifact-type readme/example ^
.\readme.md:application/markdown ^
.\details
Обнаружение манифеста
Чтобы просмотреть манифест, созданный в результате oras push
, используйте oras manifest fetch
:
oras manifest fetch --pretty $REGISTRY/samples/artifact:readme
Выходные данные должны иметь следующий вид:
{
"mediaType": "application/vnd.oci.artifact.manifest.v1+json",
"artifactType": "readme/example",
"blobs": [
{
"mediaType": "application/markdown",
"digest": "sha256:2fdeac43552b71eb9db534137714c7bad86b53a93c56ca96d4850c9b41b777fc",
"size": 15,
"annotations": {
"org.opencontainers.image.title": "readme.md"
}
},
{
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
"digest": "sha256:0d6c7434a34f6854f971487621426332e6c0fda08040b9e6cc8a93f354cee0b1",
"size": 189,
"annotations": {
"io.deis.oras.content.digest": "sha256:11eceb2e7ac3183ec9109003a7389468ec73ad5ceaec0c4edad0c1b664c5593a",
"io.deis.oras.content.unpack": "true",
"org.opencontainers.image.title": "details"
}
}
],
"annotations": {
"org.opencontainers.artifact.created": "2023-01-10T14:44:06Z"
}
}
Извлечение артефакта
Создайте чистый каталог для скачивания.
mkdir ./download
Чтобы извлечь артефакт из реестра, выполните команду oras pull
.
oras pull -o ./download $REGISTRY/samples/artifact:readme
Просмотр вытягиваемых файлов
tree ./download
Удаление артефакта (дополнительная возможность)
Чтобы удалить артефакт из реестра, используйте oras manifest delete
команду.
oras manifest delete $REGISTRY/samples/artifact:readme
Присоединение, отправка и извлечение артефактов цепочки поставок с помощью ORAS
Чтобы продемонстрировать эту возможность, в этой статье показано, как использовать интерфейс командной push
строки реестра OCI в качестве хранилища (ORAS) для , discover
а также pull
граф артефактов цепочки поставок в реестр контейнеров Azure.
Хранение отдельных артефактов OCI (тема) рассматривается в артефактах Push и извлечения OCI.
Для хранения графа артефактов ссылка на subject
артефакт определяется с помощью манифеста изображения OCI, который является частью предварительной спецификации распространения OCI 1.1.
Отправка образа контейнера
Чтобы связать граф артефактов с образом контейнера с помощью Azure CLI:
Вы можете создать и отправить образ контейнера или пропустить этот шаг, если $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, каждая ссылка на файл отправляется в виде большого двоичного объекта. Чтобы отправить отдельные большие двоичные объекты, по отдельности ссылаться на файлы или коллекцию файлов, ссылаясь на каталог.
Дополнительные сведения о отправке коллекции файлов см. в разделе "Отправка артефактов с несколькими файлами".
Обнаружение ссылок на артефакты
Спецификация 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 к реестру:
Создание примера 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
Внимание
Корпорация Майкрософт рекомендует использовать средство безопасной подписи криптографии, например Нотацию , чтобы подписать образ и создать подпись для подписывания SBOM.
Артефакты, которые отправляются в качестве ссылок, обычно не имеют тегов, так как они считаются частью артефакта subject
. Чтобы отправить сигнатуру артефакту, который является дочерним по отношению к другому артефакту, используйте oras discover
с фильтрацией --artifact-type
для поиска хэша. В этом примере используется простая подпись JSON для демонстрационных целей.
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
Просмотр репозитория и списка тегов
ORAS позволяет отправлять, обнаруживать, извлекать и копировать графы артефактов без необходимости назначать теги. Кроме того, он позволяет отображать список тегов, чтобы сосредоточиться на артефактах, о которых пользователи думают, в отличие от подписей и SBOM, связанных с изображениями контейнеров, диаграммами helm и другими артефактами.
Просмотр списка тегов
oras repo tags $REGISTRY/$REPO
Удаление всех артефактов в графе
Поддержка спецификации OCI версии 1.1 позволяет удалить граф артефактов, связанных с артефактом субъекта. oras manifest 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.
Итоги
В этой статье вы узнали, как использовать Реестр контейнеров Azure для хранения, управления и извлечения артефактов OCI и артефактов цепочки поставок. Вы использовали ИНТЕРФЕЙС командной строки ORAS для отправки и извлечения артефактов в Реестр контейнеров Azure. Вы также обнаружили манифест отправленных артефактов и просматривали граф артефактов, присоединенных к изображению контейнера.
Следующие шаги
- Узнайте о справочниках по артефактам, связывании подписей, счете за программное обеспечение материалов и других ссылочных типах.
- Дополнительные сведения о проекте ORAS, включая настройку манифеста для артефакта.
- Посетите репозиторий артефактов OCI, чтобы получить справочные сведения о новых типах артефактов.