Passer au contenu

Comment puis-je utiliser l'API d'entrée d'accès Amazon EKS pour récupérer l'accès à un cluster EKS ?

Lecture de 5 minute(s)
0

En raison d'un changement de l’utilisateur d’authentification unique ou d'une suppression ou d'une corruption de ConfigMap par aws-auth, je ne peux pas accéder à mon Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Si vous perdez l'accès à votre cluster EKS, une erreur similaire à l’erreur suivante s'affiche lorsque vous exécutez les commandes kubectl :

« error: You must be logged in to the server (Unauthorized). » (erreur : vous devez être connecté au serveur (non autorisé).

Pour récupérer l'accès à votre cluster, utilisez les entrées d'accès afin de gérer les autorisations des principaux responsables d'AWS Identity and Access Management (IAM). Vous pouvez effectuer cette opération depuis l'extérieur de votre cluster Amazon EKS.

Remarque : Si le créateur du cluster EKS existe, endossez le rôle de principal IAM du créateur du cluster EKS pour vous connecter et accéder au cluster. Par défaut, le créateur du cluster EKS est l'administrateur du cluster. Le processus suivant crée un rôle Administrateur qui coexiste avec le rôle IAM d'origine du créateur du cluster.

Résolution

Prérequis :

  • Installez kubectl.
  • Installez et configurez la dernière version de l'interface de la ligne de commande AWS (AWS CLI) sur votre instance EC2.
  • Vous disposez d'un rôle IAM doté des autorisations suivantes : CreateAccessEntry, ListAccessEntries, DescribeAccessEntry, DeleteAccessEntry et UpdateAccessEntry.

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes AWS CLI, consultez l’article Résoudre les erreurs AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Utiliser l'API d'entrée d’accès aws eks pour gérer l'accès au cluster Amazon EKS

Remarque : Dans les commandes suivantes, remplacez les commandes suivantes :
Remplacez <ACCOUNT_ID> par l'ID du compte source où se trouve le cluster EKS.
Remplacez <REGION> par le nom de votre région AWS.
Remplacez <CLUSTER_NAME> par le nom de votre cluster EKS.
Remplacez <IAM_PRINCIPAL_ARN> par l'ARN du rôle auquel vous souhaitez attribuer des droits d'administrateur.

Pour utiliser une API d'entrée d'accès aws eks afin de gérer l'accès au cluster Amazon EKS, procédez comme suit :

  1. Sur la machine hôte sur laquelle kubectl est installé, endossez le rôle IAM avec les autorisations suivantes :

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "eks:ListAccessEntries",
                    "eks:CreateAccessEntry",
                    "eks:DescribeCluster",
                    "eks:UpdateClusterConfig"
                ],
                "Resource": [
                     "arn:aws:eks:<REGION>:<ACCOUNT_ID>:cluster/<CLUSTER_NAME>"
               ]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "eks:DeleteAccessEntry",
                    "eks:ListAssociatedAccessPolicies",
                    "eks:DisassociateAccessPolicy",
                    "eks:AssociateAccessPolicy",
                    "eks:UpdateAccessEntry",
                    "eks:DescribeAccessEntry"
                ],
                "Resource": [
                     "arn:aws:eks:<REGION>:<ACCOUNT_ID>:access-entry/<CLUSTER_NAME>/*"
               ]
            }
        ]
    }
  2. Pour confirmer votre identité, exécutez la commande suivante :

    aws sts get-caller-identity

    Dans la sortie de la commande, notez l'ARN. Il se présente comme suit : arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin

  3. Exécutez la commande suivante pour valider le mode d'authentification actuel du cluster Amazon EKS :

    aws eks describe-cluster --name <CLUSTER_NAME>  --query 'cluster.accessConfig.authenticationMode' --region <REGION>

    Si le mode d'authentification actuel du cluster Amazon EKS est API_AND_CONFIG_MAP, cela signifie que le cluster utilise déjà le mode d'accès requis. Passez à l'étape 5.

  4. Exécutez la commande suivante pour mettre à jour le mode d'authentification du cluster Amazon EKS :

    aws eks update-cluster-config --name <CLUSTER_NAME> --access-config authenticationMode=API_AND_CONFIG_MAP --region <REGION>

    Remarque : Vous pouvez passer d'un mode d'authentification CONFIG_MAP, mais vous ne pouvez pas repasser d’un mode API au mode CONFIG_MAP.

  5. Exécutez la commande suivante pour créer une entrée d'accès pour votre cluster et votre rôle IAM :

    aws eks create-access-entry --cluster-name <CLUSTER_NAME> --principal-arn <IAM_PRINCIPAL_ARN> --region <REGION>

    Les résultats se présentent de la manière suivante :

    {
        "accessEntry": {
            "clusterName": "<CLUSTER_NAME>",
            "principalArn": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin",
            "kubernetesGroups": [],
            "accessEntryArn": "arn:aws:eks:<REGION>:<ACCOUNT_ID>:access-entry/<CLUSTER_NAME>/user/<ACCOUNT_ID>/new-cluster-admin/26c6d1f8-4211-3fe0-f9d2-734b912dcd9a",
            "createdAt": "2024-02-13T19:27:45.370000+00:00",
            "modifiedAt": "2024-02-13T19:27:45.370000+00:00",
            "tags": {},
            "username": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin",
            "type": "STANDARD"
        }
    }
  6. Exécutez la commande suivante pour associer AmazonEKSclusterAdminPolicy au cluster Amazon EKS et au rôle IAM :

    aws eks associate-access-policy --cluster-name <CLUSTER_NAME> \
      --principal-arn <IAM_PRINCIPAL_ARN> \
      --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
      --access-scope type=cluster \
      --region <REGION>

    Les résultats se présentent de la manière suivante :

    {
        "accessEntry": {
            "clusterName": "<CLUSTER_NAME>",
            "principalArn": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin",
            "kubernetesGroups": [],
            "accessEntryArn": "arn:aws:eks:<REGION>:<ACCOUNT_ID>:access-entry/<cluster_name>/user/<ACCOUNT_ID>/new-cluster-admin/7ec6efb3-31c8-edcf-3039-ca2b38e0d708",
            "createdAt": "2024-02-25T08:34:06.002000+00:00",
            "modifiedAt": "2024-02-25T08:34:06.002000+00:00",
            "tags": {},
            "username": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin",
            "type": "STANDARD"
        }
    }
  7. Pour mettre à jour ou générer le fichier kubeconfig, exécutez la commande suivante pour vous connecter au cluster EKS :

    aws eks update-kubeconfig --name <CLUSTER_NAME> --region <REGION>
  8. Exécutez la commande suivante pour vérifier que l'utilisateur peut accéder au cluster EKS en tant qu'administrateur :

    kubectl auth can-i '*' '*'  --all-namespaces

Remarque : Si vous pouvez accéder au cluster EKS en tant qu'administrateur, la sortie affiche oui.

Informations connexes

Analyse approfondie des contrôles de gestion d'accès simplifiés à Amazon EKS

Comment puis-je résoudre l’erreur « You must be logged in to the server (Unauthorized) » (Vous devez être connecté au serveur (non autorisé) lorsque je me connecte au serveur API Amazon EKS ?

Entrées d'accès EKS sur le site Web d’eksctl

AWS OFFICIELA mis à jour il y a 2 ans