Partager via


Utiliser des identités gérées par des pods Microsoft Entra dans AKS (Aperçu)

Les identités managées par pod Microsoft Entra utilisent les primitives du service Azure Kubernetes (AKS) pour associer des identités managées pour les ressources Azure et des identités dans Microsoft Entra ID à des pods. Les administrateurs créent des identités et des liaisons en tant que primitives Kubernetes qui permettent aux pods d’accéder aux ressources Azure qui reposent sur Microsoft Entra ID en tant que fournisseur d’identité.

Les identités managées par pod Microsoft Entra dans AKS présentent les limitations suivantes :

  • Chaque cluster prend en charge jusqu’à 200 identités managées par pod.
  • Chaque cluster prend en charge jusqu’à 200 exceptions d’identité managée par pod.
  • Les identités managées par pod sont prises en charge uniquement sur les pools de nœuds Linux.
  • Cette fonctionnalité est prise en charge uniquement sur les clusters reposant sur des ensembles de machines virtuelles.

Important

Nous vous recommandons d’examiner l’ID de charge de travail Microsoft Entra. Cette méthode d’authentification remplace l’identité managée par pod (préversion), qui s’intègre avec les fonctionnalités natives Kubernetes pour opérer une fédération avec tout fournisseur d’identité externe, au nom de l’application.

L’identité managée par pod open source Microsoft Entra (version préliminaire) dans Azure Kubernetes Service est devenue obsolète le 24 octobre 2022, et le projet a été archivé en septembre 2023. Si vous souhaitez obtenir plus d’informations, voir l’avis de dépréciation officiel. Le module complémentaire AKS Pod Identity Managed est corrigé et pris en charge jusqu’en septembre 2025 pour permettre aux clients de passer à l’ID de charge de travail Microsoft Entra.

Options du mode d’opération

L’identité managée par pod Microsoft Entra prend en charge deux modes d’opération :

  • Mode standard : dans ce mode, les deux composants suivants sont déployés sur le cluster AKS :

    • Contrôleur d’identité managée (MIC) : un MIC est un contrôleur Kubernetes qui surveille les modifications apportées aux pods, à AzureIdentity, et à AzureIdentityBinding via le Kubernetes API Server. Lorsqu’il détecte une modification pertinente, le MIC ajoute ou supprime AzureAssignedIdentity en fonction des besoins. Plus précisément, quand un pod est planifié, le MIC affecte l’identité managée sur Azure au groupe de machines virtuelles identiques sous-jacent que le pool de nœuds utilise au cours de la phase de création. Quand tous les pods utilisant l’identité sont supprimés, il supprime l’identité du groupe de machines virtuelles identiques du pool de nœuds, sauf si la même identité managée est utilisée par d’autres pods. Le MIC effectue des actions similaires quand AzureIdentity ou AzureIdentityBinding sont créés ou supprimés.

    • Node Managed Identity (NMI) : pod qui s’exécute en tant que DaemonSet sur chaque nœud du cluster AKS. NMI intercepte les demandes de jeton de sécurité auprès du service de métadonnées d’instance Azure sur chaque nœud. NMI intercepte les demandes de jetons et les redirige vers elle-même. Il vérifie ensuite si le pod est autorisé à accéder à l’identité demandée et, si c’est le cas, récupère le jeton d’accès du locataire Microsoft Entra pour le compte de l’application.

  • Mode managé : ce mode offre uniquement le pod NMI. Lorsqu’il est installé via le module complémentaire de cluster AKS, Azure gère la création de primitives Kubernetes (AzureIdentity et AzureIdentityBinding) et l’attribution d’identité en réponse aux commandes CLI par l’utilisateur. Sinon, si elle est installée via Helm chart, l'identité doit être assignée manuellement et gérée par utilisateur. Pour plus d’informations, consultez Identité des pods en mode managé.

Quand vous installez l’identité managée par pod Microsoft Entra via le graphique Helm ou le manifeste YAML comme indiqué dans le Guide d’Installation, vous pouvez choisir entre les modes standard et managed. Si vous décidez plutôt d'installer l'identité gérée par le pod Microsoft Entra à l'aide du module complémentaire du cluster AKS, comme indiqué dans cet article, l'installation utilise le mode managed.

Prerequisites

Vos identités managées par pod Microsoft Entra dans AKS doivent répondre aux exigences suivantes :

  • Azure CLI version 2.20.0 ou ultérieure est installé.

  • Votre cluster AKS est à la version 1.26 ou ultérieure.

  • Vous devez disposer des autorisations appropriées, telles que le rôle Propriétaire ou Contributeur .

