Comment résoudre l'erreur « Votre utilisateur ou rôle actuel n'a pas accès aux objets Kubernetes sur ce cluster EKS » dans Amazon EKS ?

Dernière mise à jour : 06/04/2021

Le message d'erreur suivant s'affiche dans Amazon Elastic Kubernetes Service (Amazon EKS) : « Votre utilisateur ou rôle actuel n'a pas accès aux objets Kubernetes sur ce cluster EKS ».

Brève description

Ce message d'erreur apparaît lorsque vous utilisez la Console de gestion AWS avec un rôle ou un utilisateur AWS Identity and Access Management (IAM) qui ne figure pas dans l'objet ConfigMap aws-auth de votre cluster Amazon EKS.

Lorsque vous créez un cluster Amazon EKS, l'utilisateur ou le rôle IAM (tel qu'un utilisateur fédéré qui crée le cluster) reçoit automatiquement les autorisations system:masters dans la configuration RBAC du cluster. Si vous accédez à la console Amazon EKS et que votre utilisateur ou rôle IAM ne figure pas dans l'objet ConfigMap aws-auth, vous ne pouvez pas voir vos charges de travail Kubernetes ou les détails de présentation du cluster.

Pour permettre à d'autres utilisateurs ou rôles AWS d'interagir avec votre cluster, vous devez modifier l'objet ConfigMap aws-auth dans Kubernetes.

Résolution

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS (AWS CLI), vérifiez que vous utilisez la version la plus récente d'AWS CLI.

Configuration des autorisations pour les utilisateurs ou rôles IAM

1.    Afin de trouver le rôle de créateur ou d'administrateur du cluster qui dispose des autorisations principales pour configurer votre cluster, recherchez l'appel d'API CreateCluster dans AWS CloudTrail. Consultez ensuite la section userIdentity de l'appel d'API.

Remarque : CloudTrail ne fournit que 90 jours d'historique.

2.    Identifiez l'utilisateur ou le rôle IAM qui a besoin des autorisations.

3.    Vérifiez que l'utilisateur ou le rôle IAM identifié dispose des autorisations nécessaires pour afficher les nœuds et les charges de travail de tous les clusters dans la Console de gestion AWS.

Association des utilisateurs ou rôles IAM aux rôles et groupes RBAC à l'aide de l'objet ConfigMap aws-auth

Important : avant de vous connecter au serveur d'API Amazon EKS, installez et configurez la dernière version d'AWS CLI.

1.    Procurez-vous la configuration de votre utilisateur ou rôle AWS CLI :

$ aws sts get-caller-identity

La sortie renvoie le nom ARN (Amazon Resource Name) de l'utilisateur ou du rôle IAM. Par exemple :

{
    "UserId": "XXXXXXXXXXXXXXXXXXXXX",
    "Account": "XXXXXXXXXXXX",
    "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser"
}

2.    Vérifiez que le nom ARN correspond au créateur ou à l'administrateur du cluster qui dispose de l'accès principal pour configurer votre cluster. Si le nom ARN ne correspond pas au créateur ou à l'administrateur du cluster, contactez le créateur ou l'administrateur du cluster pour qu'il mette à jour l'objet ConfigMap aws-auth.

3.    Pour modifier l'objet ConfigMap aws-auth dans un éditeur de texte, le créateur ou l'administrateur du cluster doit exécuter la commande suivante :

$ kubectl edit configmap aws-auth -n kube-system

4.    Pour ajouter un utilisateur IAM ou un rôle IAM, suivez l'une des étapes suivantes.

Ajoutez l'utilisateur IAM à mapUsers. Par exemple :

mapUsers: |
  - userarn: arn:aws:iam::XXXXXXXXXXXX:user/testuser
  username: testuser
  groups:
    - system:bootstrappers
    - system:nodes

-ou-

Ajoutez le rôle IAM à mapRoles. Par exemple :

mapRoles: |
  - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole
  username: testrole    
  groups:
    - system:bootstrappers
    - system:nodes

Remarque : pour autoriser un accès superutilisateur permettant d'effectuer n'importe quelle opération sur n'importe quelle ressource, ajoutez system:masters au lieu de system:bootstrappers et system:nodes. Pour plus d'informations, consultez Rôles et liaisons de rôles par défaut sur le site Web de Kubernetes.

5.    Recherchez l'erreur dans la console Amazon EKS. Par exemple :

Error loading Namespaces
namespaces is forbidden: User "testuser" cannot list resource "namespaces" in API group "" at the cluster scope

Si le message d'erreur précédent apparaît, passez à la section Création d'un rôle de cluster et d'une liaison de rôle de cluster, ou d'un rôle et d'une liaison de rôle.

Création d'un rôle de cluster et d'une liaison de rôle de cluster, ou d'un rôle et d'une liaison de rôle

L'utilisateur ou le groupe Kubernetes auquel le compte ou le rôle IAM est associé dans l'objet ConfigMap doit être un sujet dans une liaison de rôle ou une liaison de rôle de cluster. Autrement dit, une liaison de rôle ou une liaison de rôle de cluster liée à un rôle ou à un rôle de cluster Kubernetes disposant des autorisations nécessaires pour afficher les ressources Kubernetes. Si l'utilisateur ou le groupe ne dispose pas des autorisations nécessaires, le message d'erreur suivant peut apparaître : « Non autorisé : vérifiez que vous avez accès au cluster Kubernetes ». Pour créer des rôles et des liaisons, consultez la section Utilisation de l'autorisation RBAC sur le site Web de Kubernetes.

Souvenez-vous de ceci : pour afficher les ressources Kubernetes dans tous les espaces de noms, vous devez créer un rôle de cluster et une liaison de rôle de cluster. Pour afficher les ressources Kubernetes dans un espace de noms spécifique, vous devez créer un rôle et une liaison de rôle pour cet espace de noms.

Pour créer un rôle de cluster et une liaison de rôle de cluster :

1.    Téléchargez le fichier manifeste :

https://s3.us-west-2.amazonaws.com/amazon-eks/docs/eks-console-full-access.yaml

Remarque : dans le fichier téléchargé, le nom du groupe est eks-console-dashboard-full-access-group. Il s'agit du groupe auquel votre utilisateur ou rôle IAM doit être associé dans l'objet ConfigMap aws-auth. Pour plus d'informations, consultez la section « Affichage des ressources Kubernetes dans tous les espaces de noms » de Gestion des utilisateurs ou des rôles IAM pour votre cluster.

2.    (Facultatif) Changez le nom du groupe avant de l'appliquer à votre cluster, puis associez votre utilisateur ou rôle IAM à ce groupe dans l'objet ConfigMap. Par exemple :

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: eks-console-dashboard-full-access-clusterrole
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  - namespaces
  - pods
  verbs:
  - get
  - list
- apiGroups:
  - apps
  resources:
  - deployments
  - daemonsets
  - statefulsets
  - replicasets
  verbs:
  - get
  - list
- apiGroups:
  - batch
  resources:
  - jobs
  verbs:
  - get
  - list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: eks-console-dashboard-full-access-binding
subjects:
- kind: Group
  name: eks-console-dashboard-full-access-group
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: eks-console-dashboard-full-access-clusterrole
  apiGroup: rbac.authorization.k8s.io

3.    Déployez le fichier manifeste :

$ kubectl apply -f eks-console-full-access.yaml

4.    Vérifiez la création des objets clusterrole et clusterrolebinding :

$ kubectl describe clusterrole.rbac.authorization.k8s.io/eks-console-dashboard-full-access-clusterrole
$ kubectl describe clusterrolebinding.rbac.authorization.k8s.io/eks-console-dashboard-full-access-binding

5.    Mettez à jour votre objet ConfigMap aws-auth avec le nouveau groupe eks-console-dashboard-full-access-group pour votre entité IAM :

$ kubectl edit configmap aws-auth -n kube-system

6.    Ajoutez l'utilisateur IAM à mapUsers. Par exemple :

mapUsers: |
  - userarn: arn:aws:iam::XXXXXXXXXXXX:user/testuser
  username: testuser
  groups:
    - system:bootstrappers
    - system:nodes
    - eks-console-dashboard-full-access-group

7.    Ajoutez le rôle IAM à mapRoles. Par exemple :

mapRoles: |
  - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole
  username: testrole    
  groups:
    - system:bootstrappers
    - system:nodes
    - eks-console-dashboard-full-access-group

Affichage des ressources Kubernetes dans un espace de noms spécifique

1.    Téléchargez le fichier manifeste :

https://s3.us-west-2.amazonaws.com/amazon-eks/docs/eks-console-restricted-access.yaml

Remarque : dans le fichier, le nom du groupe est eks-console-dashboard-restricted-access-group. Il s'agit du groupe auquel votre utilisateur ou rôle IAM doit être associé dans l'objet ConfigMap aws-auth. Pour plus d'informations, consultez la section « Affichage des ressources Kubernetes dans un espace de noms spécifique » de Gestion des utilisateurs ou des rôles IAM pour votre cluster.

2.    (Facultatif) Changez le nom du groupe avant de l'appliquer à votre cluster, puis associez votre utilisateur ou rôle IAM à ce groupe dans l'objet ConfigMap. Par exemple :

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: eks-console-dashboard-restricted-access-clusterrole
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  - namespaces
  verbs:
  - get
  - list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: eks-console-dashboard-restricted-access-clusterrole-binding
subjects:
- kind: Group
  name: eks-console-dashboard-restricted-access-group
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: eks-console-dashboard-restricted-access-clusterrole
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: eks-console-dashboard-restricted-access-role
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
- apiGroups:
  - apps
  resources:
  - deployments
  - daemonsets
  - statefulsets
  - replicasets
  verbs:
  - get
  - list
- apiGroups:
  - batch
  resources:
  - jobs
  verbs:
  - get
  - list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: eks-console-dashboard-restricted-access-role-binding
  namespace: default
subjects:
- kind: Group
  name: eks-console-dashboard-restricted-access-group
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: eks-console-dashboard-restricted-access-role
  apiGroup: rbac.authorization.k8s.io

Remarque : dans le fichier précédent, l'espace de noms est par défaut. Pour spécifier un autre espace de noms, modifiez le fichier avant de l'appliquer à votre cluster.

3.    Déployez le manifeste :

$ kubectl apply -f eks-console-restricted-access.yaml

4.    Vérifiez la création des objets clusterrole et clusterrolebinding :

$ kubectl describe clusterrole.rbac.authorization.k8s.io/eks-console-dashboard-restricted-access-clusterrole
$ kubectl describe clusterrolebinding.rbac.authorization.k8s.io/eks-console-dashboard-full-access-binding
$ kubectl describe role.rbac.authorization.k8s.io/eks-console-dashboard-restricted-access-role
$ kubectl describe rolebinding.rbac.authorization.k8s.io/eks-console-dashboard-restricted-access-role-binding

5.    Mettez à jour votre objet ConfigMap aws-auth avec le nouveau groupe eks-console-dashboard-restricted-access-group pour votre entité IAM :

$ kubectl edit configmap aws-auth -n kube-system

6.    Ajoutez l'utilisateur IAM à mapUsers. Par exemple :

mapUsers: |
  - userarn: arn:aws:iam::XXXXXXXXXXXX:user/testuser
  username: testuser
  groups:
    - system:bootstrappers
    - system:nodes
    - eks-console-dashboard-restricted-access-group

7.    Ajoutez le rôle IAM à mapRoles. Par exemple :

mapRoles: |
  - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole
  username: testrole    
  groups:
    - system:bootstrappers
    - system:nodes
    - eks-console-dashboard-restricted-access-group

Vérification de l'accès à votre cluster Amazon EKS

1.    Ouvrez la console Amazon EKS.

2.    Dans la section Amazon EKS du volet de navigation, choisissez Clusters.

3.    Choisissez votre cluster.

4.    Recherchez les erreurs dans les onglets Aperçu et Charges de travail. Vous ne devriez voir aucune erreur.

Si vous avez configuré un espace de noms spécifique, le message d'erreur suivant apparaît dans la console Amazon EKS :

Error loading Deployments
deployments.apps is forbidden: User "xxxxxx" cannot list resource "deployments" in API group "apps" at the cluster scope or in the namespace "xxxxxxx"

L'erreur n'apparaît pas pour l'espace de noms spécifique.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?