Passer au contenu

Comment résoudre l'erreur "Your current user or role does not have access to Kubernetes objects on this EKS cluster" dans Amazon EKS ?

Lecture de 7 minute(s)
0

J'ai essayé d'accéder à mon cluster Amazon Elastic Kubernetes Service (Amazon EKS). Cependant, j'ai reçu le message d’erreur "Your current user or role does not have access to Kubernetes objects on this EKS cluster".

Brève description

Une erreur d'accès s'affiche lorsqu'une identité Gestion des identités et des accès AWS (AWS IAM) ne dispose pas d'autorisations de contrôle d'accès basé sur les rôles (RBAC) pour Kubernetes. Pour accéder à l'API Kubernetes, vous devez disposer des autorisations RBAC. Pour plus d’informations sur RBAC, consultez la page Utilisation de l’autorisation RBAC sur le site Web de Kubernetes. Pour afficher les ressources Kubernetes sur la console de gestion AWS, votre utilisateur ou votre identité AWS IAM doit correspondre à laws-auth ConfigMap dans votre cluster Amazon EKS.

Important : La résolution suivante utilise aws-auth ConfigMap pour s'aligner sur l'approche Kubernetes en matière d'accès aux autorisations RBAC. Il est recommandé de migrer les entrées aws-auth ConfigMap existantes pour accéder aux entrées.

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.

Si vous êtes le créateur ou l'administrateur du cluster, vous pouvez utiliser kubectl ou eksctl pour mettre à jour l’aws-auth ConfigMap. Passez à la section Ajouter l'utilisateur ou le rôle IAM à la configuration RBAC. Sinon, vous devez obtenir l'Amazon Resource Name (ARN) de l'identité IAM qui requiert un accès au cluster.

Obtenir l'ARN de l'identité IAM qui requiert un accès au cluster

Identifiez l'utilisateur ou le rôle IAM qui requiert l'accès au cluster.

Remarque : L'identité IAM peut être différente de l'identité IAM que vous utilisez lorsque vous exécutez l'AWS CLI. AWS IAM Authenticator pour Kubernetes n'autorise pas de chemin dans le rôle ARN que vous utilisez dans l’aws-auth ConfigMap. Pour plus d'informations, consultez la page aws-iam-authenticator sur le site Web de GitHub.

Si vous disposez d’un accès à l’AWS CLI pour l'utilisateur ou le rôle IAM, exécutez la commande get-caller-identity de l’AWS CLI suivante :

aws sts get-caller-identity --query "Arn"

Remarque : Si vous n'avez pas accès à l'AWS CLI, supprimez les guillemets de Arn et exécutez la commande précédente dans AWS CloudShell.

Exemple de sortie :

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

Si la sortie de la commande affiche un ARN de rôle IAM, vérifiez que le format de l'ARN est correct : arn:aws:iam::111122223333:role/example.

Si l'ARN inclut le rôle endossé, vous devez obtenir l'ARN du rôle IAM pour lequel vous accordez des autorisations RBAC. Par exemple, le rôle ARN endossé de arn:aws:sts::123456:assumed-role/MyRole/your_username est associé à l’ARN du rôle arn:aws:sts::123456:role/MyRole.

Fournissez l'ARN à l'administrateur de votre cluster, puis demandez-lui d'ajouter l'ARN du rôle à l’aws-auth ConfigMap. Pour savoir comment ajouter l'ARN à l’aws-auth ConfigMap, passez à la section Ajouter l'utilisateur ou le rôle IAM à la configuration RBAC.

Vérifiez que l’utilisateur ou le rôle IAM dispose des autorisations requises pour afficher les nœuds et les charges de travail pour tous les clusters dans la console de gestion AWS.

Identifier le créateur du cluster

Important : Seule l'entité IAM associée à la création du cluster a accès aux ressources du cluster. Seul le créateur du cluster peut modifier l’aws-auth ConfigMap et donner accès à d'autres entités IAM.

Identifiez le rôle de créateur ou d'administrateur du cluster qui possède les autorisations principales pour configurer votre cluster. Tout d'abord, vérifiez l'historique de vos événements AWS CloudTrail pour l'appel d'API CreateCluster. Puis, vérifiez le champ userIdentity.

Si le nom du créateur du cluster apparaît comme Supprimé dans CloudTrail, créez un nouvel utilisateur ou un nouveau rôle IAM portant le même nom. La nouvelle identité IAM possède le même ARN que le créateur du cluster d'origine, de sorte que la nouvelle identité hérite du même accès administrateur au cluster.

Remarque : CloudTrail ne fournit pas le nom du créateur du cluster pour les clusters datant de plus de 90 jours.

Pour utiliser l'AWS CLI afin d'obtenir l'identité IAM du créateur du cluster, exécutez la commande get-caller-identity suivante :

aws sts get-caller-identity

Exemple de sortie :

{    
    "UserId": "AIDACKCEVSQ6C2EXAMPLE",
    "Account": "111122223333",
    "Arn": "arn:aws:iam:: 111122223333:user/testuser"
}

Ajouter l'utilisateur ou le rôle IAM à la configuration RBAC

Si vous avez installé eksctl, exécutez la commande eksctl create iamidentitymapping suivante pour mettre à jour l’aws-auth ConfigMap :

eksctl create iamidentitymapping --cluster your_cluster_name --region=your_region --arn your_IAM_ARN --group system:masters --username admin

Remarque : Remplacez your_cluster_name par le nom de votre cluster EKS, your_region par votre région AWS et your_IAM_ARN par votre rôle IAM ou ARN d’utilisateur.

Pour utiliser kubectl afin de mettre à jour l’aws-auth ConfigMap, procédez comme suit :

  1. Exécutez la commande suivante pour ouvrir l’aws-auth ConfigMap dans votre éditeur de texte par défaut :

    kubectl edit configmap aws-auth -n kube-system

    Remarque : La console affiche le fichier ConfigMap actuel. Si vous ne parvenez pas à vous connecter au cluster, essayez de mettre à jour votre fichier kubeconfig. L'identité IAM qui crée le cluster a toujours accès au cluster.

  2. Exécutez la commande update-kubeconfig suivante pour configurer kubectl afin de pouvoir vous connecter à votre cluster :

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

    Remarque : Remplacez region_code par votre région et your_cluster_name par le nom de votre cluster. 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 est privé, connectez-vous au point de terminaison du serveur depuis le cloud privé virtuel (VPC) sur lequel s'exécute votre cluster.

  3. Dans l'éditeur de texte qui s'ouvre, saisissez le code suivant pour ajouter un utilisateur IAM :

    mapUsers: |  
        - userarn: arn:aws:iam::111122223333:user/testuser
        username: testuser
        groups:
        - system:bootstrappers
        - system:nodes

    Remarque : Remplacez 111122223333 par votre ID de compte AWS et testuser par votre utilisateur IAM.

    Vous pouvez également saisir le code suivant pour ajouter un rôle IAM :

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

    Remarque : Remplacez 111122223333 par votre identifiant de compte et testrole par votre rôle IAM.

Si vous créez un cluster, votre identité IAM reçoit automatiquement les autorisations system:masters dans la configuration RBAC du cluster. Par défaut, le groupe system:masters est lié au rôle de cluster cluster-admin.

Il n'est pas recommandé d'utiliser les autorisations system:masters dans un environnement de production. Les autorisations system:masters donnent aux utilisateurs un accès complet à toutes les ressources Kubernetes du cluster. Il est préférable de créer un rôle qui n'a accès qu'à un espace de noms spécifique avec uniquement les autorisations requises.

Vérifier l'accès à votre cluster

Procédez comme suit :

  1. Ouvrez la console Amazon EKS.
  2. Dans le volet de navigation, sélectionnez Clusters.
  3. Sélectionnez votre cluster.
  4. Consultez les onglets Présentation et Charges de travail pour détecter les erreurs.

Si vous constatez des erreurs, consultez la section Résolution des problèmes liés à IAM. Par exemple, si vous avez configuré l'accès RBAC pour un espace de noms spécifique, le message d'erreur suivant peut s'afficher :

"Error loading Deployments : deployments.apps is forbidden: User "AIDACKCEVSQ6C2EXAMPLE" cannot list resource "deployments" in API group "apps" at the cluster scope or in the namespace "EXAMPLENAMESPACE"

Pour résoudre l'erreur d'espace de noms, vous devez créer ou mettre à jour le rôle RBAC ou le rôle de cluster avec les liaisons de rôle ou de rôle de cluster appropriées. Pour plus d'informations, consultez la page RoleBinding and ClusterRoleBinding sur le site Web de Kubernetes.

AWS OFFICIELA mis à jour il y a 5 mois