Аутентификация в реестре контейнеров Azure
Существует несколько способов аутентификации в реестре контейнеров Azure, каждый из которых подходит для одного или нескольких сценариев использования реестра.
Рекомендуемые способы:
- проверка подлинности напрямую в реестре с персональным именем для входа;
- Приложения и оркестраторы контейнеров могут выполнять автоматическую проверку подлинности или проверку подлинности без головы с помощью субъекта-службы Microsoft Entra
Если вы используете реестр контейнеров в Службе Azure Kubernetes (AKS) или в другом кластере Kubernetes, см. статью Сценарии проверки подлинности с помощью Реестра контейнеров Azure из Kubernetes.
Варианты проверки подлинности
В приведенной ниже таблице перечислены доступные методы проверки подлинности и типичные сценарии их применения. Чтобы получить дополнительные сведения, воспользуйтесь предоставленными ссылками.
Способ | Процедура проверки подлинности | Сценарии | Управление доступом на основе ролей Azure (Azure RBAC) | Ограничения |
---|---|---|---|---|
Индивидуальное удостоверение AD | az acr login в Azure CLIConnect-AzContainerRegistry в Azure PowerShell |
Интерактивная отправка и извлечение разработчиками, тестировщиками | Да | Маркер AD должен обновляться каждые 3 часа |
Субъект-служба AD | docker login az acr login в Azure CLIConnect-AzContainerRegistry в Azure PowerShellПараметры входа в реестр через API или инструменты Получение секрета Kubernetes по запросу |
Автоматическая отправка из конвейера CI/CD Автоматическое извлечение в Azure или внешние службы |
Да | Срок действия пароля sp по умолчанию — 1 год |
Управляемое удостоверение для ресурсов Azure | docker login az acr login в Azure CLIConnect-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 CLIConnect-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, перейдите к реестру, выберите Ключи доступа в разделе Параметры, затем щелкните Включить в разделе Пользователь-администратор.
Вход с помощью альтернативного средства контейнера вместо 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.