Amazon EKS
Guide de l'utilisateur

Gestion des utilisateurs ou des rôles IAM pour votre cluster

Lorsque vous créez un cluster Amazon EKS, le rôle ou l'utilisateur d'entité IAM (par exemple, un utilisateur fédéré qui crée le cluster) se voit automatiquement accorder system:masters les autorisations dans la configuration du contrôle d'accès basé sur les rôles du cluster. Pour accorder à d'autres rôles ou utilisateurs AWS la capacité d'interagir avec votre cluster, vous devez modifier ConfigMap aws-auth dans Kubernetes.

Note

Pour plus d'informations sur les différentes identités IAM, consultez Identités (utilisateurs, groupes et rôles) dans le IAM Guide de l'utilisateur. Pour plus d'informations sur la configuration du contrôle d'accès basé sur les rôles (RBAC) Kubernetes, consultez Using RBAC Authorization.

Le ConfigMap aws-auth est appliqué dans le cadre du guide Mise en route sur Amazon EKS qui fournit une procédure de bout en bout complète, de la création d'un cluster Amazon EKS au déploiement d'un exemple d'application Kubernetes. Il est initialement créé pour permettre à vos nœuds de travail de rejoindre votre cluster, mais vous utilisez également ce ConfigMap pour ajouter un accès RBAC aux utilisateurs et aux rôles IAM. Si vous n'avez pas lancé les nœuds de travail et appliqué le ConfigMap aws-auth, vous pouvez le faire avec la procédure suivante.

