Comment configurer un utilisateur SSO pour accéder à mon cluster Amazon EKS ?

Lecture de 7 minute(s)
0

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 :

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

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an