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 clusters Azure Kubernetes Service (AKS) nécessitent un principal de service Microsoft Entra ou une identité managée pour créer et gérer dynamiquement d’autres ressources Azure. Cet article explique comment créer un principal de service Microsoft Entra et l’utiliser avec votre cluster AKS.
Remarque
Pour une sécurité optimale et une facilité d’utilisation, nous vous recommandons d’utiliser des identités managées plutôt que des principaux de service pour autoriser l’accès à partir d’un cluster AKS vers d’autres ressources dans Azure. Une identité managée est un type spécial de principal de service que vous pouvez utiliser pour obtenir les informations d’identification Microsoft Entra sans avoir à gérer et sécuriser les informations d’identification. Pour plus d’informations, consultez Utiliser une identité managée dans AKS.
Prérequis
- Vous avez besoin d’Azure CLI version 2.0.59 ou ultérieure. Recherchez votre version à l’aide de la
az --versioncommande. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.
- Si vous utilisez Azure PowerShell, vous avez besoin d’Azure PowerShell version 5.0.0 ou ultérieure. Recherchez votre version à l’aide de la cmdlet
Get-InstalledModule -Name Az. Si vous devez installer ou mettre à niveau, consultez Installer le module PowerShell Azure Az.
- Vous avez besoin d’autorisations pour inscrire une application auprès de votre locataire Microsoft Entra et affecter l’application à un rôle dans votre abonnement. Si vous n’avez pas les autorisations nécessaires, vous devez demander à votre administrateur Microsoft Entra ID ou abonnement d’attribuer les autorisations nécessaires ou de créer le principal de service pour vous.
Considérations relatives à l’utilisation d’un principal de service
Gardez à l’esprit les considérations suivantes lors de l’utilisation d’un principal de service Microsoft Entra avec AKS :
- Le principal de service de Kubernetes fait partie de la configuration du cluster, mais n’utilisez pas cette identité pour déployer le cluster. Au lieu de cela, créez d’abord un principal de service , puis utilisez ce principal de service pour créer le cluster AKS.
- Chaque principal de service est associé à une application Microsoft Entra. Vous pouvez associer le principal de service d’un cluster Kubernetes à tout nom d’application Microsoft Entra valide (par exemple :
https://www.contoso.org/example). L’URL de l’application ne doit pas être un point de terminaison réel. - Lorsque vous spécifiez l’ID client du principal de service, utilisez la valeur de l’ID d’application (
appIdpour Azure CLI ouApplicationIdpour Azure PowerShell). - Sur les machines virtuelles (VM) des nœuds agents du cluster AKS, les informations d’identification du principal de service sont stockées dans le fichier
/etc/kubernetes/azure.json. - Lorsque vous supprimez un cluster AKS que vous avez créé à l’aide de la
az aks createcommande ou de l’appletNew-AzAksClusterde commande, le principal de service créé n’est pas automatiquement supprimé. Consultez les étapes de suppression d’un principal de service. - Si vous utilisez le principal du service d’un autre locataire Microsoft Entra, il y a d’autres points à prendre en considération quant aux autorisations disponibles au moment de déployer le cluster. Vous n’avez peut-être pas les autorisations appropriées pour lire et écrire des informations sur le répertoire. Pour plus d’informations, consultez Quelles sont les autorisations utilisateur par défaut dans Microsoft Entra ID ?
Créer un principal de service
Créez un principal de service à l’aide de la commande
az ad sp create-for-rbac.# Set environment variable SERVICE_PRINCIPAL_NAME=<your-service-principal-name> # Create the service principal az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAMEVotre résultat devrait être semblable à l’exemple de sortie suivant :
{ "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "displayName": "myAKSClusterServicePrincipal", "name": "http://myAKSClusterServicePrincipal", "password": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }Copiez les valeurs pour
appIdetpasswordà partir de la sortie à utiliser lors de la création du cluster AKS.
Créez un principal de service à l’aide de la commande
New-AzADServicePrincipal.# Set environment variable $SpName = <your-service-principal-name> # Create the service principal New-AzADServicePrincipal -DisplayName $SpName -OutVariable spVotre résultat devrait être semblable à l’exemple de sortie suivant :
Secret : System.Security.SecureString ServicePrincipalNames : {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, http://myAKSClusterServicePrincipal} ApplicationId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ObjectType : ServicePrincipal DisplayName : myAKSClusterServicePrincipal Id : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Type :Les valeurs sont stockées dans une variable que vous utilisez lors de la création du cluster AKS.
Déchiffrez la valeur stockée dans la chaîne sécurisée Secret à l’aide la commande suivante.
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sp.Secret) [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
Créer un cluster AKS avec un principal de service existant
Créez un cluster AKS avec un principal de service existant à l'aide de la commande
az aks createavec les paramètres--service-principalet--client-secretdéfinis pour spécifier les valeursappIdetpassword.# Set environment variables RESOURCE_GROUP=<your-resource-group-name> CLUSTER_NAME=<your-aks-cluster-name> APP_ID=<app-id> CLIENT_SECRET=<password-value> # Create the AKS cluster az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --service-principal $APP_ID \ --client-secret $CLIENT_SECRET \ --generate-ssh-keys
Convertissez les principaux de service
ApplicationIdetSecreten un objet PSCredential à l’aide de la commande suivante.$Cred = New-Object -TypeName System.Management.Automation.PSCredential ($sp.ApplicationId, $sp.Secret)Créez un cluster AKS avec un principal de service existant à l’aide de l’applet
New-AzAksClusterde commande et spécifiez le paramètre avec l’objetServicePrincipalIdAndSecretPSCredential comme valeur.# Set environment variables $ResourceGroupName = <your-resource-group-name> $ClusterName = <your-aks-cluster-name> # Create the AKS cluster New-AzAksCluster -ResourceGroupName $ResourceGroupName -Name $ClusterName -ServicePrincipalIdAndSecret $Cred
Remarque
Si vous utilisez un principal de service existant avec un secret personnalisé, assurez-vous que le secret ne dépasse pas 190 octets.
Déléguer l’accès à d’autres ressources Azure
Vous pouvez utiliser le principal de service du cluster AKS pour accéder à d’autres ressources. Par exemple, si vous souhaitez déployer votre cluster AKS dans un sous-réseau d'un réseau virtuel Azure existant, vous connecter à ACR ou accéder à des clés ou des secrets dans un coffre de clés à partir de votre cluster, vous devez déléguer l'accès à ces ressources au principal de service. Pour déléguer l’accès, attribuez un rôle Azure de contrôle d’accès en fonction du rôle (Azure RBAC) au principal du service.
Lorsque vous attribuez des rôles, vous spécifiez l’étendue de l’attribution de rôle, telle qu’un groupe de ressources ou une ressource de réseau virtuel. L’attribution de rôle détermine les autorisations dont dispose le principal de service sur la ressource et leur étendue.
Important
Les autorisations accordées à un principal de service associé à un cluster peuvent prendre jusqu’à 60 minutes pour se propager.
Créer une attribution de rôle
Remarque
L’étendue d’une ressource doit être un ID de ressource complet, tel que /subscriptions/\<guid\>/resourceGroups/myResourceGroup ou /subscriptions/\<guid\>/resourceGroups/myResourceGroupVnet/providers/Microsoft.Network/virtualNetworks/myVnet.
Créez une affectation de rôle à l’aide de la commande
az role assignment create. Spécifiez la valeur de l’ID d’application du principal de service pour le--assigneeparamètre et l’étendue de l’attribution de rôle pour le--scopeparamètre. L’exemple suivant assigne les autorisations au principal de service pour accéder aux secrets dans un Key Vault :az role assignment create \ --assignee <app-id> \ --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>" \ --role "Key Vault Secrets User"
Créez une attribution de rôle à l'aide du cmdlet
New-AzRoleAssignment. Spécifiez la valeur de l’ID d’application du principal de service pour le-ApplicationIdparamètre et l’étendue de l’attribution de rôle pour le-Scopeparamètre. L'exemple suivant attribue au principal du service les autorisations pour accéder aux secrets dans un coffre de clés :New-AzRoleAssignment -ApplicationId <app-id> ` -Scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>" ` -RoleDefinitionName "Key Vault Secrets User"
Accorder l’accès à Azure Container Registry
Si vous utilisez Azure Container Registry (ACR) comme magasin d’images conteneur, vous devez accorder des autorisations au principal de service pour que votre cluster AKS puisse lire et extraire des images. Nous vous recommandons de suivre les étapes de l’authentification auprès d’Azure Container Registry à partir d’Azure Kubernetes Service pour s’intégrer à un registre et attribuer le rôle approprié pour le principal de service.
Accorder l’accès aux ressources réseau
Si vous utilisez une mise en réseau avancée avec un réseau virtuel et un sous-réseau ou des adresses IP publiques dans différents groupes de ressources, vous pouvez affecter le rôle intégré Contributeur de réseau sur le sous-réseau au sein du réseau virtuel. Vous pouvez également créer un rôle personnalisé avec des autorisations d’accès aux ressources réseau dans ce groupe de ressources. Pour plus d’informations, consultez Autorisations de service AKS.
Accorder l’accès aux disques de stockage
Si vous devez accéder aux ressources de disque existantes dans un autre groupe de ressources, attribuez l’un des ensembles d’autorisations de rôle suivants :
- Créez un rôle personnalisé et définissez les autorisations de rôle Microsoft.Compute/disks/read et Microsoft.Compute/disks/write role.
- Attribuez le rôle intégré Contributeur de machines virtuelles sur le groupe de ressources.
Accorder l’accès à Azure Container Instances
Si vous utilisez kubelet virtuel pour intégrer AKS et exécuter Azure Container Instances (ACI) dans un groupe de ressources distinct du cluster AKS, vous devez attribuer des autorisations contributeur au principal du service de cluster AKS pour le groupe de ressources ACI.
Supprimer un principal de service
Recherchez l’ID client du principal de service (
servicePrincipalProfile.clientId) et supprimez le principal de service à l’aide de laaz ad sp deletecommande avec le--idparamètre. La commande [az aks show][az-aks-show] récupère l’ID client du cluster AKS spécifié.# Set environment variables RESOURCE_GROUP=<your-resource-group-name> CLUSTER_NAME=<your-aks-cluster-name> # Delete the service principal az ad sp delete --id $(az aks show \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --query servicePrincipalProfile.clientId \ --output tsv)
Recherchez l'ID client du principal de service (
ServicePrincipalProfile.ClientId) et supprimez le principal de service à l'aide du cmdletRemove-AzADServicePrincipalavec le paramètre-ApplicationId. L’applet de commande [Get-AzAksCluster][get-azakscluster] récupère l’ID client du cluster AKS spécifié.# Set environment variables $ResourceGroupName = <your-resource-group-name> $ClusterName = <your-aks-cluster-name> $ClientId = (Get-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster ).ServicePrincipalProfile.ClientId # Delete the service principal Remove-AzADServicePrincipal -ApplicationId $ClientId
Résoudre les problèmes d'identifiants du principal de service
Azure CLI met en cache les informations d’identification du principal de service des clusters AKS.
Azure PowerShell met en cache les informations d’identification du principal de service des clusters AKS.
Si ces informations d’identification expirent, vous pouvez rencontrer des erreurs pendant le déploiement du cluster AKS. S’il existe un problème avec les informations d’identification mises en cache, vous pouvez recevoir un message d’erreur similaire au message d’erreur suivant :
Operation failed with status: 'Bad Request'.
Details: The credentials in ServicePrincipalProfile were invalid. Please see https://aka.ms/aks-sp-help for more details.
Details: adal: Refresh request failed. Status Code = '401'.
Vous pouvez vérifier la date d’expiration des informations d’identification de votre principal de service à l’aide de la commande az ad app credential list avec la requête "[].endDateTime". La sortie vous présente la endDateTime de vos informations d’identification.
az ad app credential list \
--id <app-id> \
--query "[].endDateTime" \
--output tsv
- Vérifiez la date d’expiration de vos identifiants de service principal à l’aide de la cmdlet
Get-AzADAppCredential. La sortie vous présente laEndDatede vos informations d’identification.
Get-AzADAppCredential -ApplicationId <app-id>
Le délai d’expiration par défaut pour les informations d’identification du principal de service est d’un an. Si vos informations d’identification datent de plus d’un an, vous pouvez réinitialiser les informations d’identification existantes ou créer un principal de service.