Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 --versionpour rechercher la version, puis exécutezaz upgradepour mettre à niveau la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.
Limites
- Vous pouvez avoir un maximum de 20 informations d’identification d’identité fédérée par identité managée.
- La propagation de l'identifiant fédéré prend quelques secondes après son ajout initial.
- Le module complémentaire de nœuds virtuels , basé sur le projet open source Virtual Kubelet, n’est pas pris en charge.
- La création d’informations d’identification d’identité fédérée n’est pas prise en charge sur les identités gérées attribuées par l’utilisateur dans ces régions.
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 leWorkloadIdentityCredential. - Créez une instance
ChainedTokenCredentialqui inclutWorkloadIdentityCredential. - Utilisez
WorkloadIdentityCredentialdirectement.
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.
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 :
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
- Pour savoir comment configurer votre pod pour s’authentifier à l’aide d’une identité de charge de travail comme option de migration, consultez Moderniser l’authentification d’application avec l’ID de charge de travail Microsoft Entra.
- Consultez Déployer et configurer un cluster AKS avec l’ID de charge de travail Microsoft Entra, ce qui vous aide à déployer un cluster et à configurer un exemple d’application pour utiliser une identité de charge de travail.