Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте управляемое удостоверение для ресурсов Azure для проверки подлинности в реестре контейнеров Azure из другого ресурса Azure без необходимости предоставлять учетные данные реестра или управлять ими. Например, настройте назначаемое пользователем или назначаемое системой управляемое удостоверение на виртуальной машине Linux для доступа к образам контейнеров из реестра контейнеров, так же легко, как и в общедоступном реестре. Кроме того, настройте кластер службы Azure Kubernetes, чтобы использовать управляемое удостоверение для извлечения образов контейнеров из реестра контейнеров Azure для развертываний pod.
В этой статье вы узнаете больше об управляемых удостоверениях и о том, как:
- Включение удостоверения, назначаемого пользователем или назначаемого системой, на виртуальной машине Azure
- Предоставить доступ идентификатору к контейнерному реестру Azure
- Использовать управляемое удостоверение для доступа к реестру и извлечения образа контейнера
Чтобы создать ресурсы Azure, в этой статье требуется запустить Azure CLI версии 2.0.55 или более поздней. Чтобы узнать версию, выполните команду az --version. Если вам нужно установить или обновить, см. статью "Установка Azure CLI".
Чтобы настроить реестр контейнеров и отправить в него образ контейнера, необходимо также установить 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, пропустите этот шаг, чтобы создать виртуальную машину.
Разверните виртуальную машину Ubuntu Azure по умолчанию с помощью 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, чтобы назначить правильную роль идентификации. Необходимо назначить Container Registry Repository Reader (для реестров с поддержкой ABAC) или AcrPull (для реестров, отличных от ABAC). Это назначение роли предоставляет разрешения на загрузку данных в регистре.
Чтобы предоставить разрешения на вытягивание и отправку, назначьте либо роль Container Registry Repository Writer для реестров с поддержкой ABAC, либо роль AcrPush для реестров без поддержки ABAC.
Дополнительные сведения о разрешениях репозитория на основе Microsoft Entra ABAC см. в разделе "Разрешения репозитория на основе Microsoft Entra".
az role assignment create --assignee $spID --scope $resourceID \
--role "Container Registry Repository Reader" # For ABAC-enabled registries. Otherwise, use AcrPull for non-ABAC registries.
Использование удостоверения для доступа к реестру
SSH в виртуальную машину Docker, сконфигурированную с идентификатором. Выполните следующие команды Azure CLI с помощью Azure CLI, установленной на виртуальной машине.
Сначала выполните проверку подлинности в Azure CLI с помощью az login с помощью удостоверения, настроенного на виртуальной машине. Для <userID>этого замените идентификатор удостоверения, полученного на предыдущем шаге.
az login --identity --username <userID>
Затем аутентифицируйтесь в реестре с помощью az acr login. При использовании этой команды интерфейс командной строки использует маркер 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, чтобы назначить верную роль идентификатору. Необходимо назначить Container Registry Repository Reader (для реестров с поддержкой ABAC) или AcrPull (для реестров, отличных от ABAC). Это назначение роли предоставляет разрешения на извлечение в реестр.
Чтобы предоставить разрешения на получение и отправку, назначьте либо Container Registry Repository Writer роль для реестров с поддержкой ABAC, либо AcrPush роль для реестров, не поддерживающих ABAC.
Дополнительные сведения о разрешениях репозитория на основе Microsoft Entra ABAC см. в разделе "Разрешения репозитория на основе Microsoft Entra".
az role assignment create --assignee $spID --scope $resourceID \
--role "Container Registry Repository Reader" # For ABAC-enabled registries. Otherwise, use AcrPull for non-ABAC registries.
Использование удостоверения для доступа к реестру
Подключитесь к виртуальной машине Docker, настроенной с идентификатором. Выполните следующие команды Azure CLI с помощью Azure CLI, установленной на виртуальной машине.
Сначала выполните проверку подлинности Azure CLI с помощью az login, используя назначаемое системой удостоверение на виртуальной машине.
az login --identity
Затем выполните проверку подлинности в реестр с использованием команды az acr login. При использовании этой команды интерфейс командной строки использует маркер 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, используя управляемое удостоверение.