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

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

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

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

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

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

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

Connect-AzContainerRegistry в Azure PowerShell
Интерактивные push-уведомления, разработчики, тестировщики Да Маркер 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 из реестра в другом клиенте AAD Нет, только доступ по запросу Доступно только в кластере AKS
Администратор  docker login  Интерактивная отправка и извлечение для отдельного разработчика или тестировщика

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

az acr login в Azure CLI

Connect-AzContainerRegistry в Azure PowerShell

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

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

Отдельный вход с помощью Azure AD

При прямой работе с реестром, например для извлечения изображений на рабочий компьютер разработчика и отправки изображений с него в созданный реестр, проверка подлинности выполняется с индивидуальным удостоверением 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 для сохранения маркера Azure Active Directory в файл docker.config. После входа таким образом ваши учетные данные сохраняются в кэше, и при последующем выполнении команд docker в вашем сеансе не потребуется вводить имя пользователя или пароль.

Совет

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

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

Использование az acr login с удостоверениями Azure позволяет использовать Управление доступом на основе ролей в Azure (Azure RBAC). В некоторых случаях нужно входить в реестр с собственным удостоверением AAD или настроить для других пользователей 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 $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), в том числе назначить одному реестру несколько субъектов-служб. Применение нескольких субъектов-служб позволяет определить разные права доступа для приложений.

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

  • 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, перейдите к реестру, выберите Ключи доступа в разделе Параметры, затем щелкните Включить в разделе Пользователь-администратор.

Enable admin user UI in the Azure portal

Дальнейшие действия