Аутентификация с помощью реестра контейнеров Azure из службы "Экземпляры контейнеров Azure"Authenticate with Azure Container Registry from Azure Container Instances

Вы можете обеспечить доступ к закрытым реестрам контейнеров в реестре контейнеров Azure с помощью субъекта-службы Azure Active Directory (Azure AD).You can use an Azure Active Directory (Azure AD) service principal to provide access to your private container registries in Azure Container Registry.

Из этой статьи вы узнаете, как создать и настроить субъект-службу Azure AD с разрешениями на извлечение данных в реестре.In this article, you learn to create and configure an Azure AD service principal with pull permissions to your registry. Затем вы запустите контейнер в службе "Экземпляры контейнеров Azure" (ACI), которая извлекает образ контейнера из закрытого реестра, с помощью субъекта-службы для аутентификации.Then, you start a container in Azure Container Instances (ACI) that pulls its image from your private registry, using the service principal for authentication.

Когда следует использовать субъект-службуWhen to use a service principal

Субъект-службу следует использовать для аутентификации из ACI в сценариях автоматического входа, например в приложениях или службах, которые создают экземпляры контейнеров автоматически или другим способом без участия пользователя.You should use a service principal for authentication from ACI in headless scenarios, such as in applications or services that create container instances in an automated or otherwise unattended manner.

Например, для автоматического скрипта, который выполняется ночью и создает экземпляр контейнера на основе задач для обработки некоторых данных, можно использовать субъект-службу с разрешениями только на извлечение для аутентификации в реестре.For example, if you have an automated script that runs nightly and creates a task-based container instance to process some data, it can use a service principal with pull-only permissions to authenticate to the registry. Затем можно сменить учетные данные субъекта-службы или полностью отменить его доступ, что никак не отразится на других службах и приложениях.You can then rotate the service principal's credentials or revoke its access completely without affecting other services and applications.

Субъекты-службы также следует использовать, если учетная запись администратора реестра отключена.Service principals should also be used when the registry admin user is disabled.

Создание субъекта-службыCreate a service principal

Чтобы создать субъект-службу с доступом к реестру контейнеров, выполните следующий скрипт в Azure Cloud Shell или локальную установку Azure CLI.To create a service principal with access to your container registry, run the following script in the Azure Cloud Shell or a local installation of the Azure CLI. Скрипт отформатирован для оболочки Bash.The script is formatted for the Bash shell.

Перед выполнением сценария обновите переменную ACR_NAME с именем реестра контейнеров.Before running the script, update the ACR_NAME variable with the name of your container registry. Значение SERVICE_PRINCIPAL_NAME должно быть уникальным в клиенте Azure Active Directory.The SERVICE_PRINCIPAL_NAME value must be unique within your Azure Active Directory tenant. Если вы получаете ошибку "'http://acr-service-principal' already exists.", укажите другое имя для субъекта-службы.If you receive an "'http://acr-service-principal' already exists." error, specify a different name for the service principal.

При необходимости предоставления различных разрешений можно --role дополнительно изменить значение в команде AZ AD SP Create-for-RBAC .You can optionally modify the --role value in the az ad sp create-for-rbac command if you want to grant different permissions. Полный список ролей см. в разделе Роли и разрешения реестра контейнеров Azure.For a complete list of roles, see ACR roles and permissions.

После запуска скрипта запишите идентификатор и пароль субъекта-службы.After you run the script, take note of the service principal's ID and password. Сохранив эти учетные данные, вы можете настроить приложения и службы для аутентификации в качестве субъектов-служб в реестре контейнеров.Once you have its credentials, you can configure your applications and services to authenticate to your container registry as the service principal.

#!/bin/bash

# Modify for your environment.
# ACR_NAME: The name of your Azure Container Registry
# SERVICE_PRINCIPAL_NAME: Must be unique within your AD tenant
ACR_NAME=<container-registry-name>
SERVICE_PRINCIPAL_NAME=acr-service-principal

# Obtain the full registry ID for subsequent command args
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv)

# Create the service principal with rights scoped to the registry.
# Default permissions are for docker pull access. Modify the '--role'
# argument value as desired:
# acrpull:     pull only
# acrpush:     push and pull
# owner:       push, pull, and assign roles
SP_PASSWD=$(az ad sp create-for-rbac --name http://$SERVICE_PRINCIPAL_NAME --scopes $ACR_REGISTRY_ID --role acrpull --query password --output tsv)
SP_APP_ID=$(az ad sp show --id http://$SERVICE_PRINCIPAL_NAME --query appId --output tsv)

# Output the service principal's credentials; use these in your services and
# applications to authenticate to the container registry.
echo "Service principal ID: $SP_APP_ID"
echo "Service principal password: $SP_PASSWD"

Использование существующего субъекта-службыUse an existing service principal

Чтобы предоставить субъекту-службе доступ к реестру, нужно назначить новую роль субъекту-службе.To grant registry access to an existing service principal, you must assign a new role to the service principal. Как и при создании субъекта-службы, вы, помимо прочего, можете предоставить разрешения на извлечение данных, отправку и извлечение данных, а также разрешения владельца.As with creating a new service principal, you can grant pull, push and pull, and owner access, among others.

В следующем скрипте используется команда AZ Role назначение Create для предоставления разрешений на Включение внесенных изменений субъекту-службе SERVICE_PRINCIPAL_ID , указанному в переменной.The following script uses the az role assignment create command to grant pull permissions to a service principal you specify in the SERVICE_PRINCIPAL_ID variable. Измените значение --role, если нужно предоставить другой уровень доступа.Adjust the --role value if you'd like to grant a different level of access.

#!/bin/bash

# Modify for your environment. The ACR_NAME is the name of your Azure Container
# Registry, and the SERVICE_PRINCIPAL_ID is the service principal's 'appId' or
# one of its 'servicePrincipalNames' values.
ACR_NAME=mycontainerregistry
SERVICE_PRINCIPAL_ID=<service-principal-ID>

# Populate value required for subsequent command args
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv)

# Assign the desired role to the service principal. Modify the '--role' argument
# value as desired:
# acrpull:     pull only
# acrpush:     push and pull
# owner:       push, pull, and assign roles
az role assignment create --assignee $SERVICE_PRINCIPAL_ID --scope $ACR_REGISTRY_ID --role acrpull

Аутентификация с помощью субъекта-службыAuthenticate using the service principal

Чтобы запустить контейнер в службе "Экземпляры контейнеров Azure", используя субъект-службу, укажите идентификатор субъекта-службы для параметра --registry-username и пароль для параметра --registry-password.To launch a container in Azure Container Instances using a service principal, specify its ID for --registry-username, and its password for --registry-password.

az container create \
    --resource-group myResourceGroup \
    --name mycontainer \
    --image mycontainerregistry.azurecr.io/myimage:v1 \
    --registry-login-server mycontainerregistry.azurecr.io \
    --registry-username <service-principal-ID> \
    --registry-password <service-principal-password>

Примеры сценариевSample scripts

На GitHub можно найти предыдущие примеры сценариев для Azure CLI, а также версии для Azure PowerShell:You can find the preceding sample scripts for Azure CLI on GitHub, as well versions for Azure PowerShell:

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

В следующих статьях приводятся дополнительные сведения о работе с субъектами-службами и реестром контейнеров Azure.The following articles contain additional details on working with service principals and ACR: