Comment gérer les autorisations entre les espaces de noms de mes utilisateurs IAM dans un cluster Amazon EKS ?

Dernière mise à jour : 20/08/2020

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

Brève description

Pour gérer les autorisations utilisateur dans les espaces de noms d'un cluster Amazon EKS, vous devez :

  1. Créer un rôle IAM qui peut être assumé par les membres de votre organisation
  2. Créer un Kubernetes de contrôle d'accès basé sur les rôles (RBAC) rôle (Role) et une liaison de rôle (RoleBinding) pour le cluster
  3. Associer les rôles IAM aux rôles et groupes RBAC à l'aide d'aws-auth ConfigMap

Remarque : lors de la création d'un cluster, seul l'Amazon Resource Name (ARN) de l'utilisateur ou du rôle IAM qui a créé le cluster est ajouté au fichier 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 à ConfigMap aws-auth.

Solution

Créer un rôle IAM qui peut être assumé par les membres de votre organisation

Pour donner aux membres de votre organisation l'accès à un espace de noms, vous devez créer un rôle IAM qui peut être assumé par ces membres.

1.    Créez un rôle pour la délégation d'autorisations à un utilisateur IAM

2.    Pour vérifier qu'un utilisateur est autorisé à assumer le rôle IAM de l'étape 1, configurez l'interface de ligne de commande AWS (AWS CLI), puis exécutez la commande suivante à partir du poste de travail de l’utilisateur :

$ 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.    Pour configurer le kubectl de l'utilisateur IAM afin qu'il utilise toujours le rôle lors de l'accès à l'API Kubernetes, exécutez la commande suivante pour mettre à jour le fichier kubeconfig :

$ 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 à partir d'un poste de travail configuré pour accéder à Kubernetes. L'utilisateur doit être un créateur de cluster ou une entité IAM qui a déjà reçu l'accès via le ConfigMap aws-auth. Le rôle IAM créé dans les étapes précédentes n'a pas encore reçu l'accès au cluster.

Vous pouvez lier un rôle de cluster (ClusterRole) à une liaison de rôle. Cela est possible, car un rôle RBAC et une liaison de rôle sont des ressources dans un espace de noms Kubernetes. Cependant, vous ne pouvez pas lier un rôle à une liaison de rôle de cluster (ClusterRoleBinding).

1.    Pour répertorier tous les rôles de cluster intégrés, liez l'administrateur du rôle de cluster à une liaison de rôle pour cet espace de noms, puis exécutez la commande suivante :

$ kubectl get clusterrole

2.    Pour afficher les autorisations associées à l'administrateur du rôle de cluster, exécutez la commande suivante :

$ kubectl describe clusterrole admin

Important : pour utiliser un espace de noms existant, vous pouvez ignorer l'étape 3 suivante. Si vous choisissez un nom différent pour l'espace de noms test, remplacez les valeurs du paramètre namespace dans les étapes 4 et 6 suivantes.

3.    Pour créer l'espace de noms test qui accorde l'accès aux utilisateurs IAM dans le cadre du groupe IAM, exécutez la commande suivante :

$ 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/v1beta1
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 précédent permet aux utilisateurs d'effectuer toutes les actions de la section verbs.

5.    Pour créer le rôle RBAC, exécutez la commande suivante :

$ kubectl apply -f role.yaml

6.    Pour créer une liaison de rôle Kubernetes, copiez le code suivant dans un nouveau fichier YAML :

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
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 avec un espace de noms qui lie le rôle RBAC dans la section roleRef à l'utilisateur dans la section subjects. Vous n'avez pas besoin de créer l'utilisateur k8s-test-user, car Kubernetes n'a pas de type de ressource user.

7.    Pour créer la liaison de rôle RBAC, exécutez la commande suivante :

$ kubectl apply -f rolebinding.yaml

8.    Pour associer le rôle IAM votreIAMRoleName à l'utilisateur Kubernetes k8s-test-user, exécutez la commande suivante :

$ 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.

Teste l'accès à l'espace de noms

Pour tester l'accès à l'espace de noms test, assumez le rôle IAM votreIAMRoleName pour un utilisateur que vous avez créé, puis exécutez la commande suivante :

$ kubectl get role -n test

La commande précédente répertorie le rôle RBAC k8s-test-role que vous avez créé précédemment.

Les utilisateurs IAM qui font partie du groupe IAM peuvent désormais utiliser cet espace de noms et déployer leurs applications.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?