S'authentifier à l'aide d'un jeton de support
Cette page explique comment configurer l'authentification à l'aide d'un jeton de support pour se connecter à des clusters enregistrés en dehors de Google Cloud. Une fois la configuration terminée, les administrateurs de cluster pourront se connecter aux clusters à partir de la console Google Cloud. De nombreux types de jetons de support sont acceptés, comme spécifié dans l'authentification Kubernetes. La méthode la plus simple consiste à créer un compte de service Kubernetes (KSA) dans le cluster et à utiliser son jeton de support pour se connecter.
Autres méthodes d'authentification
Au lieu de configurer l'authentification à l'aide d'un jeton de support, vous pouvez configurer l'une des méthodes d'authentification suivantes en fonction des besoins de votre organisation:
Google Identity, qui permet aux utilisateurs de se connecter à l'aide de leur identité Google Cloud Identity. Utilisez cette option si vos utilisateurs ont déjà accès à Google Cloud avec une identité Google.
Si votre cluster est configuré pour utiliser un fournisseur d'identité OIDC, vous pouvez vous en servir pour vous authentifier sur le cluster à partir de Google Cloud Console. Pour savoir comment configurer OIDC pour les clusters GKE, consultez les guides suivants :
- Configurer des clusters pour GKE Identity Service avec OIDC. Ce guide explique comment configurer l'authentification OIDC par cluster pour tous les types de clusters GKE.
- Configurer GKE Identity Service pour un parc. Cette option vous permet de configurer OIDC au niveau du parc pour les types de cluster compatibles. La configuration au niveau du parc est compatible avec les clusters GKE sur Google Cloud, tous les types de clusters GKE et les clusters associés à EKS sur AWS.
Si ces méthodes d'authentification fournies par Google ne sont pas adaptées à votre organisation, suivez les instructions de cette page pour configurer l'authentification à l'aide d'un jeton de support.
Accorder des rôles IAM pour l'accès via la console Google Cloud
Les utilisateurs qui souhaitent afficher les clusters connectés à l'aide de la console Google Cloud doivent disposer au minimum des rôles IAM suivants :
roles/container.viewer
Ce rôle permet aux utilisateurs d'afficher les ressources de conteneurs dans la console Google Cloud, y compris sur la page des clusters GKE. Pour en savoir plus sur les autorisations incluses dans ce rôle, consultez la page Rôles Kubernetes Engine dans la documentation IAM.roles/gkehub.viewer
Ce rôle permet aux utilisateurs d'afficher les clusters situés en dehors de Google Cloud dans la console Google Cloud. Les utilisateurs n'ont pas besoin de ce rôle si votre parc n'inclut pas de clusters en dehors de Google Cloud. Pour en savoir plus sur les autorisations incluses dans ce rôle, consultez la page Rôles GKE Hub dans la documentation IAM.
Exécutez les commandes suivantes pour attribuer ces rôles :
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL_ADDRESS' \
--role=roles/container.viewer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL_ADDRESS' \
--role=roles/gkehub.viewer
Remplacez les éléments suivants :
PROJECT_ID
: ID du projet du projet hôte du parc.EMAIL_ADDRESS
: adresse e-mail associée au compte Google Cloud de l'utilisateur.
Pour en savoir plus sur l'attribution de rôles IAM, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations dans la documentation IAM.
Configurer le contrôle des accès basé sur les rôles
Le contrôle des accès aux clusters est effectué à l'aide du contrôle des accès basé sur les rôles (RBAC) de Kubernetes.
Vous ou un administrateur du cluster devez de préférence créer un KSA pour chaque utilisateur qui se connecte au cluster. L'utilisation d'un jeton de support revient à utiliser un mot de passe, chaque utilisateur devant disposer de son propre compte. Lors de la connexion avec le jeton de support du KSA (compte de service Kubernetes), toutes les opérations sont exécutées au nom du KSA et sont limitées par les rôles RBAC qu'il détient.
Le KSA doit conserver au moins les rôles RBAC suivants dans le cluster pour y accéder via la console :
Créer et appliquer le rôle RBAC cloud-console-reader
Les utilisateurs authentifiés qui souhaitent accéder aux ressources d'un cluster dans la console Google Cloud doivent disposer des autorisations Kubernetes appropriées. Si vous ne souhaitez pas accorder à ces utilisateurs des autorisations plus étendues, telles que celles d'un administrateur de cluster, vous pouvez créer un rôle RBAC personnalisé qui inclut les autorisations minimales requises pour afficher les nœuds, les volumes persistants, les pods et les classes de stockage du cluster. Vous pouvez définir cet ensemble d'autorisations en créant une ressource ClusterRole
RBAC (cloud-console-reader
) dans le cluster.
cloud-console-reader
accorde à ses utilisateurs les autorisations get
, list
et watch
sur les nœuds, les volumes persistants, les pods et les classes de stockage du cluster, ce qui leur permet d'afficher des informations détaillées sur ces ressources.
kubectl
Pour créer le ClusterRole
cloud-console-reader
et l'appliquer au cluster, exécutez la commande suivante :
cat <<EOF > cloud-console-reader.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cloud-console-reader
rules:
- apiGroups: [""]
resources: ["nodes", "persistentvolumes", "pods"]
verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
EOF
kubectl apply -f cloud-console-reader.yaml
Vous pouvez ensuite attribuer ce rôle aux KSA, comme décrit dans la section suivante.
Créer et autoriser un KSA
kubectl
Pour créer un KSA et lui accorder des autorisations, procédez comme suit :
Créez les ressources KSA et
ClusterRoleBinding
pour lier lesClusterRoles
RBAC Kubernetesview
etcloud-console-reader
au KSA :KSA_NAME=KSA_NAME kubectl create serviceaccount ${KSA_NAME} kubectl create clusterrolebinding VIEW_BINDING_NAME \ --clusterrole view --serviceaccount default:${KSA_NAME} kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \ --clusterrole cloud-console-reader --serviceaccount default:${KSA_NAME}
Remplacez l'élément suivant :
KSA_NAME
: nom que vous avez choisi pour le KSAVIEW_BINDING_NAME
: nom que vous avez choisi pour la ressourceClusterRoleBinding
view
; vous pouvez la nommer comme vous le souhaitez, mais il est sans doute plus simple de le faire en fonction du KSACLOUD_CONSOLE_READER_BINDING_NAME
: nom que vous avez choisi pour la ressourceClusterRoleBinding
cloud-console-reader
; vous pouvez également la nommer comme vous le souhaitez
Selon l'accès que le compte de service devrait avoir, associez des rôles supplémentaires au KSA. Pour les options, consultez les rôles par défaut de Kubernetes.
Par exemple, si vous souhaitez déployer une application Kubernetes à partir de Cloud Marketplace, associez le rôle
cluster-admin
au KSA :kubectl create clusterrolebinding BINDING_NAME \ --clusterrole cluster-admin --serviceaccount default:KSA_NAME
Remplacez
BINDING_NAME
par le nom de la liaison de rôle du cluster pour le compte de service.
Autoriser d'autres comptes
kubectl
Pour chaque autre utilisateur ou compte de service ayant accès au cluster, créez des ressources ClusterRoleBinding
pour lier les rôles view
et cloud-console-reader
au compte :
Liez les
ClusterRoles
view
etcloud-console-reader
:ACCOUNT_NAME=ACCOUNT_NAME kubectl create clusterrolebinding VIEW_BINDING_NAME \ --clusterrole view --serviceaccount default:${ACCOUNT_NAME} kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \ --clusterrole cloud-console-reader --serviceaccount default:${ACCOUNT_NAME}
Remplacez l'élément suivant :
ACCOUNT_NAME
: compte de service KubernetesVIEW_BINDING_NAME
: nom que vous avez choisi pour la ressourceClusterRoleBinding
view
; vous pouvez la nommer comme vous le souhaitez, mais il est sans doute plus simple de le faire en fonction du compte de serviceCLOUD_CONSOLE_READER_BINDING_NAME
: nom que vous avez choisi pour la ressourceClusterRoleBinding
view
; vous pouvez la nommer comme vous le souhaitez, mais il est sans doute plus simple de le faire en fonction du KSA
Liez des rôles supplémentaires en fonction de l'accès dont le compte devrait disposer. Pour les options, consultez les rôles par défaut de Kubernetes.
Par exemple, pour lier le rôle
cluster-admin
, exécutez la commande suivante :kubectl create clusterrolebinding BINDING_NAME \ --clusterrole cluster-admin --serviceaccount default:ACCOUNT_NAME
Remplacez
BINDING_NAME
par le nom de la liaison de rôle du cluster pour le compte de service.
Obtenir le jeton de support du KSA
kubectl
Pour acquérir le jeton de support du KSA, exécutez la commande suivante :
SECRET_NAME=KSA_NAME-token kubectl apply -f - << __EOF__ apiVersion: v1 kind: Secret metadata: name: "${SECRET_NAME}" annotations: kubernetes.io/service-account.name: "${KSA_NAME}" type: kubernetes.io/service-account-token __EOF__ until [[ $(kubectl get -o=jsonpath="{.data.token}" "secret/${SECRET_NAME}") ]]; do echo "waiting for token..." >&2; sleep 1; done kubectl get secret ${SECRET_NAME} -o jsonpath='{$.data.token}' | base64 --decode
Remplacez KSA_NAME
par le nom que vous avez choisi pour le KSA.
À partir du résultat de cette commande, copiez le jeton et enregistrez-le pour que les utilisateurs puissent l'utiliser pour se connecter à la console Google Cloud.