Installer l’extension Azure CLI aks-preview

Important

Les fonctionnalités d’évaluation AKS sont disponibles en libre-service et font l’objet d’un abonnement. Les préversions sont fournies « en l’état » et « en fonction des disponibilités », et sont exclues des contrats de niveau de service et de la garantie limitée. Les préversions AKS sont, dans la mesure du possible, partiellement couvertes par le service clientèle. Telles quelles, ces fonctionnalités ne sont pas destinées à une utilisation en production. Pour plus d’informations, consultez les articles de support suivants :

Exécutez la commande suivante pour installer l’extension aks-preview :

az extension add --name aks-preview

Exécutez la commande suivante pour effectuer la mise à jour vers la dernière version de l’extension publiée :

az extension update --name aks-preview

Enregistrer l’indicateur de fonctionnalité EnablePodIdentityPreview

Inscrivez l’indicateur EnablePodIdentityPreview de fonctionnalité à l’aide de la commande az feature register , comme indiqué dans l’exemple suivant :

az feature register --namespace "Microsoft.ContainerService" --name "EnablePodIdentityPreview"

Conseil / Astuce

Pour désactiver le module complémentaire managé AKS, exécutez la commande suivante :

az feature unregister --namespace "Microsoft.ContainerService" --name "EnablePodIdentityPreview"

Quelques minutes sont nécessaires pour que l’état s’affiche comme Registered (Inscrit). Vérifiez l’état de l’inscription à l’aide de la commande az feature show :

az feature show --namespace "Microsoft.ContainerService" --name "EnablePodIdentityPreview"

Une fois que l’état reflète Inscrit, actualisez l’inscription du fournisseur de ressources Microsoft.ContainerService à l’aide de la commande az provider register :

az provider register --namespace Microsoft.ContainerService

Gérer un cluster AKS avec des identités gérées par pod

Vous pouvez gérer votre cluster AKS avec le plug-in réseau Azure Container Networking Interface (CNI) ou Kubenet lors de l’activation des identités managées par pod Microsoft Entra.

  1. Créez un cluster AKS avec Azure CNI et l’identité managée par pod activée avec la configuration recommandée par défaut. Les commandes suivantes utilisent az group create pour créer un groupe de ressources nommé myResourceGroup et la az aks create commande pour créer un cluster AKS nommé myAKSCluster dans le groupe de ressources myResourceGroup .

    az group create --name myResourceGroup --location eastus
    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --enable-pod-identity \
        --network-plugin azure \
        --generate-ssh-keys
    
  2. Utilisez az aks get-credentials pour vous connecter à votre cluster AKS. Cette commande télécharge et configure également le certificat client kubectl sur votre ordinateur de développement.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

Lorsque vous activez l’identité managée par pod sur votre cluster AKS, le système ajoute une AzurePodIdentityExceptionexception nommée aks-addon à l’espace de noms kube-system . Un AzurePodIdentityException permet aux pods avec certaines étiquettes d’accéder au point de terminaison du service Azure Instance Metadata (IMDS) sans interception par le serveur NMI. L’aks-addon-exception permet aux modules complémentaires internes AKS, comme une identité managée par pod Microsoft Entra, de fonctionner sans devoir configurer manuellement une AzurePodIdentityException. Si vous le souhaitez, vous pouvez ajouter, supprimer et mettre à jour un AzurePodIdentityException en utilisant :

  • az aks pod-identity exception add

  • az aks pod-identity exception delete

  • az aks pod-identity exception update

  • Ou kubectl

Mettre à jour un cluster AKS existant avec Azure CNI

Pour mettre à jour un cluster AKS existant avec Azure CNI pour inclure l’identité managée par pod, exécutez la commande suivante :

az aks update --resource-group $MY_RESOURCE_GROUP --name $MY_CLUSTER --enable-pod-identity

Créer une identité managée

Vous devez disposer des autorisations appropriées (par exemple, Propriétaire) sur votre abonnement pour créer l’identité.

Pour créer une identité à utiliser par le pod de démonstration avec az identity create, définissez les variables IDENTITY_CLIENT_ID et IDENTITY_RESOURCE_ID , exécutez la commande suivante :

