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.
Cet article explique comment autoriser les appels à l’API Kubernetes dans Azure Kubernetes Service (AKS) à l’aide d’identités d’ID Microsoft Entra. L’autorisation Entra ID pour l’API Kubernetes utilise des attributions de rôles RBAC Azure pour accorder l’accès aux ressources Kubernetes. Pour les ressources Kubernetes intégrées, attribuez l’un des rôles intégrés AKS (tels que Azure Kubernetes Service RBAC Reader) à l'échelle du cluster ou de l'espace de noms. Pour les ressources personnalisées (CRD), attribuez un rôle personnalisé avec des conditions Azure ABAC qui spécifient les groupes CRD ou types auxquels le bénéficiaire peut accéder. Les deux attributions de rôles composent : l’une accorde l’accès aux ressources Kubernetes standard, et l’autre accorde un accès conditionnel à des ressources personnalisées spécifiques.
Pour obtenir une vue d’ensemble conceptuelle des options d’autorisation d’API Kubernetes disponibles dans AKS, consultez les concepts d’autorisation du cluster.
Note
Lorsque vous utilisez l’authentification intégrée entre l’ID Microsoft Entra et AKS, vous pouvez utiliser des utilisateurs, des groupes ou des principaux de service Microsoft Entra en tant que sujets dans le contrôle d’accès en fonction du rôle Kubernetes (RBAC Kubernetes). Avec l’autorisation Entra ID, vous n’avez pas besoin de gérer séparément les identités utilisateur et les informations d’identification pour Kubernetes. Toutefois, vous devez toujours configurer et gérer les attributions de rôles Entra ID et toutes les liaisons RBAC Kubernetes séparément.
Avant de commencer
- Vous avez besoin d’Azure CLI version 2.24.0 ou ultérieure installée et configurée. Exécutez
az --versionpour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI. - Vous avez besoin de
kubectl, avec une version minimale de 1.18.3. - Vous avez besoin de l’intégration de Microsoft Entra gérée activée sur votre cluster avant de pouvoir ajouter l’autorisation d’ID Entra pour l’API Kubernetes. Si vous devez activer l’intégration de Microsoft Entra managée, consultez Utiliser l’ID Microsoft Entra dans AKS.
- Les nouvelles attributions de rôles peuvent prendre jusqu’à cinq minutes pour se propager et être mises à jour par le serveur d’autorisation.
- L’autorisation d’ID Entra pour l’API Kubernetes nécessite que le locataire Microsoft Entra configuré pour l’authentification soit identique au locataire de l’abonnement qui contient votre cluster AKS.
Créer un nouveau cluster AKS avec intégration Microsoft Entra gérée et autorisation Entra ID
Créez un groupe de ressources Azure à l’aide de la commande
az group create.export RESOURCE_GROUP=<resource-group-name> export LOCATION=<azure-region> az group create --name $RESOURCE_GROUP --location $LOCATIONCréez un cluster AKS avec l’intégration Microsoft Entra managée et l’autorisation Entra ID à l’aide de la commande
az aks create.export CLUSTER_NAME=<cluster-name> az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-aad \ --enable-azure-rbac \ --generate-ssh-keysVous devez obtenir un résultat semblable à l’exemple de sortie qui suit :
"AADProfile": { "adminGroupObjectIds": null, "clientAppId": null, "enableAzureRbac": true, "managed": true, "serverAppId": null, "serverAppSecret": null, "tenantId": "****-****-****-****-****" }
Activer l’autorisation Entra ID sur un cluster AKS existant
Activez l’autorisation d’ID Entra pour l’API Kubernetes sur un cluster AKS existant en utilisant la commande
az aks updateavec l’option--enable-azure-rbac.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
Rôles intégrés d'AKS
AKS fournit les rôles intégrés suivants :
| Rôle | Description |
|---|---|
| Lecteur RBAC d'Azure Kubernetes Service | Autorise l’accès en lecture seule pour voir la plupart des objets dans un espace de noms. Ce rôle n’autorise pas l’affichage des rôles et des liaisons de rôles. Ce rôle n’autorise pas l’affichage Secrets, car la lecture du contenu des secrets permet d’accéder aux informations d’identification des comptes de service dans l’espace de noms, ce qui permettrait à n'importe quel compte de service d’accéder à l’API dans cet espace de noms (une forme d’escalade de privilèges). |
| Azure Kubernetes Service RBAC Writer | Autorise l’accès en lecture/écriture pour la plupart des objets dans un espace de noms. Ce rôle n’autorise pas l’affichage ni la modification des rôles et des liaisons de rôles. Toutefois, ce rôle autorise l’accès Secrets et l’exécution de Pods en tant que ServiceAccount dans l’espace de noms, afin qu’il puisse être utilisé pour obtenir les niveaux d’accès d’API de n’importe quel ServiceAccount dans l’espace de noms. |
| Administrateur RBAC du service Azure Kubernetes | Autorise l’accès administrateur, normalement accordé au sein d’un espace de noms. Autorise l’accès en lecture/écriture à la plupart des ressources dans un espace de noms (ou dans l’étendue du cluster), y compris la possibilité de créer des rôles et des liaisons de rôles dans l’espace de noms. Ce rôle n’autorise pas l’accès en écriture au quota de ressources ou à l’espace de noms lui-même. |
| Administrateur du cluster RBAC Azure Kubernetes Service | Autorise l’accès de super utilisateur qui permet d’effectuer n’importe quelle action sur toutes les ressources. Il offre un contrôle total sur chaque ressource du cluster et dans tous les espaces de noms. |
Créer des attributions de rôles pour l’accès au cluster
Obtenez votre ID de ressource AKS à l’aide de la
az aks showcommande.AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)Créez une affectation de rôle à l’aide de la commande
az role assignment create.<AAD-ENTITY-ID>peut être un nom d’utilisateur ou l’ID client d’un principal de service. L’exemple suivant crée une attribution de rôle pour le rôle d’administrateur RBAC Azure Kubernetes Service .az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_IDNote
Vous pouvez créer les attributions de rôle Azure Kubernetes Service RBAC Reader et Azure Kubernetes Service RBAC Writer étendues à un espace de noms spécifique au sein du cluster à l’aide de la commande
az role assignment createet en définissant l’étendue sur l’espace de noms souhaité.az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
Créer des définitions de rôles personnalisés
Pour les ressources Kubernetes intégrées, les définitions de rôle personnalisées référencent l’action de groupe d’API correspondante sous Microsoft.ContainerService/managedClusters/. L’exemple suivant permet à un utilisateur de lire uniquement les déploiements et rien d’autre. Pour obtenir la liste complète des actions possibles, consultez les opérations Microsoft.ContainerService. Pour filtrer l’accès à des groupes ou types de ressources personnalisées spécifiques, consultez Restreindre l’accès aux ressources personnalisées à l’aide de conditions ABAC plus loin dans cet article.
Pour créer vos propres définitions de rôle personnalisées, copiez le fichier suivant, en remplaçant
<YOUR SUBSCRIPTION ID>par votre propre ID d’abonnement, puis enregistrez-le sousdeploy-view.json.{ "Name": "AKS Deployment Reader", "Description": "Lets you view all deployments in cluster/namespace.", "Actions": [], "NotActions": [], "DataActions": [ "Microsoft.ContainerService/managedClusters/apps/deployments/read" ], "NotDataActions": [], "assignableScopes": [ "/subscriptions/<YOUR SUBSCRIPTION ID>" ] }Créez la définition de rôle à l’aide de la commande
az role definition create, en définissant--role-definitionsur le fichierdeploy-view.jsonque vous avez créé à l’étape précédente.az role definition create --role-definition @deploy-view.jsonAffectez la définition de rôle à un utilisateur ou à une autre identité à l’aide de la
az role assignment createcommande.az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Restreindre l'accès aux ressources personnalisées à l'aide de conditions ABAC (aperçu)
Important
Les fonctionnalités d’évaluation AKS sont disponibles en libre-service et font l’objet d’un abonnement. Les versions d'essai sont fournies « en l’état » et « selon disponibilité », et elles sont exclues des contrats de niveau de service et de la garantie limitée. Les versions préliminaires AKS sont, dans la mesure du possible, partiellement couvertes par le service clientèle. Par conséquent, ces fonctionnalités ne sont pas destinées à une utilisation en production. Pour plus d’informations, consultez les articles de support suivants :
Les conditions ABAC vous permettent de filtrer les attributions de rôles Microsoft Entra ID vers des groupes et des types spécifiques de ressources personnalisées (CRD) — de manière centralisée, depuis Microsoft Entra ID, sans écrire de manifestes Kubernetes RBAC Role et RoleBinding par cluster. Pour plus d’informations sur Azure ABAC, consultez Quelles sont les conditions d’attribution de rôle Azure ?.
Quand utiliser des conditions ABAC
Utilisez cette fonctionnalité lorsque vous souhaitez :
- Limitez les groupes CRD ou types qu’un assigneur peut répertorier ou obtenir.
- Appliquer centralement les limites d'accès aux ressources définies par l'utilisateur depuis l'ID Microsoft Entra sans gérer les objets RBAC
RoleetRoleBindingKubernetes sur chaque cluster. - Faire la distinction entre les CRD publiés par différents opérateurs (par exemple, autoriser
secrets-store.csi.x-k8s.iolors du blocagesecurity.istio.io).
Attributs de condition disponibles
Les attributs de requête suivants sont disponibles lors de la création de conditions pour l’API Kubernetes sur un cluster AKS :
| Caractéristique | Description |
|---|---|
Microsoft.ContainerService/managedClusters/customResources:group |
Groupe d’API de la ressource personnalisée accessible (par exemple). secrets-store.csi.x-k8s.io |
Microsoft.ContainerService/managedClusters/customResources:kind |
Type de la ressource personnalisée accessible (par exemple, secretproviderclasses). |
Ajouter une condition ABAC à une attribution de rôle
L’exemple suivant crée un rôle personnalisé Lecteur CRD AKS qui accorde la lecture des ressources personnalisées, puis l’assigne avec une condition qui autorise uniquement l’accès secretproviderclasses au groupe secrets-store.csi.x-k8s.io (le CRD employé par le fournisseur Azure Key Vault pour le driver CSI du magasin de secrets).
Enregistrez la définition de rôle suivante dans un fichier nommé
crd-reader.json, en remplaçant<YOUR SUBSCRIPTION ID>par votre propre ID d’abonnement.{ "Name": "AKS CRD Reader", "Description": "Lets you read custom resources in the cluster.", "Actions": [], "NotActions": [], "DataActions": [ "Microsoft.ContainerService/managedClusters/customresources/read" ], "NotDataActions": [], "assignableScopes": [ "/subscriptions/<YOUR SUBSCRIPTION ID>" ] }Créez la définition de rôle à l’aide de la
az role definition createcommande.az role definition create --role-definition @crd-reader.jsonEnregistrez la condition suivante dans un fichier nommé
abac-condition.txt. La condition permet aux lectures de ressources non personnalisées de se faire sans modification, et restreint les lectures de ressources personnalisées à un groupe et un genre spécifiques.( ( !(ActionMatches{'Microsoft.ContainerService/managedClusters/customresources/read'}) ) OR ( @Request[Microsoft.ContainerService/managedClusters/customResources:group] StringEqualsIgnoreCase 'secrets-store.csi.x-k8s.io' AND @Request[Microsoft.ContainerService/managedClusters/customResources:kind] StringEqualsIgnoreCase 'secretproviderclasses' ) )Créez l’attribution de rôle avec la condition à l’aide de la commande
az role assignment create.az role assignment create \ --role "AKS CRD Reader" \ --assignee <AAD-ENTITY-ID> \ --scope $AKS_ID \ --condition "$(cat abac-condition.txt)" \ --condition-version "2.0" \ --description "Allow reads on SecretProviderClass resources only"
Vous pouvez également ajouter une condition via le portail Azure. Dans la page Ajouter une attribution de rôle , sélectionnez l’onglet Conditions , puis sélectionnez Ajouter une condition et utilisez l’éditeur visuel pour générer l’expression.
Vérifier la condition
Après la propagation de l’attribution de rôle (jusqu’à cinq minutes), connectez-vous en tant que bénéficiaire et vérifiez qu’il peut lire le CRD autorisé, mais pas les autres CRD.
Obtenez les informations d’identification du cluster à l’aide de la
az aks get-credentialscommande.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAMEListe
secretproviderclassesdu groupesecrets-store.csi.x-k8s.io, que la condition autorise. La commande doit réussir et retourner les ressources existantes ou une liste vide (ou une erreur introuvable si le CRD n’est pas installé sur le cluster).kubectl get secretproviderclasses.secrets-store.csi.x-k8s.io --all-namespacesListe
authorizationpoliciesdu groupe Istiosecurity.istio.ioque la condition bloque. La commande doit échouer avec une erreurForbiddendu webhook d’autorisation Entra ID (en supposant que le CRD Istio est installé sur le cluster ; sinon,kubectlretourne une erreur « non trouvé » avant que le serveur API n’atteigne le webhook d’autorisation).kubectl get authorizationpolicies.security.istio.io --all-namespaces
Nettoyer les ressources
Désactiver l’autorisation Entra ID
Supprimez l’autorisation Entra ID à l’aide de la
az aks updatecommande avec l’indicateur--disable-azure-rbac.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
Supprimer l’attribution de rôle
Répertorier les attributions de rôles à l’aide de la
az role assignment listcommande.az role assignment list --scope $AKS_ID --query [].id --output tsvSupprimez les attributions de rôles à l’aide de la
az role assignment deletecommande.az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Supprimer une définition de rôle
Supprimez une définition de rôle personnalisée à l’aide de la
az role definition deletecommande.az role definition delete --name "AKS Deployment Reader"
Supprimer un groupe de ressources et un cluster AKS
Supprimez le groupe de ressources (et le cluster AKS qu’il contient) à l’aide de la
az group deletecommande.az group delete --name $RESOURCE_GROUP --yes --no-wait
Étapes suivantes
Pour en savoir plus sur l’authentification, l’autorisation AKS, kubernetes RBAC et Azure RBAC, consultez :