Comment puis-je gérer les autorisations entre les espaces de noms pour les utilisateurs IAM d’un cluster Amazon EKS ?
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 :
- Créez un rôle IAM que les membres de votre organisation pourront assumer.
- 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.
- 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 :
-
Créez un rôle pour déléguer des autorisations à un utilisateur IAM.
-
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.
-
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).
-
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
-
Exécutez la commande suivante pour voir les autorisations associées à l’administrateur du rôle de cluster :
$ kubectl describe clusterrole admin
-
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
-
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.
-
Exécutez la commande suivante pour créer le rôle RBAC :
$ kubectl apply -f role.yaml
-
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.
-
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
- Exécutez la commande suivante pour tester l’accès à l’espace de noms de test :
Remarque : la commande précédente crée une tâche qui utilise le rôle RBAC k8s-test-role que vous avez créé.$ kubectl create job hello -n test --image=busybox -- echo "Hello World"
- 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
Vidéos associées
Contenus pertinents
- demandé il y a un anlg...
- demandé il y a 2 anslg...
- demandé il y a un anlg...
- demandé il y a 5 moislg...
- AWS OFFICIELA mis à jour il y a 9 mois
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 2 mois
- AWS OFFICIELA mis à jour il y a un an