az group create --name myIdentityResourceGroup --location eastus
export IDENTITY_RESOURCE_GROUP="myIdentityResourceGroup"
export IDENTITY_NAME="application-identity"
az identity create --resource-group ${IDENTITY_RESOURCE_GROUP} --name ${IDENTITY_NAME}
export IDENTITY_CLIENT_ID="$(az identity show --resource-group ${IDENTITY_RESOURCE_GROUP} --name ${IDENTITY_NAME} --query clientId -o tsv)"
export IDENTITY_RESOURCE_ID="$(az identity show --resource-group ${IDENTITY_RESOURCE_GROUP} --name ${IDENTITY_NAME} --query id -o tsv)"

Attribuer des autorisations pour l’identité managée

L’identité managée affectée au pod doit recevoir les autorisations appropriées en fonction des opérations effectuées par le pod. Veillez à affecter uniquement les rôles minimum requis pour suivre les meilleures pratiques de sécurité.

Pour exécuter la démonstration, l’identité managée IDENTITY_CLIENT_ID doit avoir des autorisations Contributeur de machine virtuelle dans le groupe de ressources associé à l'ensemble de machines virtuelles de votre cluster AKS.

# Obtain the name of the resource group containing the Virtual Machine Scale set of your AKS cluster, commonly called the node resource group
NODE_GROUP=$(az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv)

# Obtain the id of the node resource group
NODES_RESOURCE_ID=$(az group show --name $NODE_GROUP -o tsv --query "id")

# Create a role assignment granting your managed identity permissions on the node resource group
az role assignment create --role "Virtual Machine Contributor" --assignee "$IDENTITY_CLIENT_ID" --scope $NODES_RESOURCE_ID

Créer une identité gérée par pod

Pour créer une identité gérée par pod pour le cluster à l'aide de az aks pod-identity add, exécutez la commande suivante :

export POD_IDENTITY_NAME="my-pod-identity"
export POD_IDENTITY_NAMESPACE="my-app"
az aks pod-identity add --resource-group myResourceGroup --cluster-name myAKSCluster --namespace ${POD_IDENTITY_NAMESPACE}  --name ${POD_IDENTITY_NAME} --identity-resource-id ${IDENTITY_RESOURCE_ID}

Remarque

Le « POD_IDENTITY_NAME » doit être un nom de sous-domaine DNS ( Domain Name System) valide tel que défini dans RFC 1123.

Lorsque vous affectez l’identité managée par pod à l’aide de pod-identity add, l’interface Azure CLI tente d’accorder le rôle d’opérateur d’identités managées sur l’identité managée par pod (IDENTITY_RESOURCE_ID) à l’identité du cluster.

Azure crée une ressource AzureIdentity dans votre cluster représentant l’identité dans Azure et une ressource AzureIdentityBinding qui connecte AzureIdentity à un sélecteur. Vous pouvez afficher ces ressources en exécutant la commande suivante :

kubectl get azureidentity -n $POD_IDENTITY_NAMESPACE
kubectl get azureidentitybinding -n $POD_IDENTITY_NAMESPACE

Exécuter un exemple d’application

Pour qu’un pod utilise l’identité managée par pod Microsoft Entra, le pod a besoin d’une étiquette aadpodidbinding avec une valeur correspondant à un sélecteur issu d’une AzureIdentityBinding. Par défaut, le sélecteur correspond au nom de l’identité managée par pod, mais il peut également être défini à l’aide de l’option --binding-selector lors de l’appel de la fonction az aks pod-identity add.

Pour exécuter un exemple d’application à l’aide d’une identité managée par pod Microsoft Entra, créez un fichier demo.yaml avec le contenu suivant. Remplacez POD_IDENTITY_NAME, IDENTITY_CLIENT_ID et IDENTITY_RESOURCE_GROUP par les valeurs issues des étapes précédentes. Remplacez SUBSCRIPTION_ID par l’ID de votre abonnement.

Remarque

Au cours des étapes précédentes, vous avez créé les variables POD_IDENTITY_NAME, IDENTITY_CLIENT_ID et IDENTITY_RESOURCE_GROUP. Vous pouvez utiliser une commande telle que echo pour afficher la valeur que vous définissez pour les variables, par exemple echo $POD_IDENTITY_NAME.

apiVersion: v1
kind: Pod
metadata:
  name: demo
  labels:
    aadpodidbinding: $POD_IDENTITY_NAME
