Comment résoudre les problèmes RBAC avec Amazon EKS ?

Lecture de 8 minute(s)
0

Lorsque j'utilise mon cluster Amazon Elastic Kubernetes Service (Amazon EKS), je souhaite résoudre des erreurs telles que l'accès refusé, non autorisé et interdit.

Brève description

AWS Identity and Access Management (IAM) assure l'authentification du cluster et s'appuie sur le contrôle d'accès basé sur les rôles (RBAC) natif de Kubernetes pour l'autorisation. Lorsqu'un utilisateur ou un rôle IAM crée un cluster Amazon EKS, l'entité IAM est ajoutée à la table d'autorisation RBAC de Kubernetes avec les autorisations system:masters.

Pour ajouter des utilisateurs disposant d'un accès administrateur à un cluster Amazon EKS, procédez comme suit :

  1. Accordez les autorisations de console IAM requises aux utilisateurs IAM associés afin qu'ils puissent effectuer les opérations de cluster nécessaires.
  2. Mettez à jour le ConfigMap aws-auth pour fournir aux utilisateurs IAM supplémentaires le rôle du cluster et les liaisons de rôles. Pour plus d'informations, consultez Ajouter des utilisateurs ou des rôles IAM à votre cluster Amazon EKS.

Remarque : La ConfigMap aws-auth ne prend pas en charge les caractères génériques. Il est recommandé d'utiliser eksctl pour modifier la ConfigMap. Les entrées mal formées peuvent provoquer un verrouillage.

Exécutez la commande kubectl auth can-i suivante pour vérifier que les autorisations RBAC sont correctement définies :

kubectl auth can-i list secrets --namespace dev --as dave

Lorsque vous exécutez la commande kubectl, le mécanisme d'authentification effectue les étapes principales suivantes :

  • Kubectl lit la configuration du contexte depuis ~/.kube/config.
  • La commande aws eks get-token de l'interface de la ligne de commande AWS (AWS CLI) est exécutée pour obtenir des informations d'identification, telles que définies dans .kube/config.
  • La demande k8s.api est envoyée et signée avec le jeton précédent.

Remarque : vous ne pouvez pas modifier l'expiration de 15 minutes du jeton obtenu via aws eks get-token.

Résolution

Remarque : en cas d'erreurs lors de l'exécution de commandes depuis l'interface de la ligne de commande AWS (AWS CLI), vérifiez que vous utilisez la version la plus récente d'AWS CLI.

Problèmes d'authentification

Erreur : « Le cluster est inaccessible en raison de la suppression de l'utilisateur IAM créateur du cluster »

Si vous recevez l'erreur précédente, vous devez recréer l'utilisateur IAM créateur du cluster avec le même nom que le cluster. Pour ce faire, recherchez des informations sur l'administrateur et le créateur du cluster.

Si vous avez créé le cluster au cours des 90 derniers jours, vous pouvez rechercher des appels d'API CreateCluster dans AWS CloudTrail. Les autorisations des créateurs de clusters sont identiques à celles de system:masters. Si d'autres utilisateurs disposent des autorisations system:masters, vous ne dépendez pas du créateur du cluster. Si vous vous êtes déjà authentifié auprès du cluster Amazon EKS, vous pouvez consulter les journaux d'authentification précédents dans le groupe de journaux Amazon CloudWatch. Utilisez la requête CloudWatch Logs Insights suivante pour vérifier les détails de l'utilisateur et du rôle de l'administrateur du cluster :

fields @timestamp, @message
| sort @timestamp desc
| filter @logStream like /authenticator/
| filter @message like "system:masters"

Pour recréer l'utilisateur et le rôle IAM du créateur du cluster, exécutez les commandes suivantes :

Important : assurez-vous de vérifier toutes les commandes de l'AWS CLI données et de remplacer toutes les instances d'exemples de chaînes par vos valeurs requises. Par exemple, remplacez EXAMPLE-USER par votre nom d'utilisateur.

aws iam create-user --user-name <EXAMPLE-USER>
aws iam create-role --role-name <EXAMPLE-ROLE>

Erreur : « Impossible de présumer qu'elle n'existe pas, que l'entité sécurisée n'est pas correcte ou qu'une erreur s'est produite lors de l'appel de l'opération AssumeRole »

Si vous recevez l'erreur précédente, vérifiez que la politique de confiance accorde correctement les autorisations d'acceptation à l'utilisateur. Pour plus d'informations, consultez la section Tutoriel IAM : déléguer l'accès entre les comptes AWS à l'aide de rôles IAM.

Pour identifier les utilisateurs locaux qui déploient le cluster Amazon EKS par défaut, exécutez la commande suivante :

kubectl get clusterroles -l kubernetes.io/bootstrapping=rbac-defaults

Désactivez l'accès anonyme pour les actions d'API. Les utilisateurs anonymes ont pour sujet****name:system:unauthenticated. Pour identifier les utilisateurs anonymes, exécutez la commande suivante :

kubectl get clusterrolebindings.rbac.authorization.k8s.io -o json | jq '.items[] | select(.subjects[]?.name=="system:unauthenticated")'

Pour plus d'informations, consultez les guides des meilleures pratiques Amazon EKS.

Problèmes d'autorisation

Erreur : « Impossible d'obtenir la liste actuelle des groupes d'API du serveur »

Pour résoudre l'erreur précédente, voir Non autorisé ou accès refusé (kubectl).

« erreur : vous devez être connecté au serveur (non autorisé) »

Pour résoudre l'erreur précédente, voir Comment résoudre l'erreur « Vous devez être connecté au serveur (non autorisé) » ?

Erreur : « Vous devez être connecté au serveur (le serveur a demandé au client de fournir des informations d'identification) »

L'erreur précédente survient lorsque vous utilisez une entité IAM pour effectuer des appels d'API et que vous n'avez pas correctement mappé l'entité IAM. Vous devez mapper l'entité IAM à un rôle Amazon EKS dans la carte de configuration aws-auth du cluster. Pour plus d'informations, reportez-vous à Activation de l'accès des utilisateurs et des rôles IAM à votre cluster.

Erreur : « Impossible de décrire le plan de contrôle du cluster : AccessDeniedException »

L'erreur précédente se produit lorsque vous mettez à jour le fichier kubeconfig avec un utilisateur et un rôle qui ne sont pas autorisés à exécuter l'action eks:DescribeCluster.

Erreur : « L'utilisateur ou le rôle actuel n'a pas accès aux objets Kubernetes sur ce cluster EKS »

Pour plus d'informations sur l'erreur précédente, consultez Résoudre l'erreur d'accès aux objets Kubernetes dans Amazon EKS.

Erreur : « Remplacer l'IAM du créateur du cluster par un autre utilisateur/rôle »

Après avoir créé un cluster, vous ne pouvez pas remplacer l'IAM du créateur du cluster par un autre utilisateur, car vous ne pouvez pas configurer l'IAM du créateur du cluster.

Problèmes de réseau

Erreur : « Impossible de se connecter au serveur : composez le numéro tcp 172.xx.xx.xx:443 : délai d'attente des entrées/sorties »

Si vous recevez cette erreur, confirmez que les groupes de sécurité autorisent le trafic à partir de l'adresse IP source de l'expéditeur.

Erreur : « Impossible de se connecter au serveur : x509 : le certificat est valide pour *.example.com, example.com, et non pour https://xxx.gr7.us-east-1.eks.amazonaws.com »

Si vous recevez cette erreur, vérifiez que les paramètres du proxy sont corrects.

Problèmes liés à KUBECONFIG

Erreur : « La connexion au serveur localhost:8080 a été refusée »

L'erreur précédente se produit lorsque le fichier kubeconfig est manquant. Le fichier kubeconfig se trouve dans ~/.kube/config, et kubectl a besoin du fichier. Ce fichier contient les informations d'identification du cluster requises pour se connecter au serveur d'API du cluster. Si kubectl ne trouve pas ce fichier, il essaie de se connecter à l'adresse par défaut (localhost:8080).

Erreur : « Le fichier de configuration de Kubernetes est lisible par un groupe »

L'erreur précédente se produit lorsque les autorisations pour le fichier kubeconfig sont incorrectes. Pour résoudre ce problème, exécutez la commande suivante :

chmod o-r ~/.kube/config
chmod g-r ~/.kube/config

Problèmes de configuration d'AWS IAM Identity Center (successeur d'AWS Single Sign-On)

Important : supprimez /aws-reserved/sso.amazonaws.com/ de l'URL rolearn. Si ce n'est pas le cas, vous ne pouvez pas procéder à l'autorisation en tant qu'utilisateur valide.

Affecter des groupes d'utilisateurs à une politique d'autorisations IAM

1.    Ouvrez la console IAM Identity Center.

2.    Choisissez l'onglet Comptes AWS, puis choisissez le compte AWS pour attribuer des utilisateurs.

3.    Sélectionnez Assigner des utilisateurs.

4.    Recherchez les groupes d'utilisateurs, puis choisissez Suivant : Ensembles d'autorisations.

5.    Choisissez Créer un nouvel ensemble d'autorisations, puis choisissez Créer un ensemble d'autorisations personnalisé.

6.    Donnez un nom à l'ensemble d'autorisations, puis cochez la case Créer une politique d'autorisations personnalisée.

7.    Copiez la politique d'autorisation suivante, puis collez-la dans la fenêtre :

{
"Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "*"
    }
  ]
}

8.    Sélectionnez Create (Créer).

Configurer les autorisations de rôle avec Kubernetes RBAC

Pour configurer les autorisations de rôle avec Kubernetes RBAC, utilisez le manifeste suivant pour créer un rôle RBAC :

apiVersion: rbac.authorization.k8s.io/v1 
kind: Role
metadata:
    name: <example name of the RBAC group>
    namespace: <example name of namespace>
 rules:
 - apiGroups: [""]
    resources: ["services", "endpoints", "pods", "deployments", "ingress"]
    verbs: ["get", "list", "watch"]

Modifier l'authentificateur IAM ConfigMap

1.    Exécutez la commande suivante pour capturer le rôle IAM du groupe d'utilisateurs IAM Identity Center qui contient les données de l'utilisateur souhaité :

aws iam list-roles | grep Arn

2.    Exécutez la commande h suivante pour modifier l'authentificateur ConfigMap :

kubectl edit configmap aws-auth --namespace kube-system

3.    Ajoutez les attributs suivants à la ConfigMap sous MapRoles :

- rolearn: <example arn of the AWS SSO IAM role> 
username: <example preferred username> 
groups:
    - <example name of the RBAC group>

Important : supprimez /aws-reserved/sso.amazonaws.com/ de l'URL rolearn. Si ce n'est pas le cas, vous ne pouvez pas procéder à l'autorisation en tant qu'utilisateur valide.

4.    Mettez à jour votre fichier kubeconfig en exécutant la commande suivante :

aws eks update-kubeconfig —-name <example eks cluster>  —-region <example region>

5.    Connectez-vous avec le nom d'utilisateur IAM Identity Center, puis exécutez les commandes kubectl.


Informations connexes

Rôles et liaisons de rôles par défaut Contrôle de l'accès aux clusters EKS

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