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 ?

Dernière mise à jour : 24/01/2023

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 peut s'afficher lorsque vous utilisez la Console de gestion AWS avec un utilisateur ou un rôle AWS Identity & Access Management (IAM). L'erreur indique que l'utilisateur ou le rôle IAM ne dispose pas des autorisations RBAC (depuis le site Web de Kubernetes) requises pour accéder à l'API Kubernetes. Pour consulter les ressources Kubernetes sur la Console de gestion AWS, votre utilisateur ou votre rôle AWS IAM doit être mappé à aws-auth ConfigMap dans votre cluster Amazon EKS.

Lorsque vous créez un cluster Amazon EKS, les autorisations system:masters sont automatiquement accordées à votre utilisateur ou à votre rôle IAM dans la configuration RBAC du cluster. Cela vous permet de consulter les ressources Kubernetes via la console Amazon EKS. Il vous permet également de modifier le ConfigMap aws-auth dans Kubernetes et d'accorder à d'autres utilisateurs ou rôles AWS la possibilité d'interagir avec le cluster.

Deux systèmes d'autorisation différents sont utilisés. La Console de gestion AWS utilise IAM. Le cluster EKS utilise le système Kubernetes RBAC (disponible sur le site Web de Kubernetes). La configuration aws-auth du cluster associe les identités IAM (utilisateurs ou rôles) aux identités RBAC du cluster. Cela signifie que le ConfigMap aws-auth associe les identités IAM aux identités Kubernetes.

Résolution

Prérequis

Avant de commencer, collectez les informations suivantes.

Utilisateur ou rôle non administrateur

Si vous n'êtes pas un administrateur de cluster, un utilisateur ou un rôle IAM et que vous avez besoin d'une visibilité sur la console Amazon EKS, procédez comme suit :

1.    Obtenez l'identité IAM Amazon Resource Name (ARN) de l'utilisateur de la console de gestion AWS.

S'il s'agit d'un rôle IAM, utilisez le format ARN suivant :

arn:aws:iam::111122223333:role/example

Important : N'utilisez pas le format suivant :

arn:aws:iam::111122223333:role/my-team/developers/example

2.    Fournissez l'ARN à l'administrateur de votre cluster et demandez-lui de vous ajouter au ConfigMap aws-auth.

Remarque : consultez la section Identifier l'ARN d'identité IAM de l'utilisateur de la Console de gestion AWS pour savoir comment accéder à votre ARN.

Utilisateur ou rôle du créateur ou de l'administrateur du cluster

Si vous êtes le créateur ou l'administrateur du cluster, utilisez l'outil kubectl ou l'outil eksctl pour gérer le ConfigMap aws-auth.

Remarque : Par défaut, le groupe system:masters est lié au clusterrole nommé cluster-admin. Ce rôle de cluster utilise le caractère générique (« * ») pour les ressources et les verbes dans sa règle de politique. Cela signifie que tout utilisateur affecté au groupe system:masters a un accès complet à toutes les ressources Kubernetes du cluster.

Consultez la section Identifier le créateur du cluster pour savoir comment les créateurs et les administrateurs de clusters peuvent identifier leur statut d'administrateur.

Identifier l'ARN d'identité IAM de l'utilisateur de la Console de gestion AWS

Identifiez l'utilisateur ou le rôle IAM que vous utilisez pour accéder à la console. Cela peut être différent de l'identité que vous utilisez avec l'interface de ligne de commande AWS (AWS CLI). 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. Ensuite, obtenez l'ARN de l'identité IAM. Utilisez l'une des options suivantes pour accéder à l'ARN.

Utiliser l'AWS CLI

Si vous avez accès à l'utilisateur ou au rôle IAM via l'interface de ligne de commande AWS, exécutez la commande suivante :

aws sts get-caller-identity --query Arn

Lancez CloudShell

Si vous n'avez pas accès à l'AWS CLI, exécutez la commande suivante :

aws sts get-caller-identity --query Arn

La sortie est similaire à ce qui suit :

"arn:aws:iam::111122223333:role/testrole"

-ou-

"arn:aws:iam::111122223333:user/testuser"

