Partager via


Utiliser Microsoft Entra Workload ID avec Azure Kubernetes Service (AKS)

Les charges de travail déployées sur un cluster AKS nécessitent des informations d’identification d’application Microsoft Entra ou des identités managées pour accéder aux ressources protégées Microsoft Entra, telles qu’Azure Key Vault et Microsoft Graph. L’ID de charge de travail Microsoft Entra s’intègre aux fonctionnalités natives de Kubernetes pour fédérer avec des fournisseurs d’identité externes, ce qui vous permet d’affecter des identités de charge de travail à vos charges de travail pour authentifier et accéder à d’autres services et ressources.

L’ID de charge de travail Microsoft Entra utilise la projection de volume de jetons de compte de service (ou un compte de service) pour permettre aux pods d’utiliser une identité Kubernetes. Un jeton Kubernetes est émis et la fédération OpenID Connect (OIDC) permet aux applications Kubernetes d’accéder en toute sécurité aux ressources Azure avec l’ID Microsoft Entra, en fonction des comptes de service annotés.

Vous pouvez utiliser l’ID de charge de travail Microsoft Entra avec les bibliothèques clientes Azure Identity ou la collection MSAL (Microsoft Authentication Library), ainsi que l’inscription d’application, pour authentifier et accéder en toute transparence aux ressources cloud Azure.

Remarque

Vous pouvez utiliser le Connecteur de services pour vous aider à configurer automatiquement certaines étapes. Pour plus d’informations, consultez Qu’est-ce que Service Connector ?

Prerequisites

  • AKS prend en charge Microsoft Entra Workload ID version 1.22 et ultérieure.
  • Azure CLI version 2.47.0 ou ultérieure. Exécutez az --version pour rechercher la version, puis exécutez az upgrade pour mettre à niveau la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.

Limites

Bibliothèques clientes d’identité Azure

Dans les bibliothèques de client Azure Identity, choisissez l’une des approches suivantes :

  • Utilisez DefaultAzureCredential, qui tente d’utiliser le WorkloadIdentityCredential.
  • Créez une instance ChainedTokenCredential qui inclut WorkloadIdentityCredential.
  • Utilisez WorkloadIdentityCredential directement.

Le tableau suivant fournit la version minimale du package requise pour la bibliothèque cliente de chaque écosystème de langage :

Écosystème Bibliothèque Version minimale
.NET Azure.Identity 1.9.0
C++ azure-identity-cpp 1.6.0
Allez azidentity 1.3.0
Java azure-identity 1.9.0
Node.js @azure/identity 3.2.0
Python azure-identity 1.13.0

Exemples de code de bibliothèque de client Azure Identity

Les exemples de code suivants utilisent le DefaultAzureCredential. Ce type d’informations d’identification utilise les variables d’environnement injectées par l’identité de charge de travail mutant le webhook pour s’authentifier auprès d’Azure Key Vault. Pour afficher des exemples à l’aide de l’une des autres approches, reportez-vous aux bibliothèques clientes spécifiques à l’écosystème.

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

string keyVaultUrl = Environment.GetEnvironmentVariable("<key-vault-url>");
string secretName = Environment.GetEnvironmentVariable("<secret-name>");

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

KeyVaultSecret secret = await client.GetSecretAsync(secretName);

Bibliothèque d’authentification Microsoft (MSAL)

Les bibliothèques clientes suivantes sont la version minimale requise :

Écosystème Bibliothèque Image Exemple Possède Windows
.NET Bibliothèque d’authentification Microsoft pour .NET ghcr.io/azure/azure-workload-identity/msal-net:latest Lien Oui
Allez Bibliothèque d’authentification Microsoft pour Go ghcr.io/azure/azure-workload-identity/msal-go:latest Lien Oui
Java Bibliothèque d’authentification Microsoft pour Java ghcr.io/azure/azure-workload-identity/msal-java:latest Lien Non
JavaScript Bibliothèque d’authentification Microsoft pour JS ghcr.io/azure/azure-workload-identity/msal-node:latest Lien Non
Python Bibliothèque d’authentification Microsoft pour Python ghcr.io/azure/azure-workload-identity/msal-python:latest Lien Non

