Comment configurer un utilisateur SSO pour accéder à mon cluster Amazon EKS ?
J'utilise AWS IAM Identity Center (successeur d'AWS Single Sign-On). Cependant, je ne parviens pas à accéder au cluster Amazon Elastic Kubernetes Service (Amazon EKS). Je souhaite configurer l'utilisateur SSO pour accéder à mon cluster.
Solution
Assurez-vous de respecter les conditions préalables suivantes :
- Vous avez activé et configuré IAM Identity Center (français non garanti).
- Votre utilisateur SSO est associé au compte AWS sur lequel se trouve le cluster Amazon EKS.
Remarque : les étapes suivantes utilisent kubectl pour accéder au cluster. Après avoir configuré l'accès à kubectl, vous pouvez consulter les ressources du cluster dans la console Amazon EKS en vous connectant en tant qu'utilisateur IAM Identity Center.
Remarque : si vous recevez des erreurs lors de l'exécution des commandes de l'Interface de la ligne de commande AWS (AWS CLI), assurez-vous d'exécuter une version récente de l'AWS CLI (français non garanti).
Configuration de l'AWS CLI pour votre utilisateur SSO
Créez un profil d'Interface de la ligne de commande AWS (AWS CLI) qui utilise l'authentification SSO lors de l'exécution des commandes de l'AWS CLI. Pour plus d'informations, veuillez consulter la section Configuration de l'AWS CLI pour utiliser AWS IAM Identity Center (successeur d'AWS Single Sign-On) (français non garanti).
Voici un exemple de configuration SSO de l'AWS CLI avec la procédure automatique :
aws configure sso SSO start URL [None]: https://my-sso-portal.awsapps.com/start SSO region [None]: us-east-1
L'AWS CLI tente d'ouvrir votre navigateur par défaut et de lancer le processus de connexion à votre compte IAM Identity Center.
Attempting to automatically open the SSO authorization page in your default browser.
Si l'AWS CLI ne parvient pas à ouvrir le navigateur, vous recevez le message suivant contenant des instructions pour démarrer manuellement le processus de connexion :
If the browser does not open or you wish to use a different device to authorize this request, open the following URL: https://device.sso.us-east-2.amazonaws.com/ Then enter the code: XXXX-XXXX The only AWS account available to you is: 123456789999 Using the account ID 123456789999 The only role available to you is: ViewOnlyAccess Using the role name "ViewOnlyAccess" CLI default client Region [us-east-2]: CLI default output format [json]: CLI profile name [ViewOnlyAccess-123456789999]: test-profile To use this profile, specify the profile name using --profile, as shown: aws s3 ls --profile test-profile
Vous pouvez désormais exécuter les commandes de l'AWS CLI à l'aide de ce nouveau profil. Cette configuration permet à votre utilisateur SSO d'effectuer ce qui suit :
- S'authentifier auprès d'AWS.
- Assumer un rôle de gestion des identités et des accès AWS (AWS IAM) créé par le IAM Identity Center.
Exemple :
$ aws sts get-caller-identity { "UserId": "AROAXMRV33N1234567890:test-user", "Account": "123456789999", "Arn": "arn:aws:sts::123456789999:assumed-role/AWSReservedSSO_ViewOnlyAccess_05a3861234567890/test-user" }
Configuration du contexte kubectl permettant l'utilisation du profil AWS CLI créé pour le SSO
Kubectl utilise les commandes de l'AWS CLI. Par conséquent, vous devez spécifier le nouveau profil AWS CLI dans le contexte kubectl actuel. Pour mettre à jour le contexte kubectl afin d'utiliser le nouveau profil, exécutez la commande suivante :
aws eks update-kubeconfig --name $CLUSTER-NAME --profile test-profile
Après avoir exécuté cette commande, kubectl utilise le profile test-profile pour s'authentifier auprès du serveur d'API du cluster.
Création d'une version ARN en excluant le chemin
Les rôles IAM mappés dans aws-auth ConfigMap n'incluent pas de chemin. Par défaut, l'Amazon Resource Name (ARN) du rôle IAM associé à votre utilisateur SSO inclut le chemin.
Exemple :
arn:aws:iam::123456789999:role/aws-reserved/sso.amazonaws.com/us-east-2/AWSReservedSSO_ViewOnlyAccess_05a3861234567890
Si vous ajoutez l'ARN complet à aws-auth ConfigMap, votre utilisateur SSO n'est pas authentifié. Vous ne pouvez pas accéder à votre cluster à l'aide de votre utilisateur SSO. Assurez-vous de créer une version de cet ARN sans inclure le chemin. Cette version doit être utilisée à l'étape suivante
Exemple :
arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01
Vous pouvez également obtenir le rôle IAM sans le chemin en exécutant les commandes suivantes :
ssorole=$(aws sts get-caller-identity --query Arn --output text --profile test-profile | cut -d/ -f2) account=$(aws sts get-caller-identity --query Account --output text --profile test-profile) echo "arn:aws:iam::$account:role/$ssorole" arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01
Ajout de l'ARN à aws-auth ConfigMap
Pour que votre utilisateur SSO puisse accéder au cluster Amazon EKS, le rôle IAM associé à votre utilisateur SSO doit être mappé aux autorisations RBAC Kubernetes. Pour ce faire, incluez l'ARN du rôle IAM sans le chemin dans aws-auth ConfigMap. Ensuite, associez-le à l'utilisateur et aux groupes Kubernetes liés au Role et RoleBinding Kubernetes (ou ClusterRole et ClusterRoleBinding). Suivez les instructions de l'une des sections suivantes en fonction de votre cas d'utilisation.
Utilisateur SSO disposant d'autorisations d'administrateur à l'échelle du cluster
Par défaut, le groupe Kubernetes system:masters fournit des autorisations d'administrateur à l'échelle du cluster. Ce groupe est lié au cluster-admin ClusterRole et au cluster-admin ClusterRoleBinding. Il n'est donc pas nécessaire de créer de nouveaux objets ClusterRole et ClusterBindingRole. Vous devez uniquement mapper le rôle IAM sans chemin au groupe system:masters.
Pour ce faire, modifiez aws-auth ConfigMap :
kubectl edit configmap aws-auth -n kube-system
Ajoutez ensuite ce qui suit :
- groups: - system:masters rolearn: arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 username: cluster-admin
Utilisateur SSO avec autorisations de lecture liées à l'espace de noms
Dans ce cas, vous devez créer un Role et un RoleBinding avec des autorisations de lecture dans un espace de noms spécifique. Liez ensuite ces objets au rôle IAM à l'aide d'un nom d'utilisateur ou d'un nom de groupe personnalisé dans aws-auth ConfigMap.
1. Créez un objet Role Kubernetes permettant uniquement les autorisations de lecture dans l'espace de noms de votre choix :
cat << EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: $MY-NAMESPACE name: reader-role rules: - apiGroups: [""] # "" indicates the core API group resources: ["*"] verbs: ["get", "watch", "list"] EOF
Remarque :
- Remplacez $MY-NAMESPACE par le nom de votre espace de noms.
- Remplacez reader-role par votre nom d'utilisateur personnalisé.
2. Créez un objet RoleBinding Kubernetes qui lie les autorisations de rôle Kubernetes au groupe read-only-group :
cat <<EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: reader-binding namespace: MY-NAMESPACE subjects: - kind: Group name: read-only-group apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: reader-role apiGroup: rbac.authorization.k8s.io EOF
3. Mappez l'ARN du rôle IAM sans chemin au groupe read-only-group dans aws-auth ConfigMap.
Vous pouvez mapper automatiquement le rôle IAM en exécutant la commande suivante :
eksctl create iamidentitymapping \ --cluster $CLUSTER-NAME \ --region $REGION \ --arn arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 \ --group read-only-group \ --no-duplicate-arns \ --username read-only-user1
Remarque : remplacez respectivement $CLUSTER-NAME et $REGION par le nom de votre cluster et de votre région. Vous pouvez également mapper le rôle IAM manuellement. Pour ce faire, modifiez aws-auth ConfigMap :
kubectl edit configmap aws-auth -n kube-system
Ajoutez ensuite ce qui suit sous la section mapRoles :
- groups: - read-only-group rolearn: arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 username: read-only-user1
Important : le rôle IAM ne doit apparaître qu'une seule fois dans aws-auth ConfigMap. Assurez-vous donc qu'une seule section inclut le rôle IAM.
Vous pouvez désormais utiliser votre utilisateur SSO pour accéder à votre cluster :
$ kubectl get pod NAME READY STATUS RESTARTS AGE web-0 1/1 Running 0 24h
Informations connexes
Activation de l'accès des utilisateurs et des rôles IAM à votre cluster
Contenus pertinents
- demandé il y a un anlg...
- demandé il y a 2 anslg...
- demandé il y a 6 moislg...
- demandé il y a 4 moislg...
- demandé il y a 7 moislg...
- AWS OFFICIELA mis à jour il y a 2 ans
- Comment puis-je utiliser l'API d'entrée d'accès Amazon EKS pour récupérer l'accès à un cluster EKS ?AWS OFFICIELA mis à jour il y a 6 mois
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a un an