Comment puis-je gérer les autorisations entre les espaces de noms pour les utilisateurs IAM d’un cluster Amazon EKS ?

Lecture de 5 minute(s)
0

Je souhaite gérer les autorisations des utilisateurs AWS Identity and Access Management (AWS IAM) sur les espaces de noms de mon cluster Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Pour gérer les autorisations des utilisateurs entre les espaces de noms d’un cluster Amazon EKS, procédez comme suit :

  1. Créez un rôle IAM que les membres de votre organisation pourront assumer.
  2. Créez un rôle de contrôle d’accès basé sur les rôles (RBAC) Kubernetes (Rôle) et une liaison de rôle (RoleBinding) pour votre cluster. Pour en savoir plus, consultez la page Using RBAC authorization du site Web de Kubernetes.
  3. Utilisez la ConfigMap aws-auth pour mapper les rôles IAM aux rôles et groupes RBAC.

Remarque : lorsqu’un utilisateur ou un rôle IAM crée un cluster, seul l’ARN de cette identité IAM est ajouté à la ConfigMap aws-auth et dispose des autorisations system:masters. Cela signifie que seul le créateur du cluster peut ajouter d’autres utilisateurs ou rôles à la ConfigMap aws-auth.

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 page Résoudre des erreurs liées à AWS CLI. Vérifiez également que vous utilisez la version la plus récente d’AWS CLI.

Créer un rôle IAM que les membres de votre organisation peuvent endosser

Créez un rôle IAM pour permettre aux membres de votre organisation d’accéder à un espace de noms :

  1. Créez un rôle pour déléguer des autorisations à un utilisateur IAM.

  2. Pour vérifier qu’un utilisateur est autorisé à endosser le rôle IAM, configurez l’AWS CLI. Exécutez ensuite la commande suivante depuis le poste de travail de l’utilisateur en question :

    $ aws sts assume-role --role-arn arn:aws:iam::yourAccountID:role/yourIAMRoleName --role-session-name abcde{
        "Credentials": {
            "AccessKeyId": "yourAccessKeyId",
            "SecretAccessKey": "yourSecretAccessKey",
            "SessionToken": "yourSessionToken",
            "Expiration": "2020-01-30T01:57:17Z"
        },
        "AssumedRoleUser": {
            "AssumedRoleId": "yourAssumedRoleId",
            "Arn": "arn:aws:iam::yourAccountID:role/yourIAMRoleName"
        }
    }

    Remarque : remplacez yourAccessKeyId, yourSecretAccessKey, yourSessionToken, yourAssumedRoleId, yourAccountID et yourIAMRoleName par vos valeurs.

  3. Mettez à jour le fichier kubeconfig afin de configurer le kubectl de l’utilisateur IAM pour qu’il utilise toujours le rôle lorsqu’il accède à l’API Kubernetes :

    $ aws eks update-kubeconfig --name yourClusterName --role-arn arn:aws:iam::yourAccountID:role/yourIAMRoleName

    Remarque : remplacez yourClusterName, yourAccountID et yourIAMRoleName par vos valeurs.

Créer un rôle RBAC Kubernetes et une liaison de rôle pour votre cluster

Important : les étapes suivantes doivent être effectuées depuis un poste de travail configuré pour accéder à Kubernetes. Vous devez être un créateur de cluster ou une identité IAM disposant déjà d’un accès via la ConfigMap aws-auth. Le rôle IAM ne dispose pas encore d’un accès au cluster.

Liez un rôle de cluster (ClusterRole) à une liaison de rôle. Un rôle RBAC et une liaison de rôle sont des ressources Kubernetes qui disposent d’un espace de noms. Vous ne pouvez toutefois pas lier un rôle à une liaison de rôle de cluster (ClusterRoleBinding).

  1. Exécutez la commande suivante pour répertorier tous les rôles de cluster intégrés et lier l’administrateur du rôle de cluster à une liaison de rôle pour l’espace de noms :

    $ kubectl get clusterrole
  2. Exécutez la commande suivante pour voir les autorisations associées à l’administrateur du rôle de cluster :

    $ kubectl describe clusterrole admin
  3. Créez un espace de noms nommé test pour accorder l’accès aux utilisateurs IAM dans le cadre du groupe IAM :
    Remarque : si vous avez choisi un autre nom, remplacez les valeurs du paramètre namespace. Pour utiliser un espace de noms existant, passez à l’étape 4.

    $ kubectl create namespace test
  4. Pour créer un rôle RBAC Kubernetes, copiez le code suivant dans un nouveau fichier YAML (par exemple, role.yaml) :

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: k8s-test-role
      namespace: test
    rules:
      - apiGroups:
          - ""
          - "apps"
          - "batch"
          - "extensions"
        resources:
          - "configmaps"
          - "cronjobs"
          - "deployments"
          - "events"
          - "ingresses"
          - "jobs"
          - "pods"
          - "pods/attach"
          - "pods/exec"
          - "pods/log"
          - "pods/portforward"
          - "secrets"
          - "services"
        verbs:
          - "create"
          - "delete"
          - "describe"
          - "get"
          - "list"
          - "patch"
          - "update"

    Remarque : le rôle RBAC Kubernetes permet aux utilisateurs d’effectuer toutes les actions de la section verbs.

  5. Exécutez la commande suivante pour créer le rôle RBAC :

    $ kubectl apply -f role.yaml
  6. Créez une liaison de rôle Kubernetes. Copiez le code suivant dans un nouveau fichier YAML (par exemple, rolebinding.yaml) :

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: k8s-test-rolebinding
      namespace: test
    subjects:
    - kind: User
      name: k8s-test-user
    roleRef:
      kind: Role
      name: k8s-test-role
      apiGroup: rbac.authorization.k8s.io

    Remarque : la liaison de rôle est une ressource disposant d’un espace de noms qui lie le rôle RBAC de la section roleRef à l’utilisateur de la section subjects. Il n’est pas nécessaire de créer l’utilisateur k8s-test-user, car Kubernetes ne dispose pas d’une ressource de type utilisateur.

  7. Exécutez la commande suivante pour créer la liaison de rôle RBAC :

    $ kubectl apply -f rolebinding.yaml

Utiliser aws-auth ConfigMAP pour mapper le rôle IAM au rôle et au groupe RBAC

Exécutez la commande suivante pour associer le rôle IAM yourIAMRoleName à l’utilisateur Kubernetes k8s-test-user :

$ eksctl create iamidentitymapping --cluster yourClusterName --arn arn:aws:iam::yourAccountID:role/yourIAMRoleName --username k8s-test-user

Remarque : remplacez yourClusterName, yourAccountID et yourIAMRoleName par vos valeurs.

Tester l’accès à l’espace de noms

  1. Exécutez la commande suivante pour tester l’accès à l’espace de noms de test :
    $ kubectl create job hello -n test --image=busybox -- echo "Hello World"
    Remarque : la commande précédente crée une tâche qui utilise le rôle RBAC k8s-test-role que vous avez créé.
  2. Exécutez les commandes suivantes pour vérifier le pod et la tâche dans l’espace de noms de test :
    $ kubectl get job -n testNAME    COMPLETIONS   DURATION   AGE
    hello   1/1           4s         15s
    
    $ kubectl get pods -n test
    NAME          READY   STATUS      RESTARTS   AGE
    hello-tpjmf   0/1     Completed   0          2m34s
AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 3 mois