Fonctionnement

Dans ce modèle de sécurité, le cluster AKS agit en tant qu’émetteur de jeton. Microsoft Entra ID utilise OIDC pour découvrir les clés de signature publiques et vérifier l’authenticité du jeton du compte du service avant de l’échanger pour un jeton Microsoft Entra. Votre charge de travail peut échanger un jeton de compte de service projeté sur son volume contre un jeton Microsoft Entra en utilisant la bibliothèque de client Azure Identity ou MSAL.

Diagramme du modèle de sécurité de l’ID de charge de travail AKS Microsoft Entra.

Le tableau suivant décrit les points de terminaison de l’émetteur OIDC requis pour Microsoft Entra Workload ID :

Point de terminaison Description
{IssuerURL}/.well-known/openid-configuration Également appelé document de découverte OIDC. Il contient les métadonnées relatives aux configurations de l’émetteur.
{IssuerURL}/openid/v1/jwks Il contient la ou les clés de signature publiques que Microsoft Entra ID utilise pour vérifier l’authenticité du jeton de compte de service.

Le diagramme suivant résume la séquence d’authentification à l’aide de l’OIDC :

Diagramme de la séquence d’authentification OIDC de l’ID de charge de travail AKS Microsoft Entra.

Rotation automatique du certificat webhook

Comme pour d’autres modules complémentaires webhook, l’opération de rotation automatique du certificat de cluster fait pivoter le certificat.

Étiquettes et annotations de compte de service

Microsoft Entra Workload ID prend en charge les mappages suivants liés à un compte de service :

  • Un-à-un, où un compte de service fait référence à un objet Microsoft Entra.
  • Plusieurs-à-un, où plusieurs comptes de service font référence au même objet Microsoft Entra.
  • Un-à-plusieurs où un compte de service fait référence à plusieurs objets Microsoft Entra en modifiant l’annotation d’ID client. Pour plus d’informations, consultez Comment fédérer plusieurs identités avec un compte de service Kubernetes.

Remarque

Si vous mettez à jour les annotations du compte de service, vous devez redémarrer le pod pour que les modifications prennent effet.

Si vous avez utilisé une identité managée par pod Microsoft Entra, pensez à un compte de service comme à un principal de sécurité Azure, sauf qu'un compte de service fait partie de l'API Kubernetes principale, plutôt qu'une définition de ressource personnalisée (CRD). Les sections suivantes décrivent une liste d’étiquettes et d’annotations disponibles que vous pouvez utiliser pour configurer le comportement lors de l’échange du jeton de compte de service pour un jeton d’accès Microsoft Entra.

Annotations de compte de service

Toutes les annotations sont facultatives. Si l’annotation n’est pas spécifiée, la valeur par défaut est utilisée.

Annotation Description Par défaut
azure.workload.identity/client-id Représente l’application Microsoft Entra
ID client à utiliser avec le pod.
azure.workload.identity/tenant-id Représente l’ID de client Azure où
L’application Microsoft Entra est enregistrée.
Variable d’environnement AZURE_TENANT_ID extraite
de ConfigMap azure-wi-webhook-config.
azure.workload.identity/service-account-token-expiration Représente le champ expirationSeconds pour le jeton de compte de service projeté. Il s’agit d’un champ facultatif que vous configurez pour éviter tout temps d’arrêt résultant d’erreurs lors de l’actualisation du jeton de compte de service. L’expiration du jeton de compte de service Kubernetes n’est pas corrélée avec les jetons Microsoft Entra. Les jetons Microsoft Entra expirent dans les 24 heures suivant leur émission. 3600
La plage prise en charge est 3600-86400.

