Аутентификация в реестре контейнеров Azure с помощью управляемого удостоверения AzureUse an Azure managed identity to authenticate to an Azure container registry

Проходите аутентификацию в реестре контейнеров Azure из другого ресурса Azure с помощью управляемого удостоверения для ресурсов Azure, не предоставляя учетные данные реестра и не управляя ими.Use a managed identity for Azure resources to authenticate to an Azure container registry from another Azure resource, without needing to provide or manage registry credentials. Например, настройте управляемое удостоверение, назначаемое пользователем или системой, на виртуальной машине Linux, чтобы получать доступ к образам контейнера из реестра контейнеров так же просто, как при использовании общедоступного реестра.For example, set up a user-assigned or system-assigned managed identity on a Linux VM to access container images from your container registry, as easily as you use a public registry.

В этой статье вы ознакомитесь с управляемыми удостоверениями и узнаете, как выполнять следующие действия:For this article, you learn more about managed identities and how to:

  • применение на виртуальной машине Azure удостоверения, назначаемого пользователем или системой;Enable a user-assigned or system-assigned identity on an Azure VM
  • предоставление удостоверению доступа к реестру контейнеров Azure;Grant the identity access to an Azure container registry
  • получение доступа к реестру и извлечение образа контейнера с помощью управляемого удостоверения.Use the managed identity to access the registry and pull a container image

Для создания ресурсов Azure с помощью инструкций из этой статьи требуется Azure CLI версии 2.0.55 или более поздней версии.To create the Azure resources, this article requires that you run the Azure CLI version 2.0.55 or later. Чтобы узнать версию, выполните команду az --version.Run az --version to find the version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.If you need to install or upgrade, see Install Azure CLI.

Чтобы настроить реестр контейнеров и отправить образ контейнера в него, необходимо также локально установить модуль Docker.To set up a container registry and push a container image to it, you must also have Docker installed locally. Docker предоставляет пакеты, которые позволяют быстро настроить Docker в системе под управлением macOS, Windows или Linux.Docker provides packages that easily configure Docker on any macOS, Windows, or Linux system.

Для чего нужны управляемые удостоверения?Why use a managed identity?

Функция управляемого удостоверения для ресурсов Azure предоставляет службам Azure автоматически управляемое удостоверение в Azure Active Directory (Azure AD).A managed identity for Azure resources provides Azure services with an automatically managed identity in Azure Active Directory (Azure AD). Управляемое удостоверение можно настроить для определенных ресурсов Azure, включая виртуальные машины.You can configure certain Azure resources, including virtual machines, with a managed identity. Затем с использованием удостоверения вы можете получить доступ к другим ресурсам Azure, не предоставляя учетные данные в коде или сценариях.Then, use the identity to access other Azure resources, without passing credentials in code or scripts.

Управляемые удостоверения бывают двух типов:Managed identities are of two types:

  • Назначаемые пользователем удостоверения, которые можно назначить нескольким ресурсам и хранить столько, сколько необходимо.User-assigned identities, which you can assign to multiple resources and persist for as long as your want. Назначаемые пользователем удостоверения сейчас доступны в предварительной версии.User-assigned identities are currently in preview.

  • Удостоверение, управляемое системой, является уникальным для определенного ресурса, например отдельной виртуальной машины, и актуально в течение времени существования этого ресурса.A system-managed identity, which is unique to a specific resource like a single virtual machine and lasts for the lifetime of that resource.

После настройки для ресурса Azure управляемого удостоверения предоставьте последнему необходимый доступ к другому ресурсу, как и любому субъекту безопасности.After you set up an Azure resource with a managed identity, give the identity the access you want to another resource, just like any security principal. Например, назначьте управляемому удостоверению роль с разрешениями на извлечение, отправку и извлечение или другими разрешениями в частном реестре в Azure.For example, assign a managed identity a role with pull, push and pull, or other permissions to a private registry in Azure. (Полный список ролей реестра см. в статье роли и разрешения реестра контейнеров Azure.) Вы можете предоставить удостоверению доступ к одному или нескольким ресурсам.(For a complete list of registry roles, see Azure Container Registry roles and permissions.) You can give an identity access to one or more resources.

