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.
Configurez des liaisons d’identité sur vos clusters Azure Kubernetes Service (AKS) pour mapper une identité managée affectée par l’utilisateur (UAMI) sur plusieurs clusters tout en utilisant un seul FIC (Federated Identity Credential). Cette configuration vous aide à mettre à l’échelle l’authentification Microsoft Entra pour les charges de travail sans atteindre les limites FIC.
Prerequisites
- Passez en revue les concepts des liaisons d’identité pour comprendre le fonctionnement des liaisons d’identité.
- Azure CLI version 2.73.0 ou ultérieure. Pour vérifier votre version, utilisez la
az versioncommande. Pour installer ou mettre à jour Azure CLI, consultez Installer Azure CLI. - L’extension Azure CLI
aks-previewversion18.0.0b26ou ultérieure doit être installée. - L’indicateur de fonctionnalité
IdentityBindingPreviewdoit être activé pour votre abonnement. - Vous avez besoin des autorisations Azure suivantes sur l’étendue de l’identité et du cluster :
Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/writeetMicrosoft.ContainerService/managedClusters/write. - Vous avez besoin d’autorisations d’administrateur de cluster Kubernetes (ou équivalent) pour créer des
ClusterRoleetClusterRoleBindingressources.
Installer ou mettre à jour l’extension aks-preview
Installez ou mettez à jour l’extension Azure CLI
aks-previewvers la dernière version en utilisant les commandesaz extension addouaz extension update.# Install the aks-preview extension az extension add --name aks-preview # Update to the latest version if already installed az extension update --name aks-preview
Activer le drapeau de fonctionnalité IdentityBindingPreview
Inscrivez l'indicateur de fonctionnalité
IdentityBindingPreviewsur votre abonnement Azure à l’aide de la commandeaz feature register.az feature register --namespace Microsoft.ContainerService --name IdentityBindingPreviewL’inscription des fonctionnalités peut prendre jusqu’à 15 minutes.
Attendez que la fonctionnalité termine l’inscription à l’aide de la commande
az feature show.az feature show --namespace Microsoft.ContainerService --name IdentityBindingPreviewUne fois que la fonctionnalité s’affiche
Registered, actualisez l’inscription du fournisseur à l’aide de laaz provider registercommande.az provider register --namespace Microsoft.ContainerService
Limites
- Les liaisons d’identité ne sont pas encore prises en charge sur les clusters configurés avec l’intégration au réseau virtuel du serveur d’API.
Créer des ressources de test
Créez un groupe de ressources Azure à l’aide de la commande
az group create.export RESOURCE_GROUP="ib-test" export LOCATION="westus2" az group create --name $RESOURCE_GROUP --location $LOCATIONCréez un cluster AKS avec l’identité de charge de travail et l’émetteur OIDC activés à l’aide de la commande
az aks create, avec les indicateurs--enable-workload-identityet--enable-oidc-issuer.export CLUSTER_NAME="ib-test-cluster" az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --location $LOCATION --no-ssh-key --enable-workload-identity --enable-oidc-issuerCréez une identité managée affectée par l’utilisateur (UAMI) à l’aide de la
az identity createcommande.export MI_NAME="ib-test-mi" az identity create --resource-group $RESOURCE_GROUP --name $MI_NAME
Vérifiez la version du webhook d’identité de charge de travail.
La liaison d’identité requiert la version préliminaire du webhook d’identité de charge de travail. Vérifiez la version du webhook installée à l’aide de la commande suivante
kubectl get pods:kubectl -n kube-system get pods -l azure-workload-identity.io/system=true -o yaml | grep v1.6.0La sortie doit s’afficher
v1.6.0-alpha.1dans la balise d’image, ce qui confirme que la version correcte est installée.
Obtenir les ID UAMI
Obtenez les ID de ressource, de principal, de client et de locataire de l’UAMI et définissez-les en tant que variables d’environnement à l’aide des commandes suivantes
az identity show:export MI_RESOURCE_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query id --output tsv) export MI_PRINCIPAL_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query principalId --output tsv) export MI_CLIENT_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query clientId --output tsv) export MI_TENANT_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query tenantId --output tsv)
Créer une liaison d’identité
Associez l’UAMI au cluster AKS via une liaison d’identité à l’aide de la commande
az aks identity-binding create.az aks identity-binding create --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name "${MI_NAME}-ib" --managed-identity-resource-id $MI_RESOURCE_IDNote
Lors de la création d’une liaison d’identité, AKS génère automatiquement un certificat d’identité fédéré (FIC) nommé
aks-identity-bindingsous l’UAMI. Ce certificat est administré par AKS. Veuillez ne pas le modifier ni le supprimer tant que des liaisons d’identité sont en cours d’utilisation. Le FIC créé pour les liens d’identité est partagé entre tous les liens d’identité faisant référence au même UAMI.
Obtenir l’URL de l’émetteur OIDC pour l’UAMI
Obtenez l’URL de l’émetteur OIDC associée à l’UAMI en inspectant la liaison d’identité à l’aide de la commande
az aks identity-binding show.az aks identity-binding show --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name "${MI_NAME}-ib"Exemple de sortie condensé :
{ "oidcIssuer": { "oidcIssuerUrl": "https://ib.oic.prod-aks.azure.com/<MI-tenant-id>/<MI-client-id>" } }
Se connecter au cluster AKS
Obtenez les informations d’identification du cluster AKS à l’aide de la
az aks get-credentialscommande et enregistrez-les dans un fichier kubeconfig distinct :az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME -a -f "${CLUSTER_NAME}.kubeconfig"Définissez la variable d’environnement pour qu’elle
KUBECONFIGpointe vers le nouveau fichier kubeconfig :export KUBECONFIG="$(pwd)/${CLUSTER_NAME}.kubeconfig"
Autoriser les espaces de noms et les comptes de service
Configurez le contrôle d’accès en fonction du rôle (RBAC) pour accorder aux sujets spécifiques l’autorisation d’utiliser l’identité managée via la liaison d’identité en appliquant le manifeste suivant à l’aide de la commande suivante
kubectl apply.Note
L’exemple suivant fait explicitement référence au compte de service
demodans l’espace de nomsdemo. Faire explicitement référence à un compte de service spécifique est une option, mais il est également possible de faire référence à une collection de comptes de service soussubjects. Pour plus d’informations, consultez référence à des sujets dans la documentation Kubernetes.kubectl apply -f - <<EOF apiVersion: v1 kind: Namespace metadata: name: demo --- apiVersion: v1 kind: ServiceAccount metadata: name: demo namespace: demo --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: use-mi-${MI_CLIENT_ID} rules: - verbs: ["use-managed-identity"] apiGroups: ["cid.wi.aks.azure.com"] resources: ["${MI_CLIENT_ID}"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: use-mi-${MI_CLIENT_ID} roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: use-mi-${MI_CLIENT_ID} subjects: - kind: ServiceAccount name: demo namespace: demo EOF
Créer un coffre de clés avec la protection contre la purge et l’autorisation Azure RBAC
Créez un Key Vault avec la protection contre la purge et l’autorisation Azure RBAC activées à l’aide de la commande
az keyvault create, avec les indicateurs--enable-purge-protectionet--enable-rbac-authorization. Vous pouvez également utiliser un Key Vault existant s’il est configuré à la fois avec la protection contre la purge et l’autorisation Azure RBAC.export KEY_VAULT_NAME="ib-test" az keyvault create \ --name $KEY_VAULT_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --enable-purge-protection \ --enable-rbac-authorization
Obtenir l’ID de ressource et l’URL du coffre de clés
Obtenez l’ID de ressource du coffre de clés à l’aide de la commande et définissez-la
az keyvault showen tant que variable d’environnement :export KEY_VAULT_RESOURCE_ID=$(az keyvault show --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT_NAME \ --query id \ --output tsv)Obtenez l’URL du coffre de clés à l’aide de la commande et définissez-la
az keyvault showen tant que variable d’environnement :export KEYVAULT_URL="$(az keyvault show \ --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT_NAME \ --query properties.vaultUri \ --output tsv)"
Configurer l’accès au coffre de clés et créer un secret
Les étapes suivantes montrent comment accéder aux secrets, clés ou certificats dans Azure Key Vault à partir du pod. Les exemples de cette section configurent l’accès aux secrets dans le coffre de clés pour l’identité de charge de travail, mais vous pouvez effectuer des étapes similaires pour configurer l’accès aux clés ou aux certificats.
L’exemple suivant illustre l’utilisation du modèle d’autorisation Azure RBAC pour accorder au pod l’accès au Key Vault. Pour plus d’informations sur le modèle d’autorisation RBAC Azure pour Azure Key Vault, consultez Accorder l’autorisation aux applications d’accéder à Azure Key Vault à l’aide d’Azure RBAC.
Obtenez l’ID d’objet de l’utilisateur connecté à l’aide de la commande et définissez-la
az ad signed-in-user showen tant que variable d’environnement :export CALLER_OBJECT_ID=$(az ad signed-in-user show --query id --output tsv)Attribuez-vous le rôle Azure RBAC Key Vault Secrets Officer sur le Key Vault à l’aide de la commande
az role assignment create.az role assignment create --assignee $CALLER_OBJECT_ID \ --role "Key Vault Secrets Officer" \ --scope $KEY_VAULT_RESOURCE_IDCréez un secret dans le coffre-fort de clés à l’aide de la commande
az keyvault secret set.export KEY_VAULT_SECRET_NAME="my-secret" az keyvault secret set \ --vault-name $KEY_VAULT_NAME \ --name $KEY_VAULT_SECRET_NAME \ --value "Hello\!"Attribuez le rôle Utilisateur des secrets Key Vault à l’UAMI à l’aide de la commande
az role assignment create.az role assignment create \ --assignee-object-id $MI_PRINCIPAL_ID \ --role "Key Vault Secrets User" \ --scope $KEY_VAULT_RESOURCE_ID \ --assignee-principal-type ServicePrincipal
Annoter le compte de service
Annotez le compte de service avec l’ID de locataire de l’identité gérée à l’aide de la commande
kubectl annotate.kubectl annotate sa demo -n demo azure.workload.identity/tenant-id=$MI_TENANT_IDAnnotez le compte de service avec l’ID client d’identité managée en utilisant la commande
kubectl annotate.kubectl annotate sa demo -n demo azure.workload.identity/client-id=$MI_CLIENT_ID
Déployer un exemple d’application
Déployez l’exemple de pod qui utilise la liaison d’identité pour obtenir un jeton d’accès pour l’identité managée afin d’accéder à Azure Key Vault à l’aide de la commande suivante
kubectl apply:kubectl apply -f - <<EOF apiVersion: v1 kind: Pod metadata: name: demo namespace: demo labels: azure.workload.identity/use: "true" annotations: azure.workload.identity/use-identity-binding: "true" spec: serviceAccount: demo containers: - name: azure-sdk # source code: https://github.com/Azure/azure-workload-identity/blob/feature/custom-token-endpoint/examples/identitybinding-msal-go/main.go image: ghcr.io/bahe-msft/azure-workload-identity/identitybinding-msal-go:latest-linux-amd64 env: - name: KEYVAULT_URL value: ${KEYVAULT_URL} - name: SECRET_NAME value: ${KEY_VAULT_SECRET_NAME} restartPolicy: Never EOF
Vérifier l’accès au coffre de clés à partir d’un exemple d’application
Décrivez le pod et vérifiez la présence des variables d’environnement ainsi que des montages de volume de jetons projetés à l’aide de la commande
kubectl describe pod.kubectl describe pod demo -n demoLa sortie attendue doit contenir des valeurs pour
AZURE_CLIENT_ID, ,AZURE_TENANT_IDAZURE_FEDERATED_TOKEN_FILE,AZURE_AUTHORITY_HOST,AZURE_KUBERNETES_TOKEN_PROXY.AZURE_KUBERNETES_SNI_NAMEetAZURE_KUBERNETES_CA_FILE.Vérifiez que le pod peut obtenir un jeton et accéder à la ressource à l’aide de la
kubectl logscommande.kubectl logs demo -n demoSi elle réussit, la sortie doit être similaire à l’exemple suivant :
I1107 20:03:42.865180 1 main.go:77] "successfully got secret" secret="Hello!"
Faites évoluer les liaisons d’identité sur plusieurs clusters.
Les liaisons d’identité permettent de mapper plusieurs clusters AKS au même UAMI tout en utilisant un seul FIC. Pour mettre à l’échelle les liaisons d’identité entre plusieurs clusters, vous pouvez répéter les étapes de la création d’une liaison d’identité via la vérification de l’accès au coffre de clés à partir d’un exemple d’application pour chaque cluster supplémentaire que vous souhaitez mapper au même UAMI (création d’une liaison d’identité par cluster).
Nettoyer les ressources
Si vous n’avez plus besoin des ressources que vous avez créées dans cet article, vous pouvez les nettoyer pour éviter les coûts futurs.
Supprimez le pod à l’aide de la
kubectl delete podcommande.kubectl delete pod demo -n demoSupprimez l’espace de noms à l’aide de la
kubectl delete nscommande.kubectl delete ns demoSupprimez le groupe de ressources et toutes les ressources associées à l’aide de la
az group deletecommande.az group delete --name $RESOURCE_GROUP --yes --no-wait