Поделиться через


Аутентификация в реестре контейнеров Azure

Существует несколько способов аутентификации в реестре контейнеров Azure, каждый из которых подходит для одного или нескольких сценариев использования реестра.

Рекомендуемые способы:

  • проверка подлинности напрямую в реестре с персональным именем для входа;
  • Приложения и оркестраторы контейнеров могут выполнять автоматическую проверку подлинности или проверку подлинности без головы с помощью субъекта-службы Microsoft Entra

Если вы используете реестр контейнеров в Службе Azure Kubernetes (AKS) или в другом кластере Kubernetes, см. статью Сценарии проверки подлинности с помощью Реестра контейнеров Azure из Kubernetes.

Варианты проверки подлинности

В приведенной ниже таблице перечислены доступные методы проверки подлинности и типичные сценарии их применения. Чтобы получить дополнительные сведения, воспользуйтесь предоставленными ссылками.

Способ Процедура проверки подлинности Сценарии Управление доступом на основе ролей Azure (Azure RBAC) Ограничения
Индивидуальное удостоверение AD  az acr login в Azure CLI

Connect-AzContainerRegistry в Azure PowerShell
Интерактивная отправка и извлечение разработчиками, тестировщиками Да Маркер AD должен обновляться каждые 3 часа
Субъект-служба AD  docker login

az acr login в Azure CLI

Connect-AzContainerRegistry в Azure PowerShell

Параметры входа в реестр через API или инструменты

Получение секрета Kubernetes по запросу   
Автоматическая отправка из конвейера CI/CD

Автоматическое извлечение в Azure или внешние службы
Да Срок действия пароля sp по умолчанию — 1 год
Управляемое удостоверение для ресурсов Azure  docker login

az acr login в Azure CLI

Connect-AzContainerRegistry в Azure PowerShell
Автоматическая отправка из конвейера Azure CI/CD

Автоматическое извлечение в службы Azure

Да Используйте только из служб Azure, которые поддерживают управляемые удостоверения для ресурсов Azure
Управляемое удостоверение кластера AKS  Присоединение реестра при создании или обновлении кластера AKS Автоматическое извлечение в кластер AKS в той же или другой подписке Нет, доступ на вытягивание только Доступно только в кластере AKS

Невозможно использовать для межтенантной проверки подлинности
Субъект-служба кластера AKS  Включение при создании или обновлении кластера AKS Автоматическое извлечение в кластер AKS из реестра в другом клиенте AD Нет, доступ на вытягивание только Доступно только в кластере AKS
Пользователь администратора  docker login  Интерактивная отправка и извлечение для отдельного разработчика или тестировщика

Развертывание образа на портале из реестра в Службу приложений Azure или в Экземпляры контейнеров Azure
Нет, всегда вытягивание и доступ на отправку Отдельная учетная запись для каждого реестра, не рекомендуется для нескольких пользователей
Маркер доступа с областью действия репозитория  docker login

az acr login в Azure CLI

Connect-AzContainerRegistry в Azure PowerShell

Получение секрета Kubernetes по запросу 
Интерактивная отправка и извлечение в репозитории для отдельного разработчика или тестировщика

Автоматическое извлечение из репозитория по отдельной системе или внешнему устройству
Да В настоящее время не интегрирован с удостоверением AD

Отдельный вход с идентификатором Microsoft Entra

При прямой работе с реестром, например для извлечения изображений на рабочий компьютер разработчика и отправки изображений с него в созданный реестр, проверка подлинности выполняется с индивидуальным удостоверением Azure. Войдите в Azure CLI с помощью команды az login, а затем выполните команду az acr login:

az login
az acr login --name <acrName>

При входе с помощью команды az acr login интерфейс командной строки использует маркер, созданный при выполнении команды az login, чтобы прозрачно выполнить аутентификацию вашего сеанса в реестре. Чтобы завершить поток проверки подлинности, в среде должны быть установлены и запущены Docker CLI и управляющая программа Docker. az acr login использует клиент Docker для задания маркера Microsoft Entra в docker.config файле. После входа таким образом ваши учетные данные сохраняются в кэше, и при последующем выполнении команд docker в вашем сеансе не потребуется вводить имя пользователя или пароль.

Совет

Кроме того, применяйте az acr login для проверки подлинности отдельного удостоверения, если хотите передать или извлечь артефакты реестра, отличные от образов Docker, например артефакты OCI.

az acr login может использовать маркер в течение трех часов. Поэтому мы рекомендуем всегда входить в реестр перед выполнением команды docker. Если срок действия маркера истекает, его можно обновить его с помощью команды az acr login, чтобы повторно пройти аутентификацию.

Использование az acr login с удостоверениями Azure позволяет использовать Управление доступом на основе ролей в Azure (Azure RBAC). В некоторых сценариях может потребоваться войти в реестр с собственным удостоверением в идентификаторе Microsoft Entra ID или настроить других пользователей Azure с определенными ролями и разрешениями Azure. Для сценариев с использованием нескольких служб, а также при организации рабочей группы или рабочего процесса разработки, которые делают неудобным управление доступом для отдельных пользователей, вы можете использовать для входа в систему управляемое удостоверение для ресурсов Azure.

az acr login с атрибутом --expose-token

В некоторых случаях нужно проходить проверку подлинности с помощью команды az acr login в среде, где нет управляющей программы Docker. Предположим, что вы хотите выполнять скрипт с командой az acr login в оболочке Azure Cloud Shell, которая предоставляет интерфейс командной строки Docker, но не использует управляющую программу Docker.

