Аутентификация в реестре контейнеров Azure с помощью управляемого удостоверения Azure

Проходите аутентификацию в реестре контейнеров Azure из другого ресурса Azure с помощью управляемого удостоверения для ресурсов Azure, не предоставляя учетные данные реестра и не управляя ими. Например, настройте управляемое удостоверение, назначаемое пользователем или системой, на виртуальной машине Linux, чтобы получать доступ к образам контейнера из реестра контейнеров так же просто, как при использовании общедоступного реестра. Кроме того, можно настроить кластер Службы Azure Kubernetes, чтобы с помощью имеющегося в нем управляемого удостоверения извлекать образы контейнеров из Реестра контейнеров Azure для развертываний модулей pod.

В этой статье вы ознакомитесь с управляемыми удостоверениями и узнаете, как выполнять следующие действия:

  • применение на виртуальной машине Azure удостоверения, назначаемого пользователем или системой;
  • предоставление удостоверению доступа к реестру контейнеров Azure;
  • получение доступа к реестру и извлечение образа контейнера с помощью управляемого удостоверения.

Для создания ресурсов Azure с помощью инструкций из этой статьи требуется Azure CLI версии 2.0.55 или более поздней версии. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Чтобы настроить реестр контейнеров и отправить образ контейнера в него, необходимо также локально установить модуль Docker. Docker предоставляет пакеты, которые позволяют быстро настроить Docker в системе под управлением macOS, Windows или Linux.

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

См. дополнительные сведения об управляемых удостоверениях для ресурсов Azure.

После настройки выбранных ресурсов Azure с помощью управляемого удостоверения предоставьте последнему необходимый доступ к другому ресурсу (как и любому другому субъекту безопасности). Например, назначьте управляемому удостоверению роль с разрешениями на извлечение, отправку и извлечение или другими разрешениями в частном реестре в Azure. (Полный список ролей реестра см. в статье Роли и разрешения реестра контейнеров Azure.) Вы можете предоставить удостоверению доступ к одному или нескольким ресурсам.

Затем используйте удостоверение для проверки подлинности в любой службе, поддерживающей проверку подлинности Microsoft Entra, без каких-либо учетных данных в коде. Выберите метод проверки подлинности с помощью управляемого удостоверения (в зависимости от используемого вами сценария). Чтобы получить доступ к реестру контейнеров Azure с виртуальной машины, используя удостоверение, выполните аутентификацию с помощью Azure Resource Manager.

Создание реестра контейнеров

Если у вас еще нет реестра контейнеров Azure, создайте его и отправьте в него пример образа контейнера. Необходимые инструкции см. в разделе Краткое руководство. Создание закрытого реестра контейнеров с помощью Azure CLI.

В этой статье предполагается, что у вас есть образ контейнера aci-helloworld:v1, хранящийся в реестре. В примерах используется реестр с именем myContainerRegistry. На последующих шагах замените эти значения именами вашего реестра и образа.

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

Создайте виртуальную машину Ubuntu с поддержкой Docker. Необходимо также установить Azure CLI на виртуальной машине. Если у вас уже есть виртуальная машина Azure, пропустите этот шаг создания виртуальной машины.

Разверните виртуальную машину Azure Ubuntu по умолчанию с помощью команды az vm create. В следующем примере создается виртуальная машина с именем myDockerVM в имеющейся группе ресурсов myResourceGroup.

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

Создание виртуальной машины может занять несколько минут. После выполнения команды запишите значение publicIpAddress, отображаемое Azure CLI. Этот адрес используется для установления SSH-подключений к виртуальной машине.

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

После запуска виртуальной машины установите SSH-подключение к ней. Замените publicIpAddress общедоступным IP-адресом виртуальной машины.

ssh azureuser@publicIpAddress

Выполните следующую команду, чтобы установить Docker на виртуальную машину:

sudo apt update
sudo apt install docker.io -y

После установки выполните следующую команду, чтобы проверить правильность работы Docker на виртуальной машине:

sudo docker run -it mcr.microsoft.com/hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]

Установка расширения для Azure CLI

Выполните действия, описанные в статье Установка Azure CLI с помощью apt, чтобы установить Azure CLI на виртуальной машине Ubuntu. Для этой статьи установите версию 2.0.55 или более позднюю версию.

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

Пример 1. Доступ с помощью удостоверения, назначаемого пользователем

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

Создайте в подписке удостоверение, используя команду az identity create. Вы можете использовать ту же группу ресурсов, что и ранее для создания реестра контейнеров или виртуальной машины, либо другую.

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