Remarque :

  • S'il s'agit d'un ARN de rôle IAM, assurez-vous que le format est similaire au format ARN que vous pouvez obtenir dans la section Prérequis.
  • Si l'ARN inclut un rôle assumé, vous devez obtenir l'ARN du rôle. Par exemple, le rôle ARN supposé arn:aws:sts : :123456:Assumed-Role/MyRole/AAdams est associé au rôle ARN arn:aws:sts : :123456:Role/MyRole. Vous pouvez vérifier cette valeur dans la console IAM.

Identifier le créateur du cluster

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.

Conseil : Si vous trouvez le nom du créateur du cluster dans CloudTrail mais qu'il est supprimé, recréez un nouvel utilisateur ou un nouveau rôle IAM portant le même nom. Comme cette nouvelle entité IAM possède le même ARN que le créateur du cluster d'origine, elle hérite du même accès administrateur au cluster.

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

Ajouter un nouvel utilisateur ou un nouveau rôle IAM au RBAC de Kubernetes, à l'aide de kubectl ou eksctl

Avant de choisir l'outil kubectl ou eksctl pour modifier le ConfigMap aws-auth, assurez-vous de terminer l'étape 1. Suivez ensuite les étapes 2 à 4 pour modifier avec kubectl. Pour modifier avec eksctl, passez à l'étape 5.

1.    Après avoir identifié le créateur ou l'administrateur du cluster, configurez l'AWS CLI pour utiliser l'IAM du créateur de cluster. Consultez la section Principes de base de la configuration pour plus d'informations.

Pour vérifier que l'AWS CLI est correctement configurée avec l'entité IAM, exécutez la commande suivante :

$ aws sts get-caller-identity

La sortie renvoie l'ARN de l'utilisateur ou du rôle IAM. Par exemple :

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

Remarque : Si vous recevez des erreurs lors de l'exécution des commandes de la CLI, assurez-vous que vous utilisez la version la plus récente de l'AWS CLI.

2.     Pour modifier le ConfigMap aws-auth avec kubectl, vous devez avoir accès au cluster. Exécutez la commande kubectl suivante :

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

La console affiche le ConfigMap actuel.

Si vous ne parvenez pas à vous connecter au cluster, essayez de mettre à jour votre fichier kubeconfig. Exécutez le fichier avec une identité IAM ayant accès au cluster. L'identité qui a créé le cluster dispose toujours d'un accès au cluster.

aws eks update-kubeconfig --region region_code --name my_cluster

Remarque : remplacez region_code par le code de région AWS de votre cluster EKS et my_cluster par le nom de votre cluster EKS.

Les commandes kubectl doivent se connecter au point de terminaison du serveur EKS. Si le point de terminaison du serveur d'API est public, vous devez disposer d'un accès à Internet pour vous connecter au point de terminaison. Si le point de terminaison du serveur d'API est privé, vous devez vous connecter au point de terminaison du serveur EKS depuis le VPC sur lequel le cluster EKS s'exécute.

3.    Pour modifier le fichier aws-auth ConfigMap dans l'éditeur de texte en tant que créateur ou administrateur du cluster, exécutez la commande suivante :

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

4.   Ajoutez un utilisateur ou un rôle IAM :

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

Tenez compte des informations suivantes :

  • system:masters permet à un super-utilisateur d'accéder à n'importe quelle action sur n'importe quelle ressource. Il ne s'agit pas d'une bonne pratique pour les environnements de production.
  • Il est recommandé de minimiser les autorisations accordées. Envisagez de créer un rôle n'ayant accès qu'à un espace de noms spécifique. Pour plus d'informations, consultez la section Utilisation de l'autorisation RBAC sur le site Web de Kubernetes. Consultez également la section Autorisations requises et consultez la section Afficher les ressources Kubernetes dans un espace de noms spécifique pour obtenir un exemple sur l'accès restreint de la console Amazon EKS.

5.    L'outil eksctl vous permet de mettre à jour le fichier aws-auth ConfigMap à l'aide de la commande suivante :

eksctl create iamidentitymapping --cluster your_cluster_Name --region=your_region --arn YOUR_IAM_ARN <arn:aws:iam::123456:role testing=""> --group system:masters --username admin</arn:aws:iam::123456:role>

Remarque : remplacez your_cluster_name par le nom de votre cluster EKS, your_region par la région de votre cluster EKS et YOUR_IAM_ARN par votre rôle IAM ou utilisez ARN.

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 résoudre les messages d'erreur, consultez la section Impossible de voir les nœuds dans l'onglet Compute ou quoi que ce soit dans l'onglet Ressources et vous recevez un message d'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 ?