spec:
  containers:
  - name: demo
    image: mcr.microsoft.com/oss/azure/aad-pod-identity/demo:v1.6.3
    args:
      - --subscriptionid=$SUBSCRIPTION_ID
      - --clientid=$IDENTITY_CLIENT_ID
      - --resourcegroup=$IDENTITY_RESOURCE_GROUP
    env:
      - name: MY_POD_NAME
        valueFrom:
          fieldRef:
            fieldPath: metadata.name
      - name: MY_POD_NAMESPACE
        valueFrom:
          fieldRef:
            fieldPath: metadata.namespace
      - name: MY_POD_IP
        valueFrom:
          fieldRef:
            fieldPath: status.podIP
  nodeSelector:
    kubernetes.io/os: linux

Notez que la définition du pod a une étiquette aadpodidbinding avec une valeur qui correspond au nom de l’identité managée par pod que vous avez exécutée az aks pod-identity add à l’étape précédente.

  1. Déployez demo.yaml dans le même espace de noms que celui de votre identité gérée par le pod à l'aide de kubectl apply :

    kubectl apply -f demo.yaml --namespace $POD_IDENTITY_NAMESPACE
    
  2. Vérifiez que l’exemple d’application s’exécute correctement à l’aide de kubectl logs:

    kubectl logs demo --follow --namespace $POD_IDENTITY_NAMESPACE
    

    Vérifiez que les journaux d’activité indiquent qu’un jeton est acquis avec succès et que l’opération de requête HTTP GET réussit.

    ...
    successfully doARMOperations vm count 0
    successfully acquired a token using the MSI, msiEndpoint(http://169.254.169.254/metadata/identity/oauth2/token)
    successfully acquired a token, userAssignedID MSI, msiEndpoint(http://169.254.169.254/metadata/identity/oauth2/token) clientID(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
    successfully made GET on instance metadata
    ...
    

Exécuter une application avec plusieurs identités

Pour permettre à une application d’utiliser plusieurs identités, définissez le --binding-selector au même sélecteur lors de la création d'identités de pod.

az aks pod-identity add --resource-group myResourceGroup --cluster-name myAKSCluster --namespace ${POD_IDENTITY_NAMESPACE}  --name ${POD_IDENTITY_NAME_1} --identity-resource-id ${IDENTITY_RESOURCE_ID_1} --binding-selector myMultiIdentitySelector
az aks pod-identity add --resource-group myResourceGroup --cluster-name myAKSCluster --namespace ${POD_IDENTITY_NAMESPACE}  --name ${POD_IDENTITY_NAME_2} --identity-resource-id ${IDENTITY_RESOURCE_ID_2} --binding-selector myMultiIdentitySelector

Ensuite, définissez le champ aadpodidbinding du fichier YAML de votre pod sur le sélecteur de liaison que vous avez spécifié.

apiVersion: v1
kind: Pod
metadata:
  name: demo
  labels:
    aadpodidbinding: myMultiIdentitySelector
...

Désactivez l’identité managée par pod sur un cluster existant

  1. Pour désactiver l’identité managée par pod sur un cluster existant, supprimez les identités gérées par les pods du cluster en exécutant la commande suivante :

    az aks pod-identity delete --name ${POD_IDENTITY_NAME} --namespace ${POD_IDENTITY_NAMESPACE} --resource-group myResourceGroup --cluster-name myAKSCluster
    
  2. Désactivez ensuite la fonctionnalité sur le cluster en exécutant la commande suivante :

    az aks update --resource-group myResourceGroup --name myAKSCluster --disable-pod-identity
    

Nettoyer les ressources

Pour supprimer l’identité managée par pod Microsoft Entra de votre cluster, supprimez l’exemple d’application et l’identité managée par pod du cluster.

kubectl delete pod demo --namespace $POD_IDENTITY_NAMESPACE

Supprimez ensuite l’identité et l’attribution de rôle de l’identité de cluster.

az aks pod-identity delete \
  --name ${POD_IDENTITY_NAME} \
  --namespace ${POD_IDENTITY_NAMESPACE} \
  --resource-group myResourceGroup \
  --cluster-name myAKSCluster

az identity delete \
  --resource-group ${IDENTITY_RESOURCE_GROUP} \
  --name ${IDENTITY_NAME}

az role assignment delete \
  --role "Managed Identity Operator" \
  --assignee "$IDENTITY_CLIENT_ID" \
  --scope "$IDENTITY_RESOURCE_ID"

Étapes suivantes

Pour plus d’informations sur les identités managées, consultez Identités managées pour les ressources Azure.