Чтобы настроить удостоверение на следующих шагах, выполните команду az identity show для сохранения идентификатора ресурса и идентификатора субъекта-службы удостоверения в переменных.

# 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)

Так как идентификатор удостоверения потребуется вам в дальнейшем при входе в интерфейс командной строки с вашей виртуальной машины, отобразите это значение:

echo $userID

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

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

Настройка виртуальной машины с удостоверением

Следующая команда az vm identity assign настраивает виртуальную машину Docker с назначаемым пользователем удостоверением:

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

Предоставление удостоверению доступа к реестру контейнеров

Теперь настройте для удостоверения доступ к реестру контейнеров. Сначала получите идентификатор ресурса реестра, используя команду az acr show:

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

Используйте команду az role assignment create, чтобы назначить удостоверению роль AcrPull. Эта роль предоставляет реестру разрешения на извлечение. Чтобы предоставить разрешения и на извлечение, и на отправку, назначьте роль ACRPush.

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

Использование удостоверения для доступа к реестру

Установите SSH-подключение к виртуальной машине Docker, настроенной с удостоверением. Выполните следующие команды в Azure CLI, установленном на виртуальной машине.

Сначала выполните проверку подлинности в Azure CLI с помощью команды az login, используя удостоверение, которое вы настроили на виртуальной машине. Для <userID> замените идентификатор удостоверения идентификатором, полученным на предыдущем шаге.

az login --identity --username <userID>

Затем выполните проверку подлинности в реестре, выполнив команду az acr login. При использовании этой команды CLI применяет маркер Active Directory, созданный при выполнении команды az login, чтобы эффективно выполнить аутентификацию вашего сеанса в реестре контейнеров. (В зависимости от настройки виртуальной машины может потребоваться выполнить эту команду и команды Docker с помощью sudo.)

az acr login --name myContainerRegistry

Отобразится сообщение Login succeeded. Затем вы можете выполнить команды docker, не предоставляя учетные данные. Например, запустите docker pull, чтобы извлечь образ aci-helloworld:v1, указав имя сервера для входа в реестр. Имя сервера входа состоит из имени реестра контейнеров (в нижнем регистре), за которым следует .azurecr.io, например mycontainerregistry.azurecr.io.

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

Пример 2. Доступ с помощью удостоверения, назначаемого системой

Настройка виртуальной машины с управляемым системой удостоверением

Следующая команда az vm identity assign настраивает виртуальную машину Docker с назначаемым системой удостоверением:

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

Выполните команду az vm show, чтобы присвоить переменной значение principalId (идентификатор субъекта-службы) для его использования на последующих шагах.

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

Предоставление удостоверению доступа к реестру контейнеров

Теперь настройте для удостоверения доступ к реестру контейнеров. Сначала получите идентификатор ресурса реестра, используя команду az acr show:

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

Используйте команду az role assignment create, чтобы назначить удостоверению роль AcrPull. Эта роль предоставляет реестру разрешения на извлечение. Чтобы предоставить разрешения и на извлечение, и на отправку, назначьте роль ACRPush.

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

Использование удостоверения для доступа к реестру

Установите SSH-подключение к виртуальной машине Docker, настроенной с удостоверением. Выполните следующие команды в Azure CLI, установленном на виртуальной машине.

Сначала выполните проверку подлинности в Azure CLI с помощью команды az login, используя назначенное системой удостоверение на виртуальной машине.

az login --identity

Затем выполните проверку подлинности в реестре, выполнив команду az acr login. При использовании этой команды CLI применяет маркер Active Directory, созданный при выполнении команды az login, чтобы эффективно выполнить аутентификацию вашего сеанса в реестре контейнеров. (В зависимости от настройки виртуальной машины может потребоваться выполнить эту команду и команды Docker с помощью sudo.)

az acr login --name myContainerRegistry

Отобразится сообщение Login succeeded. Затем вы можете выполнить команды docker, не предоставляя учетные данные. Например, запустите docker pull, чтобы извлечь образ aci-helloworld:v1, указав имя сервера для входа в реестр. Имя сервера входа состоит из имени реестра контейнеров (в нижнем регистре), за которым следует .azurecr.io, например mycontainerregistry.azurecr.io.

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

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

Из этой статьи вы узнали, как использовать управляемые удостоверения в службе "Реестр контейнеров Azure" и выполнять следующие действия:

  • применение на виртуальной машине Azure удостоверения, назначаемого пользователем или системой;
  • предоставление удостоверению доступа к реестру контейнеров Azure;
  • получение доступа к реестру и извлечение образа контейнера с помощью управляемого удостоверения.