Comment résoudre une erreur de serveur non autorisé lorsque je me connecte au serveur d'API Amazon EKS ?

Dernière mise à jour : 10/06/2022

En cas d'utilisation des commandes kubectl pour se connecter au serveur d'API Amazon Elastic Kubernetes Service (Amazon EKS), je reçois le message « error: You must be logged in to the server (Unauthorized) » (erreur : vous devez être connecté au serveur [non autorisé])

Brève description

Avant de vous connecter au serveur d'API Amazon EKS, installez et configurez la dernière version de l'interface de ligne de commande AWS (AWS CLI).

Puis, l'administrateur du cluster doit finaliser les étapes de l'une des sections suivantes :

  • Vous êtes le créateur du cluster
  • Vous n'êtes pas le créateur du cluster

Enfin, la personne ayant reçu l'erreur doit suivre les étapes de la section You're the user or role who received the error (Vous êtes l'utilisateur ou le rôle ayant reçu l'erreur).

Résolution

Vous êtes le créateur du cluster

1.    Pour voir la configuration de votre utilisateur ou rôle de l'interface de ligne de commande AWS, exécutez la commande suivante :

$ aws sts get-caller-identity

La sortie renvoie l'Amazon Resource Name (ARN) de l'utilisateur ou du rôle AWS Identity and Access Management (IAM). Par exemple :

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

2.    Vérifiez que l'ARN correspond au créateur du cluster.

3.    Mettez à jour ou générez le fichier kubeconfig à l'aide de l'une des commandes suivantes.

En tant qu'utilisateur IAM, exécutez la commande suivante :

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region

Remarque : remplacez eks_cluster-name par le nom de votre cluster. Remplacez aws-region par votre région AWS.

En tant que rôle IAM, exécutez la commande suivante :

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region --role-arn arn:aws:iam::XXXXXXXXXXXX:role/testrole

Remarque : remplacez eks_cluster-name par le nom de votre cluster. Remplacez aws-region par votre région AWS.

4.    Pour confirmer la mise à jour du fichier kubeconfig, exécutez la commande suivante :

$ kubectl config view --minify

5.    Pour confirmer l'authentification de votre utilisateur ou rôle IAM, exécutez la commande suivante :

$ kubectl get svc

Le résultat doit être similaire à ce qui suit :

NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes      ClusterIP   10.100.0.1     <none>        443/TCP   77d

Remarque : EKS mappe le rôle IAM du créateur de cluster en tant que kubernetes-admin du côté du plan de contrôle. Si la journalisation du serveur d'API a été activée lors de la création du cluster, le créateur de l'entité peut être interrogé. Exécutez la commande suivante dans CloudWatch Insights :

fields @logStream, @timestamp, @message
| sort @timestamp desc
| filter @logStream like /authenticator/
| filter @message like "username=kubernetes-admin"
| limit 50

Cette requête renvoie l'entité IAM mappée en tant que créateur du cluster. Acceptez le rôle d'entité IAM que vous recevez dans la sortie et faites à nouveau des appels kubectl au cluster.

Vous n'êtes pas le créateur du cluster

1.    Pour voir la configuration de votre utilisateur ou rôle de l'interface de ligne de commande AWS, exécutez la commande suivante :

$ aws sts get-caller-identity

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

2.    Demandez au propriétaire ou à l'administrateur du cluster d'ajouter votre utilisateur ou rôle IAM au ConfigMap aws-auth.

Remarque : vous pouvez utiliser AssumeRole pour vous connecter en tant que créateur du cluster si vous disposez des autorisations IAM appropriées.

3.    Pour modifier le ConfigMap aws-auth dans un éditeur de texte, le propriétaire 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:masters

Remarque : remplacez testuser par votre nom d'utilisateur.

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

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

Remarque : remplacez testrole par votre rôle.

La valeur pour username (nom d'utilisateur) dans la section mapRoles accepte uniquement les caractères en minuscules. Le rôle IAM doit être mappé sans le chemin. Pour en savoir plus sur les exigences en matière de rôle et de chemin d'accès, développez la section aws-auth ConfigMap does not grant access to the cluster (aws-auth ConfigMap n'accorde pas l'accès au cluster) dans Troubleshooting IAM (Dépannage IAM).

Le groupe system:masters autorise l'accès super-utilisateur pour effectuer n'importe quelle action sur n'importe quelle ressource. Pour plus d'informations, consultez la section Default roles and role bindings (Rôles par défaut et liaisons de rôles).

Vous êtes l'utilisateur ou le rôle ayant reçu l'erreur

1.    Pour mettre à jour ou générer le fichier kubeconfig après la mise à jour du ConfigMap aws-auth, exécutez l'une des commandes suivantes.

En tant qu'utilisateur IAM, exécutez la commande suivante :

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region

Remarque : remplacez eks_cluster-name par le nom de votre cluster. Remplacez aws-region par votre région AWS.

2.    En tant que rôle IAM, exécutez la commande suivante :

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region --role-arn arn:aws:iam::XXXXXXXXXXXX:role/testrole

Remarque : remplacez eks_cluster-name par le nom de votre cluster. Remplacez aws-region par votre région AWS.

3.    Pour confirmer la mise à jour du fichier kubeconfig, exécutez la commande suivante :

$ kubectl config view --minify

4.    Pour confirmer l'authentification de votre utilisateur ou rôle IAM, exécutez la commande suivante :

$ kubectl get svc

Le résultat devrait être similaire à celui-ci :

NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes      ClusterIP   10.100.0.1     <none>        443/TCP   77d

Remarque : si vous continuez à recevoir des erreurs, consultez les directives de dépannage Using RBAC Authorization (Utilisation de l'autorisation RBAC).


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


Avez-vous besoin d'aide pour une question technique ou de facturation ?