2 votes

Seul l'utilisateur créateur peut gérer le cluster AWS kubernetes (EKS) à partir de kubectl ?

Nous avons deux clusters, nommés :

  1. MyCluster (créé par moi)
  2. OtherCluster (non créé par moi)

Où "me" est mon propre utilisateur AWS IAM.

Je peux gérer le cluster que j'ai créé, en utilisant kubectl :

>>> aws eks update-kubeconfig --name MyCluster –profile MyUser
>>> kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   172.20.0.1   <none>        443/TCP   59d

Mais je ne peux pas gérer le cluster "OtherCluster" (que je n'ai pas créé) :

>>> aws eks update-kubeconfig --name OtherCluster --profile MyUser
>>> kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
error: the server doesn't have a resource type "svc"

Après avoir lu les commentaires de certaines personnes ayant rencontré le même problème dans cette problème github J'ai essayé de le faire dans le contexte de l'utilisateur qui a créé l'"OtherCluster" à l'origine.

Pour ce faire, j'ai édité "~/.kube/config" et ajouté une valeur "AWS_PROFILE" dans "users.user.env". Le profil représente l'utilisateur qui a créé le cluster.

~/.kube/config :

…
users
- name: OtherCluster
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      args:
      - token
      - -i
      - OtherCluster
      command: aws-iam-authenticator
      env:
      - name: AWS_PROFILE
        value: OTHER_USER_PROFILE
…

Cela a fonctionné :

# ~/.kube/config is currently pointing to OtherCluster

>>> kubectl get svc 
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   172.20.0.1   <none>        443/TCP   1d

Il n'est évidemment pas idéal pour moi d'usurper l'identité d'une autre personne lorsque je gère le cluster. Je préférerais accorder à mon propre utilisateur l'accès à la gestion du cluster via kubectl. Existe-t-il un moyen d'accorder l'autorisation de gérer le cluster à un utilisateur autre que le créateur original ? Cela me semble trop restrictif

3voto

Eduardo Baitello Points 1216

Lorsqu'un cluster Amazon EKS est créé, l'entité IAM (utilisateur ou rôle) qui crée le cluster est ajoutée à la table d'autorisation RBAC de Kubernetes en tant qu'administrateur. Au départ Ainsi, seul cet utilisateur IAM peut appeler le serveur API de Kubernetes à l'aide de kubectl.

Pour permettre à d'autres utilisateurs AWS d'interagir avec votre cluster, vous devez modifier le fichier aws-auth ConfigMap au sein de Kubernetes, en ajoutant un nouveau fichier mapUsers pour votre ConfigMap. Ce document EKS couvre l'ensemble du processus.

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

  • utilisateur : L'ARN de l'utilisateur IAM à ajouter.
  • username : Le nom d'utilisateur dans Kubernetes à mettre en correspondance avec l'utilisateur IAM. Par défaut, le nom d'utilisateur est l'ARN de l'utilisateur IAM.
  • groupes : Une liste de groupes au sein de Kubernetes auxquels l'utilisateur est associé. Pour plus d'informations, voir Rôles par défaut et liaisons de rôles.
    dans la documentation de Kubernetes.

Ejemplo:

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/my-new-admin-user
      username: my-new-admin-user
      groups:
        - system:masters

1voto

James Wierzba Points 5885

La reconfiguration de kubectl pour EKS, en utilisant le profil d'authentification AWS pour le nouvel utilisateur, a semblé faire l'affaire.

aws eks update-kubeconfig --name ${CLUSTER_NAME} --profile ${OTHER_USER}

${OTHER_USER} est le nouvel utilisateur auquel j'essaie d'accorder l'accès au cluster EKS, et qui n'est pas l'utilisateur qui a créé le cluster à l'origine.

Je ne peux pas expliquer pourquoi cette étape a fonctionné pour moi maintenant, alors qu'elle n'a pas fonctionné pour moi plus tôt, lorsque j'ai posé cette question. Mais j'espère que cela aidera quelqu'un d'autre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X