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

Lecture de 8 minute(s)
0

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

Brève description

Cette erreur peut s'afficher lorsque vous utilisez l'AWS Management Console avec un utilisateur ou un rôle AWS Identity and Access Management (IAM). L'erreur indique que l'utilisateur ou le rôle IAM ne dispose pas des autorisations RBAC (sur le site Web de Kubernetes) requises pour accéder à l'API Kubernetes. Pour afficher les ressources Kubernetes sur l'AWS Management Console, votre utilisateur ou votre rôle AWS IAM doit correspondre à 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 visualiser les ressources Kubernetes via la console Amazon EKS. Il vous permet également de modifier le fichier de configuration aws-auth ConfigMap dans Kubernetes et d'autoriser d'autres utilisateurs ou rôles AWS à 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 (sur le site Web de Kubernetes). L'aws-auth ConfigMap du cluster associe les identités IAM (utilisateurs ou rôles) aux identités RBAC du cluster. Cela signifie que l'**aws-auth ** ConfigMap 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 utilisateur ou n’avez pas un rôle IAM d'administrateur de cluster et que vous avez besoin de 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 à l'aws-auth ConfigMap.

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 de créateur de cluster ou d'administrateur de cluster

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

Remarque : Par défaut, le groupe system:masters est lié au clusterrole nommé cluster-admin. Ce clusterrole utilise le caractère générique (“*”) pour les ressources et les verbes dans sa PolicyRule. Cela signifie que tout utilisateur assigné 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 obtenir des instructions détaillées sur la manière dont les créateurs et les administrateurs de cluster peuvent identifier leur statut d'administrateur.

Identifiez 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. Cette identité peut être différente de celle que vous utilisez avec l'interface de ligne de commande AWS (AWS CLI). Vérifiez que l'utilisateur ou le rôle IAM identifié est autorisé à afficher les nœuds et les charges de travail pour tous les clusters dans la console de gestion AWS. Ensuite, récupérez 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 depuis 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

Le résultat ressemble à 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 obtenez 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 supposé ARN de 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

Pour trouver le créateur du cluster ou le rôle d'administrateur disposant 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 que celui-ci 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.

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

Avant de choisir l'outil kubectl ou eksctl pour modifier l'**aws-auth ** ConfigMap, assurez-vous d'avoir terminé 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'interface de ligne de commande AWS 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. Exemple :

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

Remarque : si des erreurs surviennent lors de l’exécution des commandes AWS CLI, vérifiez que vous utilisez la version la plus récente d’AWS CLI.

2.     Pour modifier l’aws-auth ConfigMap 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 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 API est privé, vous devez vous connecter au point de terminaison du serveur EKS depuis le VPC sur lequel s'exécute le cluster EKS.

3.    Pour modifier le 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. Exemple :

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

Saisissez les informations suivantes :

  • Le groupe system:masters autorise un super-utilisateur à 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 avec accès uniquement à un espace de noms spécifique. Pour en savoir plus, consultez la page Utilisation de l’autorisation RBAC du 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 l’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érifiez 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.    Consultez les onglets Présentation et Charges de travail pour détecter les erreurs.

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 Impossible de voir les nœuds dans l'onglet Calcul ou quoi que ce soit dans l'onglet Ressources et vous recevez un message d'erreur dans la console de gestion AWS.


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an