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 :

  1. En haut du portail Azure, recherchez et sélectionnez Azure Active Directory.
  2. Dans le menu Azure Active Directory sur le côté gauche, sélectionnez Applications d’entreprise.
  3. Dans le menu Applications d’entreprise sur le côté gauche, sélectionnez Accès conditionnel.
  4. Dans le menu Accès conditionnel sur le côté gauche, sélectionnez Stratégies puis Nouvelle stratégie. Ajout d’une stratégie d’accès conditionnel
  5. Entrez le nom de la stratégie, par exemple aks-policy.
  6. 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élection d’utilisateurs ou de groupes pour appliquer la stratégie d’accès conditionnel
  7. 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. Sélection du serveur AD Azure Kubernetes Service pour appliquer la stratégie d’accès conditionnel
  8. Sous Contrôles d’accès, sélectionnez Accorder. Sélectionnez Accorder l’accès puis Exiger que l’appareil soit marqué comme conforme. Sélection de l’option Autoriser uniquement les appareils conformes pour la stratégie d’accès conditionnel
  9. Sous Activer une stratégie, sélectionnez Activé, puis Créer. Activation de la stratégie d’accès conditionnel

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.

Entrée de connexion ayant échoué en raison d’une stratégie d’accès conditionnel

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 :

  1. En haut du portail Azure, recherchez et sélectionnez Azure Active Directory.
  2. Prenez note de l’ID de locataire, référencé pour le reste de ces instructions, comme <tenant-id>Dans un navigateur web, l’écran du portail Azure pour Azure Active Directory s’affiche avec l’ID du locataire mis en évidence.
  3. Dans le menu de Azure Active Directory sur le côté gauche, sous Gérer sélectionner Groupes, puis Nouveau groupe. Affiche l’écran des groupes Active Directory du Portail Azure avec l’option « Nouveau groupe » en surbrillance.
  4. 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. Affiche l’écran de création du groupe dans le Portail Azure.
  5. 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>. Affiche l’écran de Portail Azure pour le groupe que vous venez de créer, en mettant en surbrillance l’ID de l’objet
  6. 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>
    
  7. 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é. La page Accès privilégié du Portail Azure (préversion) s’affiche, avec « Activer l’accès privilégié » en surbrillance
  8. Sélectionnez Ajouter des affectations pour commencer à accorder l’accès. L’écran Accès privilégié du Portail Azure (préversion) après l’activation s’affiche. L’option « Ajouter des affectations » est mis en surbrillance.
  9. 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. L’écran Ajouter des affectations > Appartenance du Portail Azure s’affiche, avec un utilisateur sélectionné pour être ajouté en tant que membre (exemple). L’option « Suivant » est mis en surbrillance.
  10. 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. L’écran Ajouter des affectations > Paramètres du Portail Azure s’affiche. Un type d’affectation « Actif » est sélectionné et une justification a été donnée (exemple). L’option « Attribuer » est mis en surbrillance.

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

  1. Intégrez votre cluster AKS au contrôle d’accès en fonction du rôle (RBAC) Azure.
  2. 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>
  1. 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