Затем это удостоверение можно использовать для аутентификации в любой службе, которая поддерживает аутентификацию Azure AD, не храня какие-либо учетные данные в коде.Then, use the identity to authenticate to any service that supports Azure AD authentication, without any credentials in your code. Чтобы получить доступ к реестру контейнеров Azure с виртуальной машины, используя удостоверение, выполните аутентификацию с помощью Azure Resource Manager.To use the identity to access an Azure container registry from a virtual machine, you authenticate with Azure Resource Manager. Выберите метод проверки подлинности с помощью управляемого удостоверения в зависимости от сценария:Choose how to authenticate using the managed identity, depending on your scenario:

Создание реестра контейнеровCreate a container registry

Если у вас еще нет реестра контейнеров Azure, создайте его и отправьте в него пример образа контейнера.If you don't already have an Azure container registry, create a registry and push a sample container image to it. Инструкции см. в разделе Краткое руководство. создание закрытого реестра контейнеров с помощью Azure CLI.For steps, see Quickstart: Create a private container registry using the Azure CLI.

В этой статье предполагается, что у вас есть образ контейнера aci-helloworld:v1, хранящийся в реестре.This article assumes you have the aci-helloworld:v1 container image stored in your registry. В примерах используется реестр с именем myContainerRegistry.The examples use a registry name of myContainerRegistry. На последующих шагах замените эти значения именами вашего реестра и образа.Replace with your own registry and image names in later steps.

Создание виртуальной машины с поддержкой DockerCreate a Docker-enabled VM

Создайте виртуальную машину Ubuntu с поддержкой Docker.Create a Docker-enabled Ubuntu virtual machine. Необходимо также установить Azure CLI на виртуальной машине.You also need to install the Azure CLI on the virtual machine. Если у вас уже есть виртуальная машина Azure, пропустите этот шаг создания виртуальной машины.If you already have an Azure virtual machine, skip this step to create the virtual machine.

Разверните виртуальную машину Azure Ubuntu по умолчанию с помощью команды az vm create.Deploy a default Ubuntu Azure virtual machine with az vm create. В следующем примере создается виртуальная машина с именем myDockerVM в имеющейся группе ресурсов myResourceGroup.The following example creates a VM named myDockerVM in an existing resource group named myResourceGroup:

az vm create \
    --resource-group myResourceGroup \
    --name myDockerVM \
    --image UbuntuLTS \
    --admin-username azureuser \
    --generate-ssh-keys

Создание виртуальной машины может занять несколько минут.It takes a few minutes for the VM to be created. После выполнения команды запишите значение publicIpAddress, отображаемое Azure CLI.When the command completes, take note of the publicIpAddress displayed by the Azure CLI. Этот адрес используется для установления SSH-подключений к виртуальной машине.Use this address to make SSH connections to the VM.

Установка Docker на виртуальной машинеInstall Docker on the VM

После запуска виртуальной машины установите SSH-подключение к ней.After the VM is running, make an SSH connection to the VM. Замените publicIpAddress общедоступным IP-адресом виртуальной машины.Replace publicIpAddress with the public IP address of your VM.

ssh azureuser@publicIpAddress

Выполните следующую команду, чтобы установить Docker на виртуальную машину:Run the following command to install Docker on the VM:

sudo apt update
sudo apt install docker.io -y

После установки выполните следующую команду, чтобы проверить правильность работы Docker на виртуальной машине:After installation, run the following command to verify that Docker is running properly on the VM:

sudo docker run -it hello-world

Выходные данные:Output:

Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]

Установка Azure CLIInstall the Azure CLI

Выполните действия, описанные в статье Установка Azure CLI с помощью apt, чтобы установить Azure CLI на виртуальной машине Ubuntu.Follow the steps in Install Azure CLI with apt to install the Azure CLI on your Ubuntu virtual machine. Для этой статьи установите версию 2.0.55 или более позднюю версию.For this article, ensure that you install version 2.0.55 or later.

Выйдите из сеанса SSH.Exit the SSH session.

Пример 1. доступ с удостоверением, назначенным пользователемExample 1: Access with a user-assigned identity

Создание удостоверенияCreate an identity

Создайте в подписке удостоверение, используя команду az identity create.Create an identity in your subscription using the az identity create command. Вы можете использовать ту же группу ресурсов, что и ранее для создания реестра контейнеров или виртуальной машины, либо другую.You can use the same resource group you used previously to create the container registry or virtual machine, or a different one.

az identity create --resource-group myResourceGroup --name myACRId

Чтобы настроить удостоверение на следующих шагах, выполните команду az identity show для сохранения идентификатора ресурса и идентификатора субъекта-службы удостоверения в переменных.To configure the identity in the following steps, use the az identity show command to store the identity's resource ID and service principal ID in variables.

