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

Dernière mise à jour : 20/09/2022

J'utilise les commandes kubectl pour me connecter au serveur d'API Amazon Elastic Kubernetes Service (Amazon EKS). « erreur : vous devez être connecté au serveur (non autorisé) ». Comment résoudre ce problème ?

Brève description

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

Ensuite, la personne ayant reçu l'erreur doit suivre les étapes de la section Vous êtes l'utilisateur ou le rôle ayant reçu l'erreur.

Solution

Vous êtes le créateur du cluster

Remarque : si vous recevez des erreurs lors de l'exécution de commandes de l'interface de la ligne de commande AWS (AWS CLI), assurez-vous d'utiliser la version la plus récente de l'AWS CLI.

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. Afin de rechercher le créateur du cluster, vous pouvez exécuter la commande suivante dans Amazon CloudWatch Application Insights. Remarque : Amazon EKS mappe le rôle IAM du créateur du 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é.

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 comme créateur du cluster. Acceptez le rôle d'entité IAM que vous recevez dans la sortie, puis effectuez à nouveau les appels kubectl au 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

Exemple de sortie :

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

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 CLI, 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 --namespace kube-system

Remarque : Si vous recevez l'erreur « Error from server (NotFound) : configmaps « aws-auth » not found », suivez les instructions pour appliquer AWS-AuthConfigMap à votre cluster.

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 autorise uniquement les caractères 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).

Pour spécifier rolearn pour un rôle IAM AWS IAM Identity Center (successeur d'AWS Single Sign-On), supprimez le chemin « /aws-reserved/sso.amazonaws.com/region » de l'ARN du rôle. Sinon, l'entrée de ConfigMap ne peut pas vous autoriser en tant qu'utilisateur valide.

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). Pour restreindre l'accès de cet utilisateur, vous pouvez créer un rôle Amazon EKS et une ressource de liaison de rôle. Pour obtenir un exemple d'accès restreint pour les utilisateurs qui consultent des ressources dans la console Amazon EKS, suivez les étapes 2 et 3 de la section Autorisations requises.

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

Exemple de sortie :

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 ?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?