Аутентификация в реестре контейнеров 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 на виртуальной машине
Чтобы запустить контейнеры Docker на виртуальной машине, необходимо установить Docker. В этом разделе приведены инструкции по установке Docker на виртуальной машине Ubuntu, чтобы убедиться, что виртуальная машина готова к извлечению и запуску образов контейнеров из Реестр контейнеров Azure.
После запуска виртуальной машины установите 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
Настройка виртуальной машины с управляемым системой удостоверением
Управляемое удостоверение, назначаемое системой, — это функция Azure, которая позволяет виртуальной машине автоматически управлять собственным удостоверением в Azure Active Directory. В этом разделе объясняется, как настроить виртуальную машину с удостоверением, назначаемого системой, для безопасного доступа к Реестр контейнеров Azure.
Настройка виртуальной машины с управляемым системой удостоверением
Следующая команда 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;
- получение доступа к реестру и извлечение образа контейнера с помощью управляемого удостоверения.
- Дополнительные сведения см. в статье Использование управляемых удостоверений в Службе приложений и Функциях Azure.
- Узнайте, как использовать назначаемые системой или назначаемые пользователем управляемые удостоверения со Службой приложений и Реестром контейнеров Azure.
- Узнайте о развертывании образа контейнера из Реестра контейнеров Azure с использованием управляемого удостоверения.