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