Pour appliquer le ConfigMap aws-auth à votre cluster

  1. Vérifiez si vous avez déjà appliqué le ConfigMap aws-auth.

    kubectl describe configmap -n kube-system aws-auth

    Si vous recevez une erreur indiquant « Error from server (NotFound): configmaps "aws-auth" not found », effectuez les opérations suivantes pour appliquer le stock ConfigMap.

  2. Téléchargez, modifiez et appliquez le mappage de configuration de l'authentificateur AWS.

    1. Téléchargez le mappage de configuration :

      curl -o aws-auth-cm.yaml https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2019-02-11/aws-auth-cm.yaml
    2. Ouvrez le fichier dans l'éditeur de texte de votre choix. Remplacez l'extrait de code <ARN de rôle d'instance (pas le profil d'instance)> par l'Amazon Resource Name (ARN) du rôle IAM associé à vos nœuds de travail puis enregistrez le fichier. Vous pouvez inspecter les sorties de pile AWS CloudFormation pour vos groupes de nœuds de travail et rechercher les valeurs suivantes :

      • InstanceRoleARN (pour les groupes de nœuds de travail qui ont été créés avec eksctl)

      • NodeInstanceRole (pour les groupes de nœud de travail qui ont été créés avec des modèles AWS CloudFormation achetés auprès d'Amazon EKS dans AWS Management Console)

      Important

      Ne modifiez aucune autre ligne de ce fichier.

      apiVersion: v1 kind: ConfigMap metadata: name: aws-auth namespace: kube-system data: mapRoles: | - rolearn: <ARN of instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes
    3. Appliquez la configuration. L'exécution de cette commande peut prendre quelques minutes.

      kubectl apply -f aws-auth-cm.yaml

      Note

      Si vous recevez l'erreur "aws-iam-authenticator": executable file not found in $PATH, cela signifie que votre commande kubectl n'est pas configurée pour Amazon EKS. Pour plus d'informations, consultez Installation de aws-iam-authenticator.

      Si vous recevez d'autres erreurs concernant les autorisation ou types d'erreurs, veuillez consulter Accès non autorisé ou refusé (kubectl) dans la section relative à la résolution des problèmes.

  3. Observez le statut de vos nœuds et attendez qu'ils passent à Ready.

    kubectl get nodes --watch

Pour ajouter un utilisateur ou un rôle IAM à un cluster Amazon EKS

  1. Assurez-vous que les informations d'identification AWS utilisées par la commande kubectl ont déjà reçu l'autorisation pour votre cluster. L'utilisateur IAM qui a créé le cluster dispose de ces autorisations par défaut.

  2. Ouvrez ConfigMap aws-auth.

    kubectl edit -n kube-system configmap/aws-auth

    Note

    Si vous recevez une erreur indiquant « Error from server (NotFound): configmaps "aws-auth" not found », suivez la procédure précédente pour appliquer le stock ConfigMap.

    Exemple de ConfigMap :

    # Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: v1 data: mapRoles: | - rolearn: arn:aws:iam::111122223333:role/doc-test-worker-nodes-NodeInstanceRole-WDO5P42N3ETB username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes kind: ConfigMap metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"v1","data":{"mapRoles":"- rolearn: arn:aws:iam::111122223333:role/doc-test-worker-nodes-NodeInstanceRole-WDO5P42N3ETB\n username: system:node:{{EC2PrivateDNSName}}\n groups:\n - system:bootstrappers\n - system:nodes\n"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"aws-auth","namespace":"kube-system"}} creationTimestamp: 2018-04-04T18:49:10Z name: aws-auth namespace: kube-system resourceVersion: "780" selfLink: /api/v1/namespaces/kube-system/configmaps/aws-auth uid: dcc31de5-3838-11e8-af26-02e00430057c
  3. Ajouter vos utilisateurs ou rôles IAM ou des comptes AWS au configMap.

    • Pour ajouter un utilisateur IAM : ajoutez les détails de l'utilisateur à la section mapUsers du ConfigMap, sous data. Ajoutez cette section si elle n'existe pas déjà dans le fichier. Chaque entrée prend en charge les paramètres suivants :

      • userarn (ARN de l'utilisateur) : l'ARN de l'utilisateur IAM à ajouter.

      • username (nom d'utilisateur) : le nom d'utilisateur dans Kubernetes à mapper à l'utilisateur IAM. Par défaut, le nom d'utilisateur est l'ARN de l'utilisateur IAM.

      • groups (groupes) : liste des groupes dans Kubernetes auxquels l'utilisateur est mappé. Pour plus d'informations, consultez Default Roles et Role Bindings dans la documentation Kubernetes.

    • Pour ajouter un rôle IAM (par exemple, pour les utilisateurs fédérés) : ajoutez les détails du rôle à la section mapRoles du ConfigMap, sous data. Ajoutez cette section si elle n'existe pas déjà dans le fichier. Chaque entrée prend en charge les paramètres suivants :

      • rolearn (ARN du rôle) : l'ARN du rôle IAM à ajouter.

      • username (nom d'utilisateur) : le nom d'utilisateur dans Kubernetes à mapper au rôle IAM. Par défaut, le nom d'utilisateur est l'ARN du rôle IAM.

      • groups (groupes) : liste des groupes dans Kubernetes auxquels le rôle est mappé. Pour plus d'informations, consultez Default Roles et Role Bindings dans la documentation Kubernetes.

    Par exemple, le bloc ci-dessous contient :

    • Une section mapRoles qui ajoute le rôle d'instance du nœud de travail afin que les nœuds de travail puissent s'inscrire eux-mêmes avec le cluster.

    • Une section mapUsers avec les utilisateurs AWS admin du compte AWS par défaut, et les utilisateurs ops-user d'un autre compte AWS. Les utilisateurs sont ajoutés au groupe system:masters.

    # Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: v1 data: mapRoles: | - rolearn: arn:aws:iam::555555555555:role/devel-worker-nodes-NodeInstanceRole-74RF4UBDUKL6 username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes mapUsers: | - userarn: arn:aws:iam::555555555555:user/admin username: admin groups: - system:masters - userarn: arn:aws:iam::111122223333:user/ops-user username: ops-user groups: - system:masters
  4. Enregistrez le fichier et quittez votre éditeur de texte.