Étiquettes du pod

Remarque

Pour les applications utilisant l’ID de charge de travail Microsoft Entra, il est nécessaire d’ajouter l’étiquette azure.workload.identity/use: "true" à la spécification de pod pour AKS afin d’amener l’identité de charge de travail à un scénario Fail Close afin de fournir un comportement cohérent et fiable pour les pods qui doivent utiliser l’identité de charge de travail. Sinon, les pods échouent après leur redémarrage.

Libellé Description Valeur recommandée Obligatoire
azure.workload.identity/use Cette étiquette est requise dans la spec de modèle de pod. Seuls les pods avec cette étiquette sont mutés par le webhook d’admission mutant azure-workload-identity pour injecter les variables d’environnement spécifiques à Azure et le volume de jeton de compte de service projeté. vrai Oui

Annotations de pod

Toutes les annotations sont facultatives. Si l’annotation n’est pas spécifiée, la valeur par défaut est utilisée.

Annotation Description Par défaut
azure.workload.identity/service-account-token-expiration Pour plus d’informations, consultez les annotations de compte de service . Les annotations de pod sont prioritaires sur les annotations de compte de service. 3600
La plage prise en charge est 3600-86400.
azure.workload.identity/skip-containers Représente une liste de conteneurs séparés par des points-virgules pour ignorer l’ajout d’un volume de jeton de compte de service projeté. Par exemple : container1;container2. Par défaut, le volume de jeton de compte de service projeté est ajouté à tous les conteneurs si le pod est étiqueté avec azure.workload.identity/use: true.
azure.workload.identity/inject-proxy-sidecar Injecte un conteneur init de proxy et un sidecar de proxy dans le pod. Le sidecar de proxy est utilisé pour intercepter des requêtes de jetons adressées à IMDS et acquérir un jeton Microsoft Entra pour le compte de l’utilisateur avec des informations d’identification d’identité fédérée. faux
azure.workload.identity/proxy-sidecar-port Représente le port du sidecar de proxy. 8000

Migrer vers l’identifiant de charge de travail Microsoft Entra

Vous pouvez configurer des clusters qui exécutent déjà une identité managée par pod pour utiliser l’ID de charge de travail Microsoft Entra de deux façons :

  • Utilisez la même configuration que celle que vous avez implémentée pour l’identité managée par pod. Vous devez annoter le compte de service dans l’espace de noms avec l’identité pour activer l’ID de charge de travail Microsoft Entra et injecter les annotations dans les pods.
  • Réécrivez votre application pour utiliser la dernière version de la bibliothèque cliente Azure Identity.

Pour rationaliser et faciliter le processus de migration, nous avons développé un sidecar de migration qui convertit les transactions du Service de Métadonnées d'Instance (IMDS) que votre application effectue vers OIDC. Le side-car de migration n’est pas destiné à être une solution à long terme, mais un moyen d’être opérationnel rapidement sur l’ID de charge de travail Microsoft Entra. L’exécution du sidecar de migration dans votre application achemine les transactions IMDS de l’application vers OIDC. L’autre approche consiste à opérer une mise à niveau vers une version prise en charge de la bibliothèque de client Azure Identity qui prend en charge l’authentification OIDC.

Le tableau suivant récapitule nos recommandations de migration ou de déploiement pour votre cluster AKS :

Scénario Description
Un déploiement de cluster nouveau ou existant exécute une version prise en charge de la bibliothèque de client Azure Identity Aucune étape de migration n’est requise.
Exemples de ressources de déploiement : Déployer et configurer l’ID de charge de travail Microsoft Entra sur un nouveau cluster
Un déploiement de cluster nouveau ou existant exécute une version non prise en charge de la bibliothèque de client Azure Identity Mettez à jour l’image conteneur pour utiliser une version prise en charge du Kit de développement logiciel (SDK) Azure Identity, ou utilisez le sidecar de migration.

Étapes suivantes