Использование kubelogin для проверки подлинности пользователей в Служба Azure Kubernetes

Подключаемый модуль kubelogin в Azure — это подключаемый модуль учетных данных, который реализует проверку подлинности Microsoft Entra. Подключаемый модуль kubelogin предлагает функции, недоступные в средстве командной строки kubectl.

кластеры Служба Azure Kubernetes (AKS), интегрированные с идентификатором Microsoft Entra и работающие под управлением Kubernetes версии 1.24 или более поздней, автоматически используют формат kubelogin.

В этой статье приведены общие сведения и примеры использования kubelogin для всех поддерживаемых методов проверки подлинности Microsoft Entra в AKS.

Ограничения

  • Можно включить не более 200 групп в утверждение веб-токена JSON (JWT) Microsoft Entra. Если у вас более 200 групп, рассмотрите возможность использования ролей приложения.
  • Группы, созданные в идентификаторе Microsoft Entra, включаются только по значению ObjectID , а не по отображаемого имени. Эта sAMAccountName команда доступна только для групп, синхронизированных из локальной среды Windows Server Active Directory.
  • В AKS метод проверки подлинности субъекта-службы работает только с управляемым идентификатором Microsoft Entra, а не с более ранней версией Azure Active Directory.
  • Метод проверки подлинности кода устройства не работает, если политика условного доступа Microsoft Entra устанавливается в клиенте Microsoft Entra. В этом сценарии используйте интерактивную проверку подлинности в веб-браузере.

Принцип действия проверки подлинности

Для большинства взаимодействий с kubelogin используется convert-kubeconfig подкоманда. В подкомандах используется файл kubeconfig, указанный в --kubeconfig переменной среды или в KUBECONFIG переменной среды, для преобразования окончательного файла kubeconfig в формат exec на основе указанного метода проверки подлинности.

Методы проверки подлинности, реализующие kubelogin, являются потоками предоставления маркеров Microsoft Entra OAuth 2.0. Следующие флаги параметров часто используются в подкомандах kubelogin. Как правило, эти флаги готовы использовать при получении файла kubeconfig из AKS.

  • --tenant-id: идентификатор клиента Microsoft Entra.
  • --client-id: идентификатор приложения общедоступного клиентского приложения. Это клиентское приложение используется только в коде устройства, интерактивном веб-браузере и методах входа oAuth 2.0 с учетными данными владельца ресурса (ROPC) (удостоверение рабочего процесса).
  • --server-id: идентификатор приложения веб-приложения или сервера ресурсов. Маркер выдан этому ресурсу.

Примечание.

В каждом методе проверки подлинности маркер не кэшируется в файловой системе.

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

В следующих разделах описываются поддерживаемые методы проверки подлинности и способы их использования:

  • Код устройства
  • Azure CLI
  • Интерактивный веб-браузер
  • Субъект-служба
  • Управляемое удостоверение
  • Удостоверение рабочей нагрузки

Код устройства

Код устройства — это метод проверки подлинности по умолчанию для convert-kubeconfig подкоманда. Параметр -l devicecode является необязательным. Этот метод проверки подлинности запрашивает код устройства для входа пользователя из сеанса браузера.

До появления подключаемых модулей kubelogin и exec метод проверки подлинности Azure в kubectl поддерживал только поток кода устройства. Он использовал более раннюю версию библиотеки, которая создает маркер с audience утверждением spn: с префиксом. Он не совместим с управляемым идентификатором Microsoft Entra AKS, который использует поток от имени (OBO). При запуске convert-kubeconfig подкоманда kubelogin удаляет spn: префикс из утверждения аудитории.

Если требования включают использование функциональных возможностей из предыдущих версий, добавьте --legacy этот аргумент. Если вы используете файл kubeconfig в более ранней версии кластера Azure Active Directory, kubelogin автоматически добавляет --legacy флаг.

В этом методе входа маркер доступа и маркер обновления кэшируются в каталоге ${HOME}/.kube/cache/kubelogin . Чтобы переопределить этот путь, включите --token-cache-dir параметр.

Если интегрированный кластер AkS Microsoft Entra использует Kubernetes 1.24 или более ранних версий, необходимо вручную преобразовать формат файла kubeconfig, выполнив следующие команды:

export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig

Выполните следующую команду kubectl, чтобы получить сведения о узле:

kubectl get nodes

Чтобы очистить кэшированные маркеры, выполните следующую команду:

kubelogin remove-tokens

Примечание.

Метод входа в код устройства не работает, если политика условного доступа настроена в клиенте Microsoft Entra. В этом сценарии используйте интерактивный метод веб-браузера.

Azure CLI

Метод проверки подлинности Azure CLI использует контекст входа, который azure CLI устанавливает для получения маркера доступа. Маркер выдается в том же клиенте Microsoft Entra, что и az login. kubelogin не записывает маркеры в файл кэша маркеров, так как они уже управляются Azure CLI.

Примечание.

Этот метод проверки подлинности работает только с управляемым идентификатором Microsoft Entra AKS.

В следующем примере показано, как использовать метод Azure CLI для проверки подлинности:

az login

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l azurecli

Выполните следующую команду kubectl, чтобы получить сведения о узле:

kubectl get nodes

Если каталог конфигурации Azure CLI находится за пределами каталога ${HOME} , используйте --azure-config-dir параметр с convert-kubeconfig подкоманда. Команда создает файл kubeconfig с настроенной переменной среды. Вы можете получить ту же конфигурацию, задав AZURE_CONFIG_DIR переменную среды этому каталогу при выполнении команды kubectl.

Интерактивный веб-браузер

Интерактивный метод проверки подлинности в веб-браузере автоматически открывает веб-браузер для входа пользователя. После проверки подлинности пользователя браузер перенаправляется на локальный веб-сервер с помощью проверенных учетных данных. Этот метод проверки подлинности соответствует политике условного доступа.

При проверке подлинности с помощью этого метода маркер доступа кэшируется в каталоге ${HOME}/.kube/cache/kubelogin . Этот путь можно переопределить с помощью --token-cache-dir параметра.

Маркер носителя

В следующем примере показано, как использовать маркер носителя с интерактивным потоком веб-браузера:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l interactive

Выполните следующую команду kubectl, чтобы получить сведения о узле:

kubectl get nodes

Маркер подтверждения владения

В следующем примере показано, как использовать маркер проверки владения (PoP) с интерактивным потоком веб-браузера:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l interactive --pop-enabled --pop-claims "u=/ARM/ID/OF/CLUSTER"

Выполните следующую команду kubectl, чтобы получить сведения о узле:

kubectl get nodes

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

Этот метод проверки подлинности использует субъект-службу для входа пользователя. Вы можете предоставить учетные данные, задав переменную среды или используя учетные данные в аргументе командной строки. Поддерживаемые учетные данные, которые можно использовать, являются паролем или сертификатом клиента PFX.

Прежде чем использовать этот метод, рассмотрите следующие ограничения:

  • Этот метод работает только с управляемым идентификатором Microsoft Entra.
  • Субъект-служба может быть членом не более 200 групп Microsoft Entra.

Переменные среды

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

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l spn

export AAD_SERVICE_PRINCIPAL_CLIENT_ID=<Service Principal Name (SPN) client ID>
export AAD_SERVICE_PRINCIPAL_CLIENT_SECRET=<SPN secret>

Выполните следующую команду kubectl, чтобы получить сведения о узле:

kubectl get nodes

Затем запустите эту команду:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l spn

export AZURE_CLIENT_ID=<SPN client ID>
export AZURE_CLIENT_SECRET=<SPN secret>

Выполните следующую команду kubectl, чтобы получить сведения о узле:

kubectl get nodes

Аргумент командной строки

В следующем примере показано, как настроить секрет клиента в аргументе командной строки:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l spn --client-id <SPN client ID> --client-secret <SPN client secret>

Выполните следующую команду kubectl, чтобы получить сведения о узле:

kubectl get nodes

Предупреждение

Метод аргумента командной строки сохраняет секрет в файле kubeconfig.

Сертификат клиента

В следующем примере показано, как настроить секрет клиента с помощью сертификата клиента:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l spn

export AAD_SERVICE_PRINCIPAL_CLIENT_ID=<SPN client ID>
export AAD_SERVICE_PRINCIPAL_CLIENT_CERTIFICATE=/path/to/cert.pfx
export AAD_SERVICE_PRINCIPAL_CLIENT_CERTIFICATE_PASSWORD=<PFX password>

Выполните следующую команду kubectl, чтобы получить сведения о узле:

kubectl get nodes

Затем запустите эту команду:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l spn

export AZURE_CLIENT_ID=<SPN client ID>
export AZURE_CLIENT_CERTIFICATE_PATH=/path/to/cert.pfx
export AZURE_CLIENT_CERTIFICATE_PASSWORD=<PFX password>

Выполните следующую команду kubectl, чтобы получить сведения о узле:

kubectl get nodes

Переменные маркера и среды PoP

В следующем примере показано, как настроить токен PoP, использующий секрет клиента, который он получает из переменных среды:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l spn --pop-enabled --pop-claims "u=/ARM/ID/OF/CLUSTER"

export AAD_SERVICE_PRINCIPAL_CLIENT_ID=<SPN client ID>
export AAD_SERVICE_PRINCIPAL_CLIENT_SECRET=<SPN secret>

Выполните следующую команду kubectl, чтобы получить сведения о узле:

kubectl get nodes

Управляемое удостоверение

Используйте метод проверки подлинности управляемого удостоверения для приложений, которые подключаются к ресурсам, поддерживающим проверку подлинности Microsoft Entra. Примеры включают доступ к ресурсам Azure, таким как виртуальная машина Azure, масштабируемый набор виртуальных машин или Azure Cloud Shell.

Управляемое удостоверение по умолчанию

В следующем примере показано, как использовать управляемое удостоверение по умолчанию:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l msi

Выполните следующую команду kubectl, чтобы получить сведения о узле:

kubectl get nodes

Определенное удостоверение

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

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l msi --client-id <msi-client-id>

Выполните следующую команду kubectl, чтобы получить сведения о узле:

kubectl get nodes

Удостоверение рабочей нагрузки

Метод проверки подлинности удостоверений рабочей нагрузки использует учетные данные удостоверения, федеративные с Microsoft Entra, для проверки подлинности доступа к кластерам AKS. Этот метод использует встроенную проверку подлинности Microsoft Entra. Он работает, задав следующие переменные среды:

  • AZURE_CLIENT_ID: идентификатор приложения Microsoft Entra, федеративный с удостоверением рабочей нагрузки.
  • AZURE_TENANT_ID: идентификатор клиента Microsoft Entra.
  • AZURE_FEDERATED_TOKEN_FILE: файл, содержащий подписанное утверждение удостоверения рабочей нагрузки, например маркер проецируемого учетной записи службы Kubernetes (JWT).
  • AZURE_AUTHORITY_HOST: базовый URL-адрес центра Microsoft Entra. Например, https://login.microsoftonline.com/.

Удостоверение рабочей нагрузки можно использовать для доступа к кластерам Kubernetes из систем CI/CD, таких как GitHub или ArgoCD, без хранения учетных данных субъекта-службы во внешних системах. Сведения о настройке федерации OpenID Подключение (OIDC) из GitHub см. в примере федерации OIDC.

В следующем примере показано, как использовать удостоверение рабочей нагрузки:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l workloadidentity

Выполните следующую команду kubectl, чтобы получить сведения о узле:

kubectl get nodes

Использование kubelogin с AKS

AKS использует пару сторонних приложений Microsoft Entra. Эти идентификаторы приложений одинаковы во всех средах.

Идентификатор приложения сервера Microsoft Entra AKS, который использует 6dae42f8-4368-4678-94ff-3960e28e3630серверная сторона. Маркер доступа, который обращается к кластерам AKS, должен быть выдан для этого приложения. В большинстве методов проверки подлинности kubelogin необходимо использовать --server-id с kubelogin get-token.

Идентификатор клиентского приложения Microsoft Entra AKS, который kubelogin использует для проверки подлинности общедоступного клиента от имени пользователя 80faf920-1908-4b52-b5ef-a8e7bedfc67a. Идентификатор клиентского приложения используется в коде устройства и методах интерактивной проверки подлинности в веб-браузере.