В этом сценарии следует сначала выполнять команду az acr login с атрибутом --expose-token. С этим параметром команда предоставляет маркер доступа вместо стандартного входа через интерфейс командной строки Docker.

az acr login --name <acrName> --expose-token

Маркер доступа предоставляется в выходных данных, которые приведены здесь в сокращенном виде:

{
  "accessToken": "eyJhbGciOiJSUzI1NiIs[...]24V7wA",
  "loginServer": "myregistry.azurecr.io"
}

Для проверки подлинности в реестре рекомендуется хранить учетные данные маркера в надежном расположении и соблюдать все рекомендации по управлению учетными данными для команды docker login. Например, сохраните значение маркера в переменной среды:

TOKEN=$(az acr login --name <acrName> --expose-token --output tsv --query accessToken)

Затем выполните команду docker login, передав ей имя пользователя 00000000-0000-0000-0000-000000000000 и маркер доступа в качестве пароля:

docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN

Аналогичным образом можно использовать маркер, возвращаемый az acr login, с командой helm registry login для проверки подлинности в реестре:

echo $TOKEN | helm registry login myregistry.azurecr.io \
            --username 00000000-0000-0000-0000-000000000000 \
            --password-stdin

Субъект-служба

Если назначить субъект-службу для реестра, приложение или служба сможет использовать его для автоматической аутентификации. Использование субъектов-служб позволяет применять механизм управления доступом на основе ролей Azure (Azure RBAC), в том числе назначить одному реестру несколько субъектов-служб. Применение нескольких субъектов-служб позволяет определить разные права доступа для приложений.

Маркер проверки подлинности ACR создается при входе в ACR и обновляется при последующих операциях. Срок жизни для этого токена составляет 3 часа.

Доступные роли для реестра контейнеров включают:

  • AcrPull: извлечение

  • AcrPush: извлечение и отправка

  • Владелец: извлечение, отправка и назначение ролей другим пользователям.

Полный список ролей см. в статье, посвященной ролям и разрешениям реестра контейнеров Azure.

Сведения о том, как с помощью скрипта CLI создать субъект-службу для проверки подлинности в реестре контейнеров Azure, а также дополнительные рекомендации вы найдете в статье Аутентификация в Реестре контейнеров Azure с помощью субъектов-служб.

Учетная запись администратора

Каждый реестр контейнеров содержит учетную запись администратора, которая отключена по умолчанию. Вы можете включить учетную запись администратора и управлять ее учетными данными на портале Azure или с помощью Azure CLI, Azure PowerShell либо других средств Azure. Учетная запись администратора предоставляет полные разрешения на доступ к реестру.

В отдельных сценариях для развертывания образа из реестра контейнеров в некоторых службах Azure требуется учетная запись администратора. Например, учетная запись администратора необходима при использовании портала Azure для развертывания образа контейнера из реестра напрямую в Экземпляры контейнеров Azure или в Веб-приложение для контейнеров Azure.

Внимание

Учетная запись администратора предоставляет доступ к реестру одному пользователю. Она предназначена, главным образом, для тестирования. Мы не рекомендуем предоставлять учетные данные администратора нескольким пользователям для совместного использования. Все пользователи, выполняющие аутентификацию с учетной записью администратора, отображаются как один пользователь с возможностью извлечения данных из реестра и отправки данных в него. Изменив или отключив эту учетную запись, вы ограничите доступ к реестру для пользователей, использующих эти учетные данные. Для пользователей и субъектов-служб в сценариях автоматического входа рекомендуется использовать отдельные удостоверения.

Учетной записи администратора предоставляются два пароля, каждый из которых можно создать повторно. Новые пароли, созданные для учетных записей администраторов, доступны сразу же. Повторное создание паролей для учетных записей администраторов займет 60 секунд, прежде чем они будут реплицированы и станут доступными. Благодаря этому вы можете подключаться к реестру, используя один пароль, пока второй создается повторно. Если учетная запись администратора включена, вы можете указать в команде docker login имя пользователя и пароль, когда будет предложено выполнить базовую аутентификацию в реестре. Например:

docker login myregistry.azurecr.io

Современные рекомендации по управлению учетными данными см. в справочных материалах по команде docker login.

Чтобы включить учетную запись администратора для существующего реестра, можно использовать параметр --admin-enabled в команде az acr update в Azure CLI.

az acr update -n <acrName> --admin-enabled true

Чтобы включить учетную запись администратора на портале Azure, перейдите к реестру, выберите Ключи доступа в разделе Параметры, затем щелкните Включить в разделе Пользователь-администратор.

Включение учетной записи администратора на портале Azure

Вход с помощью альтернативного средства контейнера вместо Docker

В некоторых сценариях необходимо использовать альтернативные инструменты контейнера, например podman вместо общего средства dockerконтейнера. Например: Docker больше недоступен в RHEL 8 и 9, поэтому необходимо переключить средство контейнера.

Для команд задано docker az acr login средство контейнера по умолчанию. Если средство контейнера по умолчанию не задано, и docker команда отсутствует в вашей среде, появится следующая ошибка:

az acr login --name <acrName>
2024-03-29 07:30:10.014426 An error occurred: DOCKER_COMMAND_ERROR
Please verify if Docker client is installed and running.

Чтобы изменить средство контейнера по умолчанию, используемое az acr login командой, можно задать переменную DOCKER_COMMANDсреды. Рассмотрим пример.

DOCKER_COMMAND=podman \
az acr login --name <acrName>

Примечание.

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

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