# Get resource ID of the user-assigned identity
userID=$(az identity show --resource-group myResourceGroup --name myACRId --query id --output tsv)

# Get service principal ID of the user-assigned identity
spID=$(az identity show --resource-group myResourceGroup --name myACRId --query principalId --output tsv)

Так как идентификатор удостоверения потребуется позже при входе в интерфейс командной строки с виртуальной машины, отобразится значение:Because you need the identity's ID in a later step when you sign in to the CLI from your virtual machine, show the value:

echo $userID

Идентификатор выглядит следующим образом:The ID is of the form:

/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId

Настройка виртуальной машины с удостоверениемConfigure the VM with the identity

Следующая команда az vm identity assign настраивает виртуальную машину Docker с назначаемым пользователем удостоверением:The following az vm identity assign command configures your Docker VM with the user-assigned identity:

az vm identity assign --resource-group myResourceGroup --name myDockerVM --identities $userID

Предоставление удостоверению доступа к реестру контейнеровGrant identity access to the container registry

Теперь настройте для удостоверения доступ к реестру контейнеров.Now configure the identity to access your container registry. Сначала получите идентификатор ресурса реестра, используя команду az acr show:First use the az acr show command to get the resource ID of the registry:

resourceID=$(az acr show --resource-group myResourceGroup --name myContainerRegistry --query id --output tsv)

Используйте команду az role assignment create, чтобы назначить роль AcrPull реестру.Use the az role assignment create command to assign the AcrPull role to the registry. Эта роль предоставляет реестру разрешения на извлечение.This role provides pull permissions to the registry. Чтобы предоставить разрешения и на извлечение, и на отправку, назначьте роль ACRPush.To provide both pull and push permissions, assign the ACRPush role.

az role assignment create --assignee $spID --scope $resourceID --role acrpull

Использование удостоверения для доступа к рееструUse the identity to access the registry

Установите SSH-подключение к виртуальной машине Docker, настроенной с удостоверением.SSH into the Docker virtual machine that's configured with the identity. Выполните следующие команды в Azure CLI, установленном на виртуальной машине.Run the following Azure CLI commands, using the Azure CLI installed on the VM.

Сначала Проверяйте подлинность Azure CLI с помощью команды AZ login, используя удостоверение, настроенное на виртуальной машине.First, authenticate to the Azure CLI with az login, using the identity you configured on the VM. Для <userID> замените идентификатор удостоверения идентификатором, полученным на предыдущем шаге.For <userID>, substitute the ID of the identity you retrieved in a previous step.

az login --identity --username <userID>

Затем выполните аутентификацию в реестре с помощью команды AZ контроля учетных записей.Then, authenticate to the registry with az acr login. При использовании этой команды CLI применяет маркер Active Directory, созданный при выполнении команды az login, чтобы эффективно выполнить аутентификацию вашего сеанса в реестре контейнеров.When you use this command, the CLI uses the Active Directory token created when you ran az login to seamlessly authenticate your session with the container registry. (В зависимости от настройки виртуальной машины может потребоваться выполнить эту команду и команды Docker с помощью sudo.)(Depending on your VM's setup, you might need to run this command and docker commands with sudo.)

az acr login --name myContainerRegistry

Отобразится сообщение Login succeeded.You should see a Login succeeded message. Затем вы можете выполнить команды docker, не предоставляя учетные данные.You can then run docker commands without providing credentials. Например, запустите docker pull, чтобы извлечь образ aci-helloworld:v1, указав имя сервера для входа в реестр.For example, run docker pull to pull the aci-helloworld:v1 image, specifying the login server name of your registry. Имя сервера входа состоит из имени реестра контейнеров (в нижнем регистре), за которым следует .azurecr.io, например mycontainerregistry.azurecr.io.The login server name consists of your container registry name (all lowercase) followed by .azurecr.io - for example, mycontainerregistry.azurecr.io.

docker pull mycontainerregistry.azurecr.io/aci-helloworld:v1

Пример 2. доступ с помощью удостоверения, назначенного системойExample 2: Access with a system-assigned identity

Настройка виртуальной машины с управляемым системой удостоверениемConfigure the VM with a system-managed identity

Следующая команда az vm identity assign настраивает виртуальную машину Docker с назначаемым системой удостоверением:The following az vm identity assign command configures your Docker VM with a system-assigned identity:

az vm identity assign --resource-group myResourceGroup --name myDockerVM 

Выполните команду az vm show, чтобы присвоить переменной значение principalId (идентификатор субъекта-службы) для его использования на последующих шагах.Use the az vm show command to set a variable to the value of principalId (the service principal ID) of the VM's identity, to use in later steps.

spID=$(az vm show --resource-group myResourceGroup --name myDockerVM --query identity.principalId --out tsv)

Предоставление удостоверению доступа к реестру контейнеровGrant identity access to the container registry

Теперь настройте для удостоверения доступ к реестру контейнеров.Now configure the identity to access your container registry. Сначала получите идентификатор ресурса реестра, используя команду az acr show:First use the az acr show command to get the resource ID of the registry:

resourceID=$(az acr show --resource-group myResourceGroup --name myContainerRegistry --query id --output tsv)

Используйте команду az role assignment create, чтобы назначить удостоверению роль AcrPull.Use the az role assignment create command to assign the AcrPull role to the identity. Эта роль предоставляет реестру разрешения на извлечение.This role provides pull permissions to the registry. Чтобы предоставить разрешения и на извлечение, и на отправку, назначьте роль ACRPush.To provide both pull and push permissions, assign the ACRPush role.

az role assignment create --assignee $spID --scope $resourceID --role acrpull

Использование удостоверения для доступа к рееструUse the identity to access the registry

Установите SSH-подключение к виртуальной машине Docker, настроенной с удостоверением.SSH into the Docker virtual machine that's configured with the identity. Выполните следующие команды в Azure CLI, установленном на виртуальной машине.Run the following Azure CLI commands, using the Azure CLI installed on the VM.

Сначала Проверяйте подлинность Azure CLI с помощью команды AZ login, используя назначенное системой удостоверение на виртуальной машине.First, authenticate the Azure CLI with az login, using the system-assigned identity on the VM.

az login --identity

Затем выполните аутентификацию в реестре с помощью команды AZ контроля учетных записей.Then, authenticate to the registry with az acr login. При использовании этой команды CLI применяет маркер Active Directory, созданный при выполнении команды az login, чтобы эффективно выполнить аутентификацию вашего сеанса в реестре контейнеров.When you use this command, the CLI uses the Active Directory token created when you ran az login to seamlessly authenticate your session with the container registry. (В зависимости от настройки виртуальной машины может потребоваться выполнить эту команду и команды Docker с помощью sudo.)(Depending on your VM's setup, you might need to run this command and docker commands with sudo.)

az acr login --name myContainerRegistry

Отобразится сообщение Login succeeded.You should see a Login succeeded message. Затем вы можете выполнить команды docker, не предоставляя учетные данные.You can then run docker commands without providing credentials. Например, запустите docker pull, чтобы извлечь образ aci-helloworld:v1, указав имя сервера для входа в реестр.For example, run docker pull to pull the aci-helloworld:v1 image, specifying the login server name of your registry. Имя сервера входа состоит из имени реестра контейнеров (в нижнем регистре), за которым следует .azurecr.io, например mycontainerregistry.azurecr.io.The login server name consists of your container registry name (all lowercase) followed by .azurecr.io - for example, mycontainerregistry.azurecr.io.

docker pull mycontainerregistry.azurecr.io/aci-helloworld:v1

Примечание

Назначенные системой удостоверения управляемой службы можно использовать для взаимодействия с записи контроля доступа и службой приложений, которые могут использовать назначенные системой удостоверения управляемой службы.System-assigned managed service identities can be used to interact with ACRs and App Service can use system-assigned managed service identities. Однако их нельзя объединить, так как служба приложений не может использовать MSI для взаимодействия с записью контроля доступа.However, you cannot combine these, as App Service cannot use MSI to talk to an ACR. Единственным способом является включение администратора для записи контроля доступа и использование имени пользователя и пароля администратора.The only way is to enable admin on the ACR and use the admin username/password.

Дальнейшие шагиNext steps

Из этой статьи вы узнали, как использовать управляемые удостоверения в службе "Реестр контейнеров Azure" и выполнять следующие действия:In this article, you learned about using managed identities with Azure Container Registry and how to:

  • применение на виртуальной машине Azure удостоверения, назначаемого пользователем или системой;Enable a user-assigned or system-assigned identity in an Azure VM
  • предоставление удостоверению доступа к реестру контейнеров Azure;Grant the identity access to an Azure container registry
  • получение доступа к реестру и извлечение образа контейнера с помощью управляемого удостоверения.Use the managed identity to access the registry and pull a container image