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


Проверка подлинности с помощью реестра контейнеров 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 service principal  docker login

az acr login в Azure CLI

Connect-AzContainerRegistry в Azure PowerShell

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

Секрет pull для Kubernetes   
Автоматическая отправка без участия человека из потока CI/CD

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

az acr login в Azure CLI

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

Автономное подключение к службам 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, действует в течение 3 часов, поэтому мы рекомендуем всегда входить в реестр перед выполнением команды docker. Если срок действия токена истек, его можно обновить, повторно используя команду az acr login, чтобы повторно пройти проверку подлинности.

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

az acr login с использованием флага --expose-token

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

Для этого сценария сначала запустите az acr login с параметром --expose-token. Этот параметр предоставляет токен доступа вместо авторизации через CLI 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 loginhelm registry login командой для проверки подлинности в реестре.

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

Принципал службы

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

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

Список доступных ролей см. в обзоре разрешений и ролей реестра контейнеров 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, перейдя в реестр, выбрав ключи доступа в разделе SETTINGS, а затем включите в разделе "Администратор".

Включение пользовательского интерфейса администратора на портале 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".

Дальнейшие шаги