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


Используйте идентификацию рабочих нагрузок в Microsoft Entra с Azure Kubernetes Service (AKS)

Рабочие нагрузки, развернутые в кластере Служба Azure Kubernetes (AKS), требуют учетных данных приложения Microsoft Entra или управляемых удостоверений для доступа к защищенным ресурсам Microsoft Entra, таким как Azure Key Vault и Microsoft Graph. Идентификация рабочей нагрузки Microsoft Entra интегрируется с возможностями, собственными для Kubernetes, для федерации с внешними поставщиками удостоверений.

Идентификатор рабочей нагрузки Microsoft Entra использует проекцию тома токена учетной записи службы (т. е. учетную запись службы), чтобы поды могли использовать удостоверение Kubernetes. Токен Kubernetes выдан, и федерация OIDC позволяет приложениям Kubernetes безопасно получать доступ к ресурсам Azure с помощью идентификатора Microsoft Entra ID, при этом доступ основан на аннотированных учетных записях службы.

Идентификатор рабочей нагрузки Microsoft Entra работает особенно хорошо с клиентскими библиотеками Identify Azure или с коллекцией библиотек проверки подлинности Microsoft (MSAL), вместе с регистрацией приложений. Рабочая нагрузка может использовать любую из этих библиотек, чтобы легко пройти проверку подлинности и получить доступ к облачным ресурсам Azure.

Эта статья поможет вам понять идентификатор рабочей нагрузки Microsoft Entra, а также рассмотрение вариантов, доступных для планирования стратегии проекта и потенциальной миграции с удостоверения, управляемого pod в Microsoft Entra.

Примечание.

Вы можете использовать Соединитель служб, чтобы помочь вам автоматически настроить некоторые шаги. См. также: Что такое соединитель служб?

Зависимости

  • AKS поддерживает Workload ID Microsoft Entra на версии 1.22 и выше.
  • Azure CLI версии 2.47.0 или более поздней. Запустите az --version, чтобы определить версию и запустите az upgrade для обновления версии. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Клиентские библиотеки идентификации Azure

В клиентских библиотеках удостоверений Azure выберите один из следующих подходов:

  • Используйте DefaultAzureCredential, который пытается использовать WorkloadIdentityCredential.
  • Создайте экземпляр ChainedTokenCredential, который включает в себя WorkloadIdentityCredential.
  • Используйте WorkloadIdentityCredential напрямую.

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

Экосистема Библиотека Минимальная версия
.NET Azure.Identity 1.9.0
C++ azure-identity-cpp 1.6.0
Иди azidentity 1.3.0
Java azure-identity 1.9.0
Node.js @azure/identity 3.2.0
Python azure-identity 1.13.0

В следующих примерах DefaultAzureCredential кода используется. Этот тип учетных данных использует переменные среды, вводимые изменяющим webhook Azure Workload Identity, для аутентификации в Azure Key Vault. Чтобы просмотреть примеры с помощью одного из других подходов, обратитесь к ссылкам клиентской библиотеки для конкретной экосистемы выше.

using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

string keyVaultUrl = Environment.GetEnvironmentVariable("KEYVAULT_URL");
string secretName = Environment.GetEnvironmentVariable("SECRET_NAME");

var client = new SecretClient(
    new Uri(keyVaultUrl),
    new DefaultAzureCredential());

KeyVaultSecret secret = await client.GetSecretAsync(secretName);

Библиотека проверки подлинности Майкрософт (MSAL)

Следующие клиентские библиотеки являются минимальной версией.

Экосистема Библиотека Изображение Пример Имеет Windows
.NET Библиотека проверки подлинности Майкрософт для dotnet ghcr.io/azure/azure-workload-identity/msal-net:latest Ссылка Да
Иди Библиотека аутентификации Microsoft для Go ghcr.io/azure/azure-workload-identity/msal-go:latest Ссылка Да
Java Библиотека проверки подлинности Майкрософт для java ghcr.io/azure/azure-workload-identity/msal-java:latest Ссылка Нет
JavaScript Библиотека проверки подлинности Майкрософт для js ghcr.io/azure/azure-workload-identity/msal-node:latest Ссылка Нет
Python Библиотека проверки подлинности Майкрософт для Python ghcr.io/azure/azure-workload-identity/msal-python:latest Ссылка Нет

Ограничения

  • Для каждого управляемого удостоверения можно иметь не более 20 федеративных учетных данных.
  • Для распространения учетных данных федеративного удостоверения после первоначального добавления потребуется несколько секунд.
  • Виртуальные узлы, добавленные на основе проекта открытый код Virtual Kubelet, не поддерживаются.
  • Создание учетных данных федеративного удостоверения не поддерживается для управляемых удостоверений, назначаемых пользователем, в этих регионах.

Принцип работы

В этой модели безопасности кластер AKS выступает в качестве издателя маркеров. Идентификатор Microsoft Entra использует OpenID Connect для обнаружения открытых ключей подписывания и проверки подлинности токена учетной записи службы перед обменом его на токен Microsoft Entra. Рабочая нагрузка может обменять токен служебной учётной записи, проецируемый на его объём, на токен Microsoft Entra с помощью клиентской библиотеки Microsoft Identity или библиотеки аутентификации Microsoft (MSAL).

Схема модели безопасности идентичности рабочих нагрузок в AKS.

В следующей таблице описаны необходимые конечные точки издателя OIDC для идентификатора рабочей нагрузки Microsoft Entra.

Конечная точка Описание
{IssuerURL}/.well-known/openid-configuration Также известен как документ обнаружения OIDC. Эта запись содержит метаданные о конфигурациях эмитента.
{IssuerURL}/openid/v1/jwks Здесь содержатся открытые ключи подписывания, которые Microsoft Entra ID использует для проверки подлинности токена учетной записи службы.

На следующей схеме показана последовательность проверки подлинности с помощью OpenID Connect.

Схема последовательности аутентификации по удостоверениям OIDC для рабочей нагрузки в AKS.

Автоматическая смена сертификата вебхука

Аналогично другим надстройкам вебхуков, сертификат обновляется операцией автоматической смены сертификата в кластере.

Метки и аннотации учетной записи службы

Microsoft Entra Workload ID поддерживает следующие сопоставления, связанные с сервисной учетной записью:

  • Один к одному, где учетная запись службы ссылается на объект Microsoft Entra.
  • Многие к одному, где несколько учетных записей служб ссылались на один и тот же объект Microsoft Entra.
  • Один ко многим, где учетная запись службы ссылается на несколько объектов Microsoft Entra путем изменения заметки идентификатора клиента. Дополнительные сведения см. в статье "Как объединить несколько удостоверений с учетной записью Kubernetes".

Примечание.

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

Если вы использовали управляемое пользователем удостоверение Microsoft Entra pod, то думайте о учетной записи службы как субъекте безопасности Azure, за исключением того, что учетная запись службы является частью основного API Kubernetes, а не пользовательского определения ресурсов (CRD). В следующих разделах описан список доступных меток и аннотаций, которые можно использовать для настройки поведения при получении токена доступа Microsoft Entra вместо токена учетной записи службы.

Аннотации учетной записи службы

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

Аннотация Описание По умолчанию
azure.workload.identity/client-id Представляет приложение Microsoft Entra
Идентификатор клиента, используемый с модулем pod.
azure.workload.identity/tenant-id Представляет идентификатор клиента Azure, в котором
Приложение Microsoft Entra зарегистрировано.
извлеченная переменная среды AZURE_TENANT_ID
из azure-wi-webhook-config ConfigMap.
azure.workload.identity/service-account-token-expiration Представляет поле expirationSeconds
проецируемый маркер учетной записи службы. Это необязательное поле, которое вы настраиваете для предотвращения простоя
вызваны ошибками при обновлении токена учетной записи службы. Срок действия токена служебной учетной записи Kubernetes не коррелирует с токенами Microsoft Entra. Срок действия маркеров Microsoft Entra истекает через 24 часа после их выдачи.
3600
Поддерживаемый диапазон — 3600–86400.

Метки Pod

Примечание.

Для приложений, использующих удостоверение рабочей нагрузки, необходимо добавить метку azure.workload.identity/use: "true" в спецификацию pod для AKS, чтобы перевести удостоверение рабочей нагрузки в сценарий fail close и обеспечить согласованное и надежное поведение модулей pod, которым требуется использовать удостоверение рабочей нагрузки. В противном случае pod'ы выходят из строя после перезапуска.

Метка Описание Рекомендуемое значение Обязательное поле
azure.workload.identity/use Эта метка требуется в спецификации шаблона пода. Только поды с этой меткой мутируются с помощью мутационного admission webhook azure-workload-identity для инъекции специфичных для Azure переменных окружения и проецируемого тома токена учетной записи службы. истинно Да

Аннотации pod

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

Номер Описание По умолчанию
azure.workload.identity/service-account-token-expiration Поле expirationSeconds представляет собой проецируемый маркер учетной записи службы. Это необязательное поле, которое вы настраиваете для предотвращения простоя, вызванного ошибками при обновлении токена учетной записи службы. Срок действия токена служебной учетной записи Kubernetes не коррелирует с токенами Microsoft Entra. Срок действия маркеров Microsoft Entra истекает через 24 часа после их выдачи. 1 3600
Поддерживаемый диапазон — 3600–86400.
azure.workload.identity/skip-containers Представляет разделенный точкой с запятой список контейнеров, для которых следует пропустить добавление проецируемого объема токена учетной записи службы. Например, container1;container2. По умолчанию том проецируемого токена учетной записи службы добавляется ко всем контейнерам, если модуль помечен меткой azure.workload.identity/use: true.
azure.workload.identity/inject-proxy-sidecar Внедряет контейнер инициализацию прокси-сервера и боковую панель прокси-сервера в модуль pod. Прокси-сервер используется для перехвата запросов маркеров в IMDS и получения маркера Microsoft Entra от имени пользователя с федеративными учетными данными удостоверения. истинно
azure.workload.identity/proxy-sidecar-port Представляет порт сайдкара прокси-сервера. 8000

1 Имеет приоритет, если учетная запись службы также аннотирована.

Как перейти на Microsoft Entra Workload ID

В кластере, который уже работает с управляемым модулем pod, его можно настроить для использования удостоверения рабочей нагрузки одним из двух способов. Первый вариант позволяет использовать ту же конфигурацию, которую вы реализовали для управляемого pod удостоверения. Учетной записи службы в пространстве имен можно добавить аннотацию с идентификатором для включения Microsoft Entra Workload ID и внедрения аннотаций в поды.

Второй вариант — перезаписать приложение, чтобы использовать последнюю версию клиентской библиотеки удостоверений Azure.

Чтобы упростить процесс миграции и упростить процесс миграции, мы разработали боковик миграции, который преобразует транзакции IMDS, выполняемые приложением, в OpenID Connect (OIDC). Боковой автомобиль миграции не предназначен для долгосрочного решения, но способ быстрого выполнения и быстрого выполнения на удостоверениях рабочей нагрузки. Запуск бокового автомобиля миграции в прокси приложения выполняет транзакции IMDS приложения к OIDC. Альтернативный подход — обновление до поддерживаемой версии клиентской библиотеки удостоверений Azure, которая поддерживает проверку подлинности OIDC.

В следующей таблице приведены рекомендации по миграции или развертыванию для идентификации рабочей нагрузки.

Сценарий Описание
Новое или существующее развертывание кластера запускает поддерживаемую версию клиентской библиотеки удостоверений Azure Никаких шагов миграции не требуется.
Пример ресурсов развертывания: развертывание и настройка удостоверения рабочей нагрузки в новом кластере
Новое или существующее развертывание кластера выполняет неподдерживаемую версию клиентской библиотеки идентификационных данных Azure. Обновите образ контейнера, чтобы использовать поддерживаемую версию пакета SDK для удостоверений Azure или использовать боковику миграции.

Следующие шаги