Intégration d’Azure Active Directory géré par AKS
L’intégration d’Azure AD géré par AKS simplifie le processus d’intégration d’Azure AD. Auparavant, les utilisateurs devaient créer une application cliente et une application serveur, et nécessitaient que le locataire Azure AD accorde des autorisations de lecture d’annuaire. Dans la nouvelle version, le fournisseur de ressources AKS gère les applications cliente et serveur pour vous.
Vue d’ensemble de l’authentification Azure AD
Les administrateurs de cluster peuvent configurer le contrôle d’accès en fonction du rôle Kubernetes (RBAC Kubernetes) en se basant sur l’identité ou l’appartenance à un groupe d’annuaires de l’utilisateur. L’authentification Azure AD est fournie aux clusters AKS à l’aide d’OpenID Connect. OpenID Connect est une couche d’identité basée sur le protocole OAuth 2.0. Pour plus d’informations sur OpenID Connect, voir la documentation sur Open ID Connect.
Pour en savoir plus sur le flux de l’intégration d’Azure AD, consultez la documentation sur les concepts d’intégration d’Azure Active Directory.
Limites
- L’intégration d’Azure AD géré par AKS ne peut pas être désactivée.
- La modification d’un cluster intégré Azure AD géré par AKS vers un cluster AAD hérité n’est pas prise en charge
- Les clusters sans RBAC Kubernetes activé ne sont pas pris en charge pour l’intégration d’Azure AD géré par AKS
Prérequis
- Azure CLI version 2.29.0 ou ultérieure
- Kubectl avec une version minimale 1.18.1 ou kubelogin
- Si vous utilisez helm, version minimale de helm 3.3.
Important
Vous devez utiliser Kubectl avec une version minimale 1.18.1 ou kubelogin. La différence entre les versions mineures de Kubernetes et kubectl ne doit pas être supérieure à 1 version. Si vous n’utilisez pas la version appropriée, vous remarquerez des problèmes d’authentification.
Pour installer kubectl et kubelogin, utilisez les commandes suivantes :
sudo az aks install-cli
kubectl version --client
kubelogin --version
Pour d’autres systèmes d’exploitation, utilisez ces instructions.
Avant de commencer
Pour votre cluster, vous avez besoin d’un groupe Azure AD. Ce groupe sera inscrit en tant que groupe d’administration sur le cluster pour accorder des autorisations d’administration de cluster. Vous pouvez utiliser un groupe Azure AD existant ou en créer un. Enregistrez l’ID d’objet de votre groupe Azure AD.
# List existing groups in the directory
az ad group list --filter "displayname eq '<group-name>'" -o table
Pour créer un groupe Azure AD pour vos administrateurs de cluster, utilisez la commande suivante :
# Create an Azure AD group
az ad group create --display-name myAKSAdminGroup --mail-nickname myAKSAdminGroup
Créer un cluster AKS compatible Azure AD
Créez un cluster AKS à l’aide des commandes CLI suivantes.
Créez un groupe de ressources Azure :
# Create an Azure resource group
az group create --name myResourceGroup --location centralus
Créer un cluster AKS et activer l’accès administrateur pour votre groupe Azure AD
# Create an AKS-managed Azure AD cluster
az aks create -g myResourceGroup -n myManagedCluster --enable-aad --aad-admin-group-object-ids <id> [--aad-tenant-id <id>]
Lorsqu’un cluster Azure AD géré par AKS a bien été créé, vous voyez la section suivante dans le corps de la réponse.
"AADProfile": {
"adminGroupObjectIds": [
"5d24****-****-****-****-****afa27aed"
],
"clientAppId": null,
"managed": true,
"serverAppId": null,
"serverAppSecret": null,
"tenantId": "72f9****-****-****-****-****d011db47"
}
Une fois le cluster créé, vous pouvez commencer à y accéder.
Accéder à un cluster compatible Azure AD
Pour accéder au cluster à l’aide d’un groupe défini par Azure AD, vous avez besoin du rôle intégré d’utilisateur de cluster Azure Kubernetes Service.
Récupérez les informations d’identification d’utilisateur permettant d’accéder au cluster :
az aks get-credentials --resource-group myResourceGroup --name myManagedCluster
Suivez les instructions pour vous connecter.
Utilisez la commande kubectl get nodes pour voir les nœuds figurant dans le cluster :
kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-nodepool1-15306047-0 Ready agent 102m v1.15.10
aks-nodepool1-15306047-1 Ready agent 102m v1.15.10
aks-nodepool1-15306047-2 Ready agent 102m v1.15.10
Configurez le contrôle d’accès en fonction du rôle Azure (Azure RBAC) afin de configurer des groupes de sécurité supplémentaires pour vos clusters.
Résolution des problèmes d’accès avec Azure AD
Important
Les étapes décrites ci-dessous contournent l’authentification normale des groupes Azure AD. Effectuez ces étapes uniquement en cas d’urgence.
Si vous restez bloqué sans pouvoir accéder à aucun groupe Azure AD valide ayant accès à votre cluster, vous pouvez obtenir les informations d’identification d’administrateur qui vous permettront d’accéder au cluster directement.
Pour effectuer ces étapes, vous devez avoir accès au rôle intégré Azure Kubernetes Service Cluster Admin.
az aks get-credentials --resource-group myResourceGroup --name myManagedCluster --admin
Activer l’intégration de Azure AD géré par AKS sur votre cluster existant
Vous pouvez activer l’intégration d’Azure AD géré par AKS sur votre cluster avec RBAC Kubernetes existant. Veillez à définir votre groupe d’administration pour conserver l’accès à votre cluster.
az aks update -g MyResourceGroup -n MyManagedCluster --enable-aad --aad-admin-group-object-ids <id-1> [--aad-tenant-id <id>]
Lorsqu’un cluster Azure AD géré par AKS a bien été activé, vous voyez la section suivante dans le corps de la réponse
"AADProfile": {
"adminGroupObjectIds": [
"5d24****-****-****-****-****afa27aed"
],
"clientAppId": null,
"managed": true,
"serverAppId": null,
"serverAppSecret": null,
"tenantId": "72f9****-****-****-****-****d011db47"
}
Téléchargez à nouveau les informations d’identification de l’utilisateur pour accéder à votre cluster en suivant les étapes ici.
Mise à niveau vers l’intégration d’Azure AD géré par AKS
Si votre cluster utilise l’intégration d’Azure AD héritée, vous pouvez effectuer la mise à niveau vers l’intégration d’Azure AD géré par AKS.
az aks update -g myResourceGroup -n myManagedCluster --enable-aad --aad-admin-group-object-ids <id> [--aad-tenant-id <id>]
Lorsqu’un cluster Azure AD géré par AKS a bien été migré, vous voyez la section suivante dans le corps de la réponse.
"AADProfile": {
"adminGroupObjectIds": [
"5d24****-****-****-****-****afa27aed"
],
"clientAppId": null,
"managed": true,
"serverAppId": null,
"serverAppSecret": null,
"tenantId": "72f9****-****-****-****-****d011db47"
}
Mettez à jour kubeconfig pour accéder au cluster. Suivez les étapes décrites ici.
Connexion non interactive avec kubelogin
Certains scénarios non interactifs, tels que les pipelines d’intégration continue, ne sont pas possibles avec kubectl. Utilisez kubelogin
pour accéder au cluster à l’aide d’une connexion non interactive avec le principal de service.
Désactiver les comptes locaux
Lors du déploiement d’un cluster AKS, les comptes locaux sont activés par défaut. Même lors de l’activation de l’intégration RBAC ou Azure Active Directory, l’accès à --admin
existe toujours, essentiellement comme une option d’accès par porte dérobée ne pouvant pas être auditée. Dans cette optique, AKS offre aux utilisateurs la possibilité de désactiver les comptes locaux via un indicateur, disable-local-accounts
. Un champ properties.disableLocalAccounts
a également été ajouté à l’API de cluster géré pour indiquer si la fonctionnalité a été activée sur le cluster.
Notes
Sur les clusters sur lesquels l’intégration Azure AD est activée, les utilisateurs qui appartiennent à un groupe spécifié par aad-admin-group-object-ids
disposeront toujours d’un accès via des informations d’identification non-administrateur. Sur les clusters sans intégration Azure AD activée et pour lesquels properties.disableLocalAccounts
est définie sur true, l’obtention d’informations d’identification échouera à la fois pour l’utilisateur et l’administrateur.
Notes
Après la désactivation de comptes locaux sur un cluster AKS existant où des utilisateurs ont peut-être utilisé un ou plusieurs comptes locaux, l’administrateur doit effectuer une rotation des certificats de cluster afin de révoquer les certificats auxquels ces utilisateurs peuvent avoir accès. S’il s’agit d’un nouveau cluster, aucune action n’est nécessaire.
Créer un nouveau cluster sans comptes locaux
Pour créer un nouveau cluster AKS sans comptes locaux, utilisez la commande az aks create avec l’indicateur disable-local-accounts
:
az aks create -g <resource-group> -n <cluster-name> --enable-aad --aad-admin-group-object-ids <aad-group-id> --disable-local-accounts
Dans la sortie, assurez-vous que les comptes locaux ont été désactivés en vérifiant que le champ properties.disableLocalAccounts
est défini sur true :
"properties": {
...
"disableLocalAccounts": true,
...
}
La tentative d’obtenir des informations d’identification de l’administrateur échouera avec un message d’erreur indiquant que la fonctionnalité empêche l’accès :
az aks get-credentials --resource-group <resource-group> --name <cluster-name> --admin
Operation failed with status: 'Bad Request'. Details: Getting static credential is not allowed because this cluster is set to disable local accounts.
Désactiver les comptes locaux sur un cluster existant
Pour désactiver les comptes locaux sur un cluster AKS existant, utilisez la commande az aks update avec l’indicateur disable-local-accounts
:
az aks update -g <resource-group> -n <cluster-name> --enable-aad --aad-admin-group-object-ids <aad-group-id> --disable-local-accounts
Dans la sortie, assurez-vous que les comptes locaux ont été désactivés en vérifiant que le champ properties.disableLocalAccounts
est défini sur true :
"properties": {
...
"disableLocalAccounts": true,
...
}
La tentative d’obtenir des informations d’identification de l’administrateur échouera avec un message d’erreur indiquant que la fonctionnalité empêche l’accès :
az aks get-credentials --resource-group <resource-group> --name <cluster-name> --admin
Operation failed with status: 'Bad Request'. Details: Getting static credential is not allowed because this cluster is set to disable local accounts.
Réactiver les comptes locaux sur un cluster existant
AKS offre également la possibilité de réactiver les comptes locaux sur un cluster existant avec l’indicateur enable-local
:
az aks update -g <resource-group> -n <cluster-name> --enable-aad --aad-admin-group-object-ids <aad-group-id> --enable-local
Dans la sortie, assurez-vous que les comptes locaux ont été réactivés en vérifiant que le champ properties.disableLocalAccounts
est défini sur false :
"properties": {
...
"disableLocalAccounts": false,
...
}
La tentative d’accès aux informations d’identification d’administrateur réussira :
az aks get-credentials --resource-group <resource-group> --name <cluster-name> --admin
Merged "<cluster-name>-admin" as current context in C:\Users\<username>\.kube\config
Utiliser l’accès conditionnel avec Azure AD et AKS
Lorsque vous intégrez Azure AD à votre cluster AKS, vous pouvez également utiliser l’accès conditionnel pour contrôler l’accès à votre cluster.
Notes
L’accès conditionnel Azure AD est une fonctionnalité Azure AD Premium.
Pour créer un exemple de stratégie d’accès conditionnel à utiliser avec AKS, procédez comme suit :
- En haut du portail Azure, recherchez et sélectionnez Azure Active Directory.
- Dans le menu Azure Active Directory sur le côté gauche, sélectionnez Applications d’entreprise.
- Dans le menu Applications d’entreprise sur le côté gauche, sélectionnez Accès conditionnel.
- Dans le menu Accès conditionnel sur le côté gauche, sélectionnez Stratégies puis Nouvelle stratégie.
- Entrez le nom de la stratégie, par exemple aks-policy.
- Sélectionnez Utilisateurs et groupes, puis sous Inclure sélectionnez Sélectionner des utilisateurs et des groupes. Choisissez les utilisateurs et les groupes auxquels vous souhaitez appliquer la stratégie. Pour cet exemple, choisissez le groupe Azure AD qui dispose déjà d’un accès d’administration à votre cluster.
- Sélectionnez Applications ou actions cloud, puis sous Inclure sélectionnez Sélectionner des applications. Recherchez Azure Kubernetes Service et sélectionnez Serveur AAD Azure Kubernetes Service.
- Sous Contrôles d’accès, sélectionnez Accorder. Sélectionnez Accorder l’accès puis Exiger que l’appareil soit marqué comme conforme.
- Sous Activer une stratégie, sélectionnez Activé, puis Créer.
Récupérez les informations d’identification d’utilisateur permettant d’accéder au cluster, par exemple :
az aks get-credentials --resource-group myResourceGroup --name myManagedCluster
Suivez les instructions pour vous connecter.
Exécutez la commande kubectl get nodes
pour afficher les nœuds du cluster :
kubectl get nodes
Suivez les instructions pour vous reconnecter. Notez qu’un message d’erreur s’affiche, indiquant que vous êtes correctement connecté, mais que votre administrateur requiert que l’appareil demandant l’accès soit géré par votre instance Azure AD pour accéder à la ressource.
Dans le portail Azure, accédez à Azure Active Directory, sélectionnez Applications d’entreprise, puis sous Activité, sélectionnez Connexions. Notez une entrée en haut avec l’étatÉchec et l’accès conditionnelRéussite. Sélectionnez l’entrée, puis Accès conditionnel dans Détails. Notez que votre stratégie d’accès conditionnel est indiquée.
Configurer un accès juste-à-temps au cluster avec Azure AD et AKS
Une autre option pour le contrôle d’accès aux clusters consiste à utiliser Privileged Identity Management (PIM) pour les requêtes juste-à-temps.
Notes
PIM est une fonctionnalité Azure AD Premium nécessitant une référence SKU P2 Premium. Pour plus d’informations sur les références SKU Azure AD, consultez le Guide de tarification.
Pour intégrer des demandes d’accès juste-à-temps à un cluster AKS à l’aide de l’intégration d’Azure AD gérée par AKS, procédez comme suit :
- En haut du portail Azure, recherchez et sélectionnez Azure Active Directory.
- Prenez note de l’ID de locataire, référencé pour le reste de ces instructions, comme
<tenant-id>
- Dans le menu de Azure Active Directory sur le côté gauche, sous Gérer sélectionner Groupes, puis Nouveau groupe.
- Assurez-vous qu’un Type de groupe de Sécurité est sélectionné et entrez un nom de groupe, comme myJITGroup. Sous Rôles Azure AD pouvant être attribués à ce groupe (préversion) , sélectionnez Oui. Pour finir, sélectionnez Créer.
- Vous serez redirigé vers la page Groupes. Sélectionnez le groupe que vous venez de créer et prenez note de l’ID d’objet, référencé pour le reste de ces instructions sous la forme de
<object-id>
. - Déployez un cluster AKS avec l’intégration de Azure AD gérée par AKS à l’aide des valeurs
<tenant-id>
et<object-id>
:az aks create -g myResourceGroup -n myManagedCluster --enable-aad --aad-admin-group-object-ids <object-id> --aad-tenant-id <tenant-id>
- De retour dans le Portail Azure, dans le menu de Activité sur le côté gauche, sélectionnez Accès privilégié (préversion) et cliquez sur Activer l’accès privilégié.
- Sélectionnez Ajouter des affectations pour commencer à accorder l’accès.
- Sélectionnez un rôle de membre, puis choisissez les utilisateurs et les groupes auxquels vous souhaitez accorder l’accès au cluster. Un administrateur de groupe peut modifier ces affectations à tout moment. Quand vous êtes prêt à continuer, choisissez Suivant.
- Choisissez un type d’affectation Actif, la durée souhaitée et fournissez une justification. Lorsque vous êtes prêt à continuer, sélectionnez Attribuer. Pour plus d’informations sur les types d’affectations, consultez Attribuer l’éligibilité à l’appartenance ou la propriété d’un groupe d’accès privilégié (préversion) dans Privileged Identity Management.
Une fois les attributions effectuées, vérifiez que l’accès juste-à-temps fonctionne en accédant au cluster. Par exemple :
az aks get-credentials --resource-group myResourceGroup --name myManagedCluster
Suivez les étapes pour vous connecter.
Exécutez la commande kubectl get nodes
pour afficher les nœuds du cluster :
kubectl get nodes
Notez la configuration requise pour l’authentification et suivez les étapes pour vous authentifier. Le résultat devrait ressembler à ce qui suit :
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
NAME STATUS ROLES AGE VERSION
aks-nodepool1-61156405-vmss000000 Ready agent 6m36s v1.18.14
aks-nodepool1-61156405-vmss000001 Ready agent 6m42s v1.18.14
aks-nodepool1-61156405-vmss000002 Ready agent 6m33s v1.18.14
Appliquer l’accès juste-à-temps au niveau de l’espace de noms
- Intégrez votre cluster AKS au contrôle d’accès en fonction du rôle (RBAC) Azure.
- Associez le groupe que vous voulez intégrer à l’accès juste-à-temps à un espace de noms du cluster par le biais de l’attribution de rôle.
az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
- Associez le groupe que vous venez de configurer au niveau de l’espace de noms avec PIM pour terminer la configuration.
Dépannage
Si kubectl get nodes
renvoie une erreur similaire à ce qui suit :
Error from server (Forbidden): nodes is forbidden: User "aaaa11111-11aa-aa11-a1a1-111111aaaaa" cannot list resource "nodes" in API group "" at the cluster scope
Assurez-vous que l’administrateur du groupe de sécurité a donné à votre compte une attribution Active.
Étapes suivantes
- Apprenez-en davantage sur l’intégration d’Azure RBAC pour l’autorisation Kubernetes.
- Apprenez-en davantage sur l’intégration d’Azure AD avec Kubernetes RBAC.
- Utilisez kubelogin pour accéder aux fonctionnalités de l’authentification Azure non disponibles dans kubectl.
- Apprenez-en davantage sur les concepts d’identité AKS et Kubernetes.
- Utilisez des modèles ARM (Azure Resource Manager) pour créer des clusters avec Azure AD géré par AKS.