Contrôler l’accès à l’aide de l’ID Microsoft Entra et du RBAC Kubernetes pour Windows Server
S’applique à : AKS sur Azure Stack HCI 22H2, AKS sur Windows Server
Azure Kubernetes Service (AKS) peut être configuré pour utiliser Microsoft Entra ID pour une authentification utilisateur. Dans cette configuration, vous vous connectez à un cluster Kubernetes à l’aide d’un jeton d’authentification Microsoft Entra. Une fois authentifié, vous pouvez utiliser le contrôle d’accès en fonction du rôle Kubernetes (Kubernetes RBAC) intégré pour gérer l’accès aux espaces de noms et aux ressources de cluster en fonction de l’identité d’un utilisateur ou de l’appartenance à un groupe.
Cet article explique comment contrôler l’accès à l’aide du RBAC Kubernetes dans un cluster Kubernetes basé sur l’appartenance au groupe Microsoft Entra dans AKS Arc. Vous créez un groupe de démonstration et des utilisateurs dans Microsoft Entra ID. Ensuite, vous créez des rôles et des liaisons de rôle dans le cluster pour accorder les autorisations appropriées pour créer et afficher des ressources.
Prérequis
Avant de configurer Kubernetes RBAC à l’aide de l’ID Microsoft Entra, vous avez besoin des prérequis suivants :
- Un cluster Kubernetes créé dans AKS Arc. Si vous devez configurer votre cluster, consultez les instructions d’utilisation de Windows Admin Center ou de PowerShell pour déployer AKS.
- Connexion Azure Arc. Vous devez disposer d’une connexion Azure Arc à votre cluster Kubernetes. Pour plus d’informations sur l’activation d’Azure Arc, consultez Connecter un cluster Azure Kubernetes Service sur Azure Stack HCI à Kubernetes avec Azure Arc.
- Vous avez besoin d’accéder aux outils en ligne de commande suivants :
- Azure CLI et l’extension connectedk8s. Azure CLI est un ensemble de commandes utilisées pour créer et gérer des ressources Azure. Pour vérifier si vous disposez d’Azure CLI, ouvrez un outil de ligne de commande et tapez :
az -v
. Installez également l’extension connectedk8s pour ouvrir un canal sur votre cluster Kubernetes. Pour obtenir des instructions d’installation, consultez Comment installer Azure CLI. - Kubectl. Cet outil en ligne de commande Kubernetes vous permet d’exécuter des commandes ciblant vos clusters Kubernetes. Pour vérifier si vous avez installé kubectl, ouvrez une invite de commandes et tapez :
kubectl version --client
. Vérifiez que votre version du client kubectl est au moins la version v1.24.0. Pour obtenir des instructions d’installation, consultez kubectl. - PowerShell et le module PowerShell AksHci. PowerShell est une solution d’automatisation des tâches multiplateforme composée d’un interpréteur de commandes, d’un langage de script et d’une infrastructure de gestion de la configuration. Si vous avez installé AKS Arc, vous avez accès au module PowerShell AksHci .
- Pour accéder au cluster Kubernetes à partir de n’importe où avec un mode proxy à l’aide
az connectedk8s proxy
de la commande, vous avez besoin de l’autorisation de rôle utilisateur du cluster Kubernetes avec Microsoft.Kubernetes/connectedClusterS/listClusterUserCredential/action, qui est incluse dans l’autorisation de rôle d’utilisateur du cluster Kubernetes avec Azure Arc. Pendant ce temps, vous devez vérifier que les agents et la machine qui effectuent le processus d’intégration répondent aux exigences réseau requises dans les exigences réseau Kubernetes compatibles avec Azure Arc.
- Azure CLI et l’extension connectedk8s. Azure CLI est un ensemble de commandes utilisées pour créer et gérer des ressources Azure. Pour vérifier si vous disposez d’Azure CLI, ouvrez un outil de ligne de commande et tapez :
Étapes initiales facultatives
Si vous n’avez pas encore de groupe Microsoft Entra qui contient des membres, vous pouvez créer un groupe et ajouter des membres afin de pouvoir suivre les instructions de cet article.
Pour illustrer l’utilisation de l’ID Microsoft Entra et du RBAC Kubernetes, vous pouvez créer un groupe Microsoft Entra pour les développeurs d’applications qui peuvent être utilisés pour montrer comment Kubernetes RBAC et Microsoft Entra ID contrôlent l’accès aux ressources de cluster. Dans des environnements de production, vous pouvez utiliser des utilisateurs et groupes existants au sein d’un locataire Microsoft Entra.
Créer un groupe de démonstration dans l’ID Microsoft Entra
Tout d’abord, créez le groupe dans l’ID Microsoft Entra dans votre locataire pour les développeurs d’applications à l’aide de la az ad group create
commande. L’exemple suivant vous invite à vous connecter à votre locataire Azure, puis crée un groupe nommé appdev :
az login
az ad group create --display-name appdev --mail-nickname appdev
Ajouter des utilisateurs à votre groupe
Avec l’exemple de groupe créé dans l’ID Microsoft Entra pour les développeurs d’applications, ajoutez un utilisateur au appdev
groupe. Vous utilisez ce compte d’utilisateur pour vous connecter au cluster AKS et tester l’intégration RBAC Kubernetes.
Ajoutez un utilisateur au groupe appdev créé dans la section précédente à l’aide de la az ad group member add
commande. Si vous quittez votre session, reconnectez-vous à Azure à l’aide az login
de .
$AKSDEV_ID = az ad user create --display-name <name> --password <strongpassword> --user-principal-name <name>@contoso.onmicrosoft.com
az ad group member add --group appdev --member-id $AKSDEV_ID
Créer une liaison de rôle RBAC Kubernetes personnalisée sur la ressource de cluster AKS pour le groupe Microsoft Entra
Configurez le cluster AKS pour permettre à votre groupe Microsoft Entra d’accéder au cluster. Si vous souhaitez ajouter un groupe et des utilisateurs, consultez Créer des groupes de démonstration dans Microsoft Entra ID.
Obtenez les informations d’identification de l’administrateur de cluster à l’aide de la
Get-AksHciCredential
commande :Get-AksHciCredential -name <name-of-your-cluster>
Créez un espace de noms dans le cluster Kubernetes à l’aide de la
kubectl create namespace
commande. L'exemple suivant crée un espace de noms nommédev
:kubectl create namespace dev
Dans Kubernetes, les Roles définissent les autorisations à accorder, et les RoleBindings les appliquent aux utilisateurs ou groupes souhaités. Ces affectations peuvent être appliquées à un espace de noms donné ou sur l’ensemble d’un cluster. Pour plus d’informations, consultez Utilisation de l’autorisation Kubernetes RBAC.
Créez un rôle pour l’espace de noms de développement . Ce rôle accorde des autorisations complètes pour l’espace de noms. Dans les environnements de production, vous pouvez spécifier des autorisations plus granulaires pour différents utilisateurs ou groupes.
Créez un fichier nommé role-dev-namespace.yaml et copiez/collez le manifeste YAML suivant :
kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dev-user-full-access namespace: dev rules: - apiGroups: ["", "extensions", "apps"] resources: ["*"] verbs: ["*"] - apiGroups: ["batch"] resources: - jobs - cronjobs verbs: ["*"]
Créez le rôle à l’aide de la
kubectl apply
commande et spécifiez le nom de fichier de votre manifeste YAML :kubectl apply -f role-dev-namespace.yaml
Obtenez l’ID de ressource du groupe appdev à l’aide de la commande
az ad group show
. Ce groupe est défini comme sujet d’un RoleBinding à l’étape suivante :az ad group show --group appdev --query objectId -o tsv
La
az ad group show
commande retourne la valeur que vous utilisez commegroupObjectId
suit :38E5FA30-XXXX-4895-9A00-050712E3673A
Créez un fichier nommé rolebinding-dev-namespace.yaml, puis copiez/collez le manifeste YAML suivant. Vous établissez la liaison de rôle qui permet au groupe appdev d’utiliser le rôle pour l’accès à l’espace
role-dev-namespace
de noms. Sur la dernière ligne, remplacezgroupObjectId
par l’ID de l’objet du groupe produit par la commandeaz ad group show
:kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dev-user-access namespace: dev roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: dev-user-full-access subjects: - kind: Group namespace: dev name: groupObjectId
Conseil
Si vous souhaitez créer le RoleBinding pour un seul utilisateur, spécifiez
kind: User
et remplacezgroupObjectId
par le nom d’utilisateur principal (UPN) dans l’exemple.Créez roleBinding à l’aide de la
kubectl apply
commande et spécifiez le nom de fichier de votre manifeste YAML :kubectl apply -f rolebinding-dev-namespace.yaml
rolebinding.rbac.authorization.k8s.io/dev-user-access created
Utiliser des rôles RBAC Kubernetes intégrés pour votre ressource de cluster AKS
Kubernetes fournit également des rôles intégrés pour les utilisateurs. Ces rôles intégrés comprennent :
- Les rôles super-utilisateurs (cluster-admin)
- Les rôles destinés à être accordés à l’échelle du cluster à l’aide de ClusterRoleBindings
- Les rôles destinés à être accordés dans des espaces de noms particuliers à l’aide de RoleBindings (administration, modification, affichage)
Pour plus d’informations sur les rôles RBAC Kubernetes intégrés, consultez rôles RBAC Kubernetes.
Rôles pour les utilisateurs
ClusterRole par défaut | ClusterRoleBinding par défaut | Description |
---|---|---|
cluster-admin | Groupe system:masters | Permet à un super-utilisateur d’accéder à n’importe quelle action sur n’importe quelle ressource. Lorsqu’il est utilisé dans un ClusterRoleBinding, ce rôle donne un contrôle total sur chaque ressource du cluster et dans tous les espaces de noms. Lorsqu’il est utilisé dans un RoleBinding, il offre un contrôle total sur chaque ressource dans l’espace de noms de la liaison de rôle, y compris l’espace de noms lui-même. |
admin | Aucune | Autorise l’accès administrateur, destiné à être accordé dans un espace de noms à l’aide d’une liaison de rôle. Si elle est utilisée dans une liaison de rôle, autorise l’accès en lecture/écriture à la plupart des ressources d’un espace de noms, 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. Ce rôle n’autorise pas non plus l’accès en écriture aux points de terminaison dans les clusters créés à l’aide de Kubernetes v1.22+. Pour plus d’informations, consultez Accès en écriture pour les points de terminaison. |
edit | Aucune | 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 permet d’accéder aux secrets et aux pods en cours d’exécution en tant que ServiceAccount dans l’espace de noms. Il peut donc être utilisé pour obtenir les niveaux d’accès d’API de n’importe quel ServiceAccount dans l’espace de noms. Ce rôle n’autorise pas non plus l’accès en écriture aux points de terminaison dans les clusters créés à l’aide de Kubernetes v1.22+. Pour plus d’informations, consultez Accès en écriture pour les points de terminaison. |
view | Aucune | 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 des secrets, car la lecture du contenu des secrets permet d’accéder aux informations d’identification ServiceAccount dans l’espace de noms, ce qui autoriserait l’accès à l’API en tant que ServiceAccount dans l’espace de noms (forme d’escalade de privilèges). |
Utiliser un rôle RBAC Kubernetes intégré avec l’ID Microsoft Entra
Pour utiliser un rôle RBAC Kubernetes intégré avec l’ID Microsoft Entra, procédez comme suit :
Appliquez le rôle RBAC Kubernetes intégré
view
à votre groupe Microsoft Entra :kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --group=<Azure AD group object ID>
Appliquez le rôle RBAC Kubernetes intégré
view
à chacun de vos utilisateurs Microsoft Entra :kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --user=<Azure AD user object ID>
Utiliser des ressources de cluster à l’aide des ID Microsoft Entra
À présent, testez les autorisations attendues lorsque vous créez et gérez des ressources dans un cluster Kubernetes. Dans ces exemples, vous allez planifier et afficher des pods dans l’espace de noms attribué de l’utilisateur. Ensuite, vous essayez de planifier et d’afficher des pods en dehors de l’espace de noms affecté.
Connectez-vous à Azure à l’aide du
$AKSDEV_ID
compte d’utilisateur que vous avez spécifié comme entrée dans laaz ad group member add
commande. Exécutez laaz connectedk8s proxy
commande pour ouvrir un canal vers le cluster :az connectedk8s proxy -n <cluster-name> -g <resource-group>
Une fois le canal proxy établi, ouvrez une autre session et planifiez un pod NGINX à l’aide de la
kubectl run
commande dans l’espace de noms de développement :kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev
Lorsque NGINX est correctement planifié, vous devez voir la sortie suivante :
pod/nginx-dev created
Utilisez maintenant la
kubectl get pods
commande pour afficher les pods dans l’espacedev
de noms :kubectl get pods --namespace dev
Une fois NGINX en cours d’exécution, la sortie suivante doit s’afficher :
NAME READY STATUS RESTARTS AGE nginx-dev 1/1 Running 0 4m
Créer et afficher des ressources de cluster en dehors de l’espace de noms affecté
Pour tenter d’afficher des pods en dehors de l’espace de noms de développement , utilisez la kubectl get pods
commande avec l’indicateur --all-namespaces
:
kubectl get pods --all-namespaces
L’appartenance au groupe de l’utilisateur n’a pas de rôle Kubernetes qui autorise cette action. Sans l’autorisation, la commande génère une erreur :
Error from server (Forbidden): pods is forbidden: User cannot list resource "pods" in API group "" at the cluster scope