Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эта статья является частью серии по обеспечению целостности и подлинности образов контейнеров и других артефактов Open Container Initiative (OCI). Для полного рисунка начните с обзора, в котором объясняется, почему подписывание имеет значение и описывает различные сценарии.
В этой статье основное внимание уделяется подписанию с использованием инструментов проекта Notary, нотации и подписывания артефактов:
- Что вы узнаете здесь: как использовать интерфейс командной строки Notation (CLI) для подписания артефактов с помощью Artifact Signing.
- Применение: Подпись артефактов — это альтернатива Azure Key Vault. Хотя Key Vault предоставляет организациям полный контроль над управлением жизненным циклом сертификатов, Artifact Signing обеспечивает упрощенный интерфейс подписывания с полностью автоматизированным управлением жизненным циклом сертификатов и короткоживущими сертификатами.
- Почему это важно: Подписывание артефактов упрощает работу разработчика, обеспечивая надежную гарантию идентификации. Это помогает командам снизить операционную сложность без ущерба для безопасности.
Предпосылки
Прежде чем можно будет подписывать и проверять образы контейнеров с помощью Notation и Artifact Signing, необходимо настроить ресурсы Azure и установить нужные инструменты. В этом разделе описывается, как подготовить реестр контейнеров Azure, настроить подпись артефактов и настроить Azure CLI в качестве вашей среды разработки.
Подготовка образов контейнеров в реестре контейнеров Azure
- Создайте или используйте реестр контейнеров для хранения образов контейнеров, артефактов OCI и подписей.
- Загрузите или используйте образ контейнера в ваш реестр контейнеров.
Настройка подписи артефактов
Настройте учетную запись подписи артефакта и профиль сертификата в подписке Azure.
Профиль сертификата должен содержать страну или регион (C), штат или провинцию (ST или S) организацию (O) в субъекте сертификата.
Для спецификации нотаричного проекта требуются эти поля.
Настройка Azure CLI
Установите Azure CLI или используйте Azure Cloud Shell.
Установите Notation CLI и плагин для подписи артефактов.
В этом руководстве выполняются команды в Linux AMD64 и Windows в качестве примеров.
Установите Notation CLI версии 1.3.2:
curl -Lo notation.tar.gz https://github.com/notaryproject/notation/releases/download/v1.3.2/notation_1.3.2_linux_amd64.tar.gz # Validate the checksum EXPECTED_SHA256SUM="e1a0f060308086bf8020b2d31defb7c5348f133ca0dba6a1a7820ef3cbb6dfe5" echo "$EXPECTED_SHA256SUM notation.tar.gz" | sha256sum -c - # Continue if sha256sum matches tar xvzf notation.tar.gz cp ./notation /usr/local/binДля других платформ см. руководство по установке нотации.
Установите плагин для подписывания артефактов:
notation plugin install --url "https://github.com/Azure/artifact-signing-notation-plugin/releases/download/v1.0.0/notation-azure-artifactsigning_1.0.0_linux_amd64.tar.gz" --sha256sum 2f45891a14aa9c88c9bee3d11a887c1adbe9d2d24e50de4bc4b4fa3fe595292fОзнакомьтесь с последним URL-адресом и хэш-суммой подключаемого модуля на странице выпуска.
Проверьте установку подключаемого модуля:
Пример выходных данных:
NAME DESCRIPTION VERSION CAPABILITIES ERROR azure-artifactsigning Sign OCI artifacts using the Artifact Signing Service 1.0.0 [SIGNATURE_GENERATOR.RAW] <nil>
Настройка переменных среды
Задайте следующие переменные среды для использования в последующих командах. Замените заполнители фактическими значениями.
Необходимые значения можно найти на портале Azure:
- Для информации об учетной записи подписывания артефактов перейдите в свою учетную запись и выберите Обзор.
- Для получения информации о профиле сертификата перейдите в свою учетную запись и выберите Объекты>Профили сертификатов.
# Artifact Signing environment variables
AS_SUB_ID="<subscription-id>"
AS_ACCT_RG=<ts-account-resource-group>
AS_ACCT_NAME=<ts-account-name>
AS_ACCT_URL=<ts-account-url>
AS_CERT_PROFILE=<ts-cert-profile>
AS_CERT_SUBJECT=<ts-cert-subject>
AS_SIGNING_ROOT_CERT="https://www.microsoft.com/pkiops/certs/Microsoft%20Enterprise%20Identity%20Verification%20Root%20Certificate%20Authority%202020.crt"
AS_TSA_URL="http://timestamp.acs.microsoft.com/"
AS_TSA_ROOT_CERT="http://www.microsoft.com/pkiops/certs/microsoft%20identity%20verification%20root%20certificate%20authority%202020.crt"
# Azure Container Registry and image environment variables
ACR_SUB_ID="<acr-subscription-id>"
ACR_RG=<acr-resource-group>
ACR_NAME=<registry-name>
ACR_LOGIN_SERVER=$ACR_NAME.azurecr.io
REPOSITORY=<repository>
TAG=<tag>
IMAGE=$ACR_LOGIN_SERVER/${REPOSITORY}:$TAG
Вход в Azure
Используйте Azure CLI для входа с помощью удостоверения пользователя:
Замечание
В этом руководстве демонстрируется вход с помощью учетной записи пользователя. Другие параметры удостоверений, включая управляемое удостоверение, см. в статье "Аутентификация в Azure" с помощью Azure CLI.
Назначение разрешений для реестра контейнеров Azure и подписывания артефактов
Предоставьте учетной записи необходимые роли для доступа к реестру контейнеров:
- Для реестров с поддержкой управления доступом на основе атрибутов (ABAC) назначьте:
Container Registry Repository ReaderContainer Registry Repository Writer
- Для реестров, отличных от ABAC, назначьте:
AcrPullAcrPush
az role assignment create --role "Container Registry Repository Reader" --assignee $USER_ID --scope "/subscriptions/$ACR_SUB_ID/resourceGroups/$ACR_RG/providers/Microsoft.ContainerRegistry/registries/$ACR_NAME"
az role assignment create --role "Container Registry Repository Writer" --assignee $USER_ID --scope "/subscriptions/$ACR_SUB_ID/resourceGroups/$ACR_RG/providers/Microsoft.ContainerRegistry/registries/$ACR_NAME"
Назначьте роль Artifact Signing Certificate Profile Signer вашему удостоверению, чтобы вы могли подписывать с использованием Artifact Signing.
az role assignment create --assignee $USER_ID --role "Artifact Signing Certificate Profile Signer" --scope "/subscriptions/$AS_SUB_ID/resourceGroups/$AS_ACCT_RG/providers/Microsoft.CodeSigning/codeSigningAccounts/$AS_ACCT_NAME/certificateProfiles/$AS_CERT_PROFILE"
Подпишите образ контейнера
# Authenticate to Azure Container Registry
az acr login --name $ACR_NAME
# Download the timestamping root certificate
curl -o msft-tsa-root-certificate-authority-2020.crt $AS_TSA_ROOT_CERT
# Sign the image
notation sign --signature-format cose --timestamp-url $AS_TSA_URL --timestamp-root-cert "msft-tsa-root-certificate-authority-2020.crt" --id $AS_CERT_PROFILE --plugin azure-artifactsigning --plugin-config accountName=$AS_ACCT_NAME --plugin-config baseUrl=$AS_ACCT_URL --plugin-config certProfile=$AS_CERT_PROFILE $IMAGE
Основные флаги описаны:
-
--signature-format cose: использует формат объектной подписи и шифрования CBOR (COSE) для создания подписей. -
--timestamp-url: использует сервер метки времени, который поддерживает подписывание артефактов. -
--plugin-config: передает конфигурацию подключаемого модуля подписи Артефакта.
Список подписанных изображений и подписей:
Пример выходных данных:
myregistry.azurecr.io/myrepo@sha256:5d0bf1e8f5a0c74a4c22d8c0f962a7cfa06a4f9d8423b196e482df8af23b5d55
└── application/vnd.cncf.notary.signature
└── sha256:d3a4c9fbc17e27b19a0b28e7b6a33f2c0f541dbdf8d2e5e8d0d79a835e8a76f2a
Проверка образа контейнера
Скачайте и добавьте корневые сертификаты:
curl -o msft-root-certificate-authority-2020.crt $AS_SIGNING_ROOT_CERT SIGNING_TRUST_STORE="myRootCerts" notation cert add --type ca --store $SIGNING_TRUST_STORE msft-root-certificate-authority-2020.crt curl -o msft-tsa-root-certificate-authority-2020.crt $AS_TSA_ROOT_CERT TSA_TRUST_STORE="myTsaRootCerts" notation cert add -t tsa -s $TSA_TRUST_STORE msft-tsa-root-certificate-authority-2020.crt notation cert ls
Создайте JSON-файл политики доверия:
cat <<EOF > trustpolicy.json { "version": "1.0", "trustPolicies": [ { "name": "myPolicy", "registryScopes": [ "$ACR_LOGIN_SERVER/$REPOSITORY" ], "signatureVerification": { "level" : "strict" }, "trustStores": [ "ca:$SIGNING_TRUST_STORE", "tsa:$TSA_TRUST_STORE" ], "trustedIdentities": [ "x509.subject: $AS_CERT_SUBJECT" ] } ] } EOFИмпортируйте и проверьте политику:
notation policy import trustpolicy.json notation policy show
Проверьте изображение:
Пример выходных данных:
Successfully verified signature for myregistry.azurecr.io/myrepo@sha256:5d0bf1e8f5a0c74a4c22d8c0f962a7cfa06a4f9d8423b196e482df8af23b5d55Если проверка завершается ошибкой, убедитесь, что политика доверия и сертификаты настроены правильно.
Связанный контент
- Для подписания образов контейнеров в рабочем процессе GitHub см. "Подписывание образов контейнеров в рабочем процессе GitHub с использованием нотации и подписывания артефактов".
- Сведения о проверке в рабочем процессе GitHub см. в статье "Проверка образов контейнеров в рабочем процессе GitHub с помощью нотации и подписывания артефактов".
- Для проверки в службе Azure Kubernetes (AKS) см. "Verify container image signatures by using Ratify and Azure Policy".