Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Реестр контейнеров 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.2.3или более поздняя версия. См. статью о установке ORAS. -
Docker (необязательно) — чтобы завершить пошаговое руководство, используется образ контейнера. Интерфейс
orasкомандной строки использует хранилище учетных данных Рабочего стола Docker для хранения учетных данных. Вы можете использовать Docker, установленный локально для сборки и отправки образа контейнера, или дляacr buildудаленной сборки в Azure.
Настройка реестра
Чтобы настроить среду для простого выполнения команд, выполните следующие действия.
- Задайте для переменной
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
Эта настройка позволяет вам без труда отправлять и получать артефакты в реестр контейнеров Azure и из него. Теперь ORAS можно использовать с ACR без дополнительной проверки подлинности с помощью oras login команды.
Если Docker недоступен, можно использовать маркер AD, предоставленный для проверки подлинности. Проверка подлинности с помощью отдельного удостоверения Microsoft Entra с помощью маркера AD. Всегда используйте значение "000..." для USER_NAME маркера, который анализируется с помощью переменной PASSWORD . Маркер, используемый az acr login в течение трех часов, действителен.
Примечание.
ACR и ORAS поддерживают несколько вариантов проверки подлинности для пользователей и системы автоматизации. В этой статье используется индивидуальное удостоверение для удобства демонстрации. Дополнительные параметры проверки подлинности см. в разделе "Проверка подлинности с помощью реестра контейнеров Azure".
Отправка и получение артефактов OCI с помощью ORAS
Реестр контейнеров Azure можно использовать для хранения артефактов Open Container Initiative (OCI), а также образов контейнеров Docker и OCI.
Чтобы продемонстрировать эту возможность, в этом разделе показано, как использовать интерфейс командной строки реестра OCI в качестве хранилища (ORAS) для отправки и извлечения артефактов OCI в реестр контейнеров Azure или из нее. Вы можете управлять различными артефактами OCI в реестре контейнеров 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
Виндоус
.\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, каждая ссылка на файл отправляется как blob. Чтобы отправить отдельные большие двоичные объекты, ссылаться на файлы по отдельности или на коллекцию файлов, ссылаясь на каталог.
Дополнительные сведения о отправке коллекции файлов см. в разделе "Отправка артефактов с несколькими файлами".
Создайте некоторую документацию для репозитория:
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
Виндоус
.\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
Чтобы продемонстрировать эту возможность, в этой статье показано, как использовать интерфейс командной строки OCI Registry as Storage (ORAS) для push, discover, а также pull граф артефактов цепочки поставок в реестр контейнеров Azure.
Хранение отдельных артефактов OCI (объектов) рассматривается в загрузке и извлечении артефактов OCI.
Для хранения графа артефактов ссылка на subject артефакт определяется с помощью манифеста образа OCI, который является частью предварительной версии спецификации распределения OCI 1.1.
Примечание.
ORAS версии 1.2.3 использует API ссылок OCI для хранения присоединенных артефактов ссылок в реестре по умолчанию. API ссылок OCI поддерживается большинством функций ACR, кроме зашифрованного реестра CMK. ORAS вернется к использованию схемы тегов ссылок OCI для хранения подключенных ссылок в реестре, зашифрованном CMK.
Отправка образа контейнера
Чтобы связать граф артефактов с образом контейнера с помощью 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, каждая ссылка на файл отправляется как blob. Чтобы отправить отдельные большие двоичные объекты, ссылаться на файлы по отдельности или на коллекцию файлов, ссылаясь на каталог.
Дополнительные сведения о отправке коллекции файлов см. в разделе "Отправка артефактов с несколькими файлами".
Обнаружение ссылок на артефакты
Спецификация OCI версии 1.1 определяет API ссылок-указателей для обнаружения отсылок на артефакт. Команда 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
Виндоус
.\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 CLI для отправки и получения артефактов в/из Реестра контейнеров Azure. Вы также обнаружили манифест загруженных артефактов и посмотрели граф артефактов, присоединенных к изображению контейнера.
Следующие шаги
- Узнайте о ссылках на артефакты, ассоциациях подписей, списке материалов для программного обеспечения и других типах ссылок.
- Дополнительные сведения о проекте ORAS, включая настройку манифеста для артефакта.
- Посетите репозиторий артефактов OCI, чтобы получить справочные сведения о новых типах артефактов.