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

Date de la dernière mise à jour : 28/07/2021

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

Brève description

Cette erreur s'affiche lorsque vous utilisez la console de gestion AWS avec un utilisateur ou un rôle AWS Identity and Access Management (IAM). L'erreur se produit spécifiquement avec un utilisateur ou un rôle IAM non identifié dans le ConfigMap aws-auth de votre cluster Amazon EKS.

Lorsque vous créez un cluster Amazon EKS, l'utilisateur ou le rôle IAM reçoit automatiquement des autorisations system:masters dans la configuration RBAC du cluster. Par exemple, l'utilisateur ou le rôle IAM peut être un utilisateur fédéré qui crée le cluster. Vous ne pouvez pas voir vos applications Kubernetes si vous accédez à la console Amazon EKS avec des utilisateurs IAM ou des rôles non identifiés par ConfigMap aws-auth. Vous ne pouvez non plus accéder aux détails de la 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 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 super-utilisateur permettant d'effectuer n'importe quelle opération sur n'importe quelle ressource, sélectionnez 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éer un rôle de cluster et une liaison de rôle de cluster, ou un rôle et une liaison de rôle

L'utilisateur ou le groupe Kubernetes auquel le compte ou le rôle IAM est mappé dans ConfigMap doit être un sujet dans une liaison de rôle. L'utilisateur ou le groupe peut également être un sujet dans une liaison de rôle de cluster. Autrement dit, une liaison de rôle ou une liaison de rôle de cluster associé à 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 bénéficie pas d'un accès total, le message d'erreur suivant pourrait s'afficher : « 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.

Rappelez-vous toujours que 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) Modifiez le nom du groupe avant d'appliquer le fichier manifeste que vous avez téléchargé à l'étape 1 à votre cluster. Ensuite, associez votre utilisateur ou votre rôle IAM à ce groupe dans 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) Modifiez le nom du groupe avant de l'appliquer à votre cluster. Ensuite, associez votre utilisateur ou votre rôle IAM à ce groupe dans 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 Présentation et Applications.

Si vous avez configuré un espace de noms spécifique, le message d'erreur suivant s'affiche 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.

Pour corriger l'erreur, allez à Impossible de voir les applications ou les nœuds et de recevoir une erreur dans la console de gestion AWS.


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


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