Comment résoudre l'erreur 'unauthorized' lors de l'application d'une ressource Kubernetes

KubernetesKubernetesBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Ce tutoriel fournit un guide complet pour comprendre et configurer le contrôle d'accès basé sur les rôles (Role-Based Access Control - RBAC) dans Kubernetes. Le RBAC est un mécanisme puissant qui vous permet de contrôler et de gérer l'accès aux ressources Kubernetes, garantissant ainsi la sécurité et l'intégrité de votre cluster. Vous allez apprendre les concepts clés du RBAC, comment créer et gérer les Rôles (Roles), les Liaisons de rôle (RoleBindings), les Rôles de cluster (ClusterRoles) et les Liaisons de rôle de cluster (ClusterRoleBindings), ainsi que comment résoudre les erreurs d'autorisation.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/ConfigurationandVersioningGroup(["Configuration and Versioning"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("Exec") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/logs("Logs") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/config("Config") subgraph Lab Skills kubernetes/get -.-> lab-417506{{"Comment résoudre l'erreur 'unauthorized' lors de l'application d'une ressource Kubernetes"}} kubernetes/describe -.-> lab-417506{{"Comment résoudre l'erreur 'unauthorized' lors de l'application d'une ressource Kubernetes"}} kubernetes/exec -.-> lab-417506{{"Comment résoudre l'erreur 'unauthorized' lors de l'application d'une ressource Kubernetes"}} kubernetes/logs -.-> lab-417506{{"Comment résoudre l'erreur 'unauthorized' lors de l'application d'une ressource Kubernetes"}} kubernetes/config -.-> lab-417506{{"Comment résoudre l'erreur 'unauthorized' lors de l'application d'une ressource Kubernetes"}} end

Comprendre le RBAC de Kubernetes

Le RBAC (Role-Based Access Control - Contrôle d'accès basé sur les rôles) de Kubernetes est un mécanisme puissant qui vous permet de contrôler et de gérer l'accès aux ressources Kubernetes. Il offre un moyen de définir qui peut effectuer quelles actions sur quelles ressources au sein de votre cluster Kubernetes.

Concepts du RBAC

Dans le RBAC de Kubernetes, il y a quelques concepts clés à comprendre :

  1. Sujets (Subjects) : Les entités qui peuvent effectuer des actions, telles que des utilisateurs, des groupes ou des comptes de service.
  2. Rôles (Roles) : Des définitions d'opérations autorisées sur les ressources, telles que "lecture", "écriture" ou "administration".
  3. Liaisons (Bindings) : Les associations entre les sujets et les rôles, accordant aux sujets les autorisations définies dans les rôles.

Le RBAC en action

Pour illustrer le fonctionnement du RBAC, considérons un exemple simple. Supposons que vous avez un cluster Kubernetes et que vous souhaitez accorder à un utilisateur nommé "alice" la possibilité de visualiser et de gérer les pods dans l'espace de noms "default".

Tout d'abord, vous allez créer un Rôle qui définit les autorisations nécessaires :

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-manager
rules:
  - apiGroups: [""] ## "" indique le groupe d'API de base
    resources: ["pods"]
    verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

Ensuite, vous allez créer une Liaison de rôle (RoleBinding) qui associe l'utilisateur "alice" au rôle "pod-manager" :

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: default
  name: alice-pod-manager
subjects:
  - kind: User
    name: alice
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-manager
  apiGroup: rbac.authorization.k8s.io

Avec cette configuration, l'utilisateur "alice" pourra effectuer les actions spécifiées sur les pods dans l'espace de noms "default".

Configurer le RBAC dans Kubernetes

Configurer le RBAC dans Kubernetes consiste à créer et à gérer des Rôles (Roles), des Rôles de cluster (ClusterRoles), des Liaisons de rôle (RoleBindings) et des Liaisons de rôle de cluster (ClusterRoleBindings) pour accorder les autorisations souhaitées aux sujets (utilisateurs, groupes ou comptes de service).

Définir les Rôles et les Rôles de cluster

Les Rôles et les Rôles de cluster définissent les opérations autorisées sur les ressources Kubernetes. La différence entre eux est que les Rôles sont limités à un espace de noms spécifique, tandis que les Rôles de cluster s'appliquent à l'ensemble du cluster.

Voici un exemple d'un Rôle qui accorde l'accès en lecture aux pods dans l'espace de noms "default" :

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
  - apiGroups: [""] ## "" indique le groupe d'API de base
    resources: ["pods"]
    verbs: ["get", "list", "watch"]

Et un exemple d'un Rôle de cluster qui accorde l'accès d'administrateur à l'ensemble du cluster :

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-admin
rules:
  - apiGroups: ["*"]
    resources: ["*"]
    verbs: ["*"]

Lier les Rôles et les Rôles de cluster

Les Liaisons de rôle et les Liaisons de rôle de cluster associent les Rôles ou les Rôles de cluster aux Sujets, accordant les autorisations spécifiées.

Voici un exemple d'une Liaison de rôle qui accorde le rôle "pod-reader" à l'utilisateur "alice" dans l'espace de noms "default" :

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: default
  name: alice-pod-reader
subjects:
  - kind: User
    name: alice
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

Et un exemple d'une Liaison de rôle de cluster qui accorde le rôle "cluster-admin" au groupe "admin" sur l'ensemble du cluster :

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-cluster-admin
subjects:
  - kind: Group
    name: admin
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

Résoudre les erreurs d'autorisation

Lorsque vous travaillez avec le RBAC de Kubernetes, vous pouvez rencontrer des erreurs "Unauthorized" (non autorisé), qui indiquent que le sujet (utilisateur, groupe ou compte de service) n'a pas les autorisations nécessaires pour effectuer l'action demandée. La résolution de ces erreurs consiste à comprendre la cause racine et à ajuster la configuration RBAC en conséquence.

Identifier le problème

La première étape pour résoudre les erreurs d'autorisation est d'identifier l'action spécifique que le sujet essaie d'effectuer et la ressource à laquelle il essaie d'accéder. Vous pouvez souvent trouver ces informations dans le message d'erreur ou en vérifiant les journaux d'audit de Kubernetes.

Par exemple, un message d'erreur d'autorisation pourrait ressembler à ceci :

User "alice" cannot get pods in the namespace "default"

Cela indique que l'utilisateur "alice" essaie d'accéder à la ressource "pods" dans l'espace de noms "default", mais n'a pas les autorisations nécessaires.

Vérifier la configuration RBAC

Une fois que vous avez identifié le problème, vous pouvez commencer à examiner la configuration RBAC pour déterminer la cause racine. Vous pouvez utiliser les commandes suivantes pour inspecter les Rôles (Roles), les Rôles de cluster (ClusterRoles), les Liaisons de rôle (RoleBindings) et les Liaisons de rôle de cluster (ClusterRoleBindings) pertinents :

kubectl get roles -n default
kubectl get rolebindings -n default
kubectl get clusterroles
kubectl get clusterrolebindings

En examinant les autorisations configurées, vous pouvez identifier tout écart ou mauvaise configuration qui cause l'erreur d'autorisation.

Résoudre les erreurs d'autorisation

Pour résoudre l'erreur d'autorisation, vous devrez mettre à jour la configuration RBAC pour accorder les autorisations nécessaires au sujet. Cela peut impliquer la création d'un nouveau Rôle ou Rôle de cluster, ou la modification d'un existant, puis la liaison du rôle au sujet approprié.

Par exemple, pour accorder à l'utilisateur "alice" l'accès en lecture aux pods dans l'espace de noms "default", vous pouvez créer une Liaison de rôle comme suit :

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: default
  name: alice-pod-reader
subjects:
  - kind: User
    name: alice
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

Après avoir appliqué cette configuration, l'utilisateur "alice" devrait être en mesure d'effectuer l'action demandée sans rencontrer d'erreurs d'autorisation.

Résumé

Dans ce tutoriel, vous avez appris à configurer le RBAC dans Kubernetes pour gérer les autorisations et sécuriser votre cluster. Vous avez exploré les concepts clés du RBAC, notamment les Sujets (Subjects), les Rôles (Roles) et les Liaisons (Bindings), et appliqué des exemples pratiques pour accorder aux utilisateurs, groupes et comptes de service l'accès nécessaire aux ressources Kubernetes. En comprenant et en configurant correctement le RBAC, vous pouvez vous assurer que seules les entités autorisées peuvent effectuer des actions dans votre environnement Kubernetes, améliorant ainsi la sécurité globale et le contrôle de votre cluster.