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

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

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

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

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

Зависимости

  • AKS поддерживает Идентификация рабочей нагрузки 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
Go azidentity 1.3.0
Java azure-identity 1.9.0
Node.js @azure/identity 3.2.0
Python azure-identity 1.13.0

В следующих примерах DefaultAzureCredential кода используется. Этот тип учетных данных использует переменные среды, введенные удостоверением рабочей нагрузки Azure, для проверки подлинности в 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 Ссылка Да
Go Библиотека проверки подлинности Майкрософт для использования ghcr.io/azure/azure-workload-identity/msal-go:latest Ссылка Да
Java Библиотека проверки подлинности Майкрософт для java ghcr.io/azure/azure-workload-identity/msal-java:latest Ссылка No
JavaScript Библиотека проверки подлинности Майкрософт для js ghcr.io/azure/azure-workload-identity/msal-node:latest Ссылка No
Python Библиотека проверки подлинности Майкрософт для Python ghcr.io/azure/azure-workload-identity/msal-python:latest Ссылка No

Ограничения

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

Как это работает

В этой модели безопасности кластер AKS выступает в качестве издателя маркеров, идентификатор Microsoft Entra использует openID Подключение для обнаружения открытых ключей подписывания и проверки подлинности маркера учетной записи службы перед обменом на токен Microsoft Entra. Рабочая нагрузка может обменять маркер учетной записи службы, проецируемый на его том, для маркера Microsoft Entra с помощью клиентской библиотеки удостоверений Azure или библиотеки проверки подлинности Майкрософт.

Diagram of the AKS workload identity security model.

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

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

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

Diagram of the AKS workload identity OIDC authentication sequence.

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

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

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

Идентификация рабочей нагрузки Microsoft Entra поддерживает следующие сопоставления, связанные с учетной записью службы:

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

Примечание.

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

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

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

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

Номер Description По умолч.
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 завершаются сбоем после перезапуска.

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

Заметки pod

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

Номер Description По умолч.
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 от имени пользователя с федеративными учетными данными удостоверения. true
azure.workload.identity/proxy-sidecar-port Представляет порт прокси-сервера. 8000

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

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

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

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

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

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

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

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