Cette page explique comment utiliser OIDC (OpenID Connect) avec GKE On-Prem. Pour utiliser OIDC, vous devez spécifier un fournisseur OpenID. Cette rubrique explique comment configurer GKE On-Prem pour utiliser Google comme fournisseur OpenID.
Pour une présentation du flux d'authentification, consultez la page Authentification. Pour obtenir des informations générales sur l'utilisation de fournisseurs OpenID avec GKE On-Prem, consultez la page Authentification avec OpenID Connect.
Limites
Le fournisseur Google OpenID n'est pas compatible avec les groupes. Lorsque vous utilisez le contrôle d'accès basé sur les rôles (RBAC) Kubernetes pour attribuer des rôles à des utilisateurs authentifiés, vous devez attribuer des rôles aux utilisateurs individuels, et non aux groupes.
Présentation
GKE On-Prem accepte OpenID Connect (OIDC) en tant que mécanisme d'authentification pour interagir avec le serveur d'API Kubernetes d'un cluster d'utilisateur. OIDC vous permet de gérer l'accès aux clusters Kubernetes en utilisant les procédures standards de votre organisation pour créer, activer et désactiver des comptes d'employés.
Un employé peut utiliser le processus d'authentification OIDC de deux façons :
Il peut utiliser
kubectl
pour lancer un processus OIDC. Pour que ce processus soit automatique, GKE On-Prem fournit le plug-in Anthos pour Kubectl, un plug-in kubectl.Il peut utiliser Google Cloud Console pour lancer un processus d'authentification OIDC.
Dans cet exercice, vous allez configurer les deux options : kubectl
et la console Google Cloud.
Avant de commencer
Avant de lire cette rubrique, vous devez connaître OAuth 2.0 et OpenID Connect. Vous devez également être familiarisé avec les champs d'application et revendications OpenID.
Personas
Cette rubrique fait référence à trois personas :
Administrateur de l'organisation : cette personne choisit un fournisseur OpenID et enregistre les applications clientes auprès du fournisseur.
Administrateur de cluster : cette personne crée un ou plusieurs clusters d'utilisateur et crée des fichiers de configuration d'authentification pour les développeurs qui utilisent les clusters.
Développeur : cette personne exécute des charges de travail sur un ou plusieurs clusters et s'authentifie à l'aide d'OIDC.
Créer une URL de redirection pour le plug-in Anthos pour Kubectl
Cette section est destinée aux administrateurs de l'organisation.
Dans le cadre de la configuration de Google comme fournisseur OpenID, vous devez spécifier une URL de redirection que Google peut utiliser pour renvoyer des jetons d'ID au plug-in Anthos pour Kubectl. Le plug-in Anthos pour Kubectl est exécuté sur la machine locale de chaque développeur et écoute sur le port de votre choix. Choisissez un numéro de port supérieur à 1 024 et adapté à cet usage. L'URL de redirection est alors la suivante :
http://localhost:[PORT]/callback
où [PORT] est votre numéro de port.
Lorsque vous configurez le fournisseur Google OpenID, définissez http://localhost:[PORT]/callback comme l'une de vos URL de redirection.
Configurer une URL de redirection pour la console Google Cloud
Cette section est destinée aux administrateurs de l'organisation.
En plus de disposer d'une URL de redirection pour le plug-in Anthos pour OIDC, vous avez besoin d'une URL de redirection pour la console Google Cloud. L'URL de redirection de la console Google Cloud est la suivante :
https://console.cloud.google.com/kubernetes/oidc
Lorsque vous configurez le fournisseur Google OpenID, indiquez https://console.cloud.google.com/kubernetes/oidc comme l'une de vos URL de redirection.
Configurer votre écran d'autorisation
Dans cette section, vous allez configurer l'écran d'autorisation OAuth de Google. Lorsqu'un développeur de votre organisation lance l'authentification auprès d'un cluster d'utilisateur, cet écran d'autorisation s'affiche. C'est à ce niveau que l'utilisateur prouve son identité à Google et autorise Google à créer un jeton qui fournit des informations d'identification au client OAuth. Dans le contexte de cette rubrique, le client OAuth est soit le plug-in Anthos pour Kubectl soit la console Google Cloud.
Accédez à la page Écran d'autorisation OAuth dans Google Cloud Console.
Sélectionnez Interne, puis cliquez sur Créer.
Dans le champ Type d'application, sélectionnez Interne.
Dans le champ Nom de l'application, saisissez le nom de votre choix. Suggestion :
GKE on-prem
.Sous Domaines autorisés, ajoutez
google.com
.Renseignez les champs supplémentaires que vous jugez nécessaires.
Cliquez sur Enregistrer.
Enregistrer une application cliente auprès de Google
Dans cette section, vous allez enregistrer GKE On-Prem auprès de Google afin que Google puisse agir en tant que fournisseur OpenID pour les développeurs de votre organisation. Dans le cadre de l'enregistrement, vous devez fournir les deux URL de redirection que vous avez créées précédemment.
Accédez à la page Identifiants dans Google Cloud Console.
Cliquez sur Créer des identifiants, puis sélectionnez ID client OAuth.
Dans le champ Type d'application, sélectionnez Application Web.
Dans le champ Nom, saisissez le nom de votre choix.
Sous URI de redirection autorisés, ajoutez vos deux URL de redirection. N'oubliez pas que vous avez créé une URL de redirection pour le plug-in Anthos pour Kubectl et une URL de redirection pour la console Google Cloud.
Cliquez sur Créer.
Vous recevez un ID client et un code secret client. Enregistrez-les pour une utilisation ultérieure.
Remplir la spécification oidc
dans le fichier de configuration GKE On-Prem
Cette section s'adresse aux administrateurs de cluster.
Avant de créer un cluster d'utilisateur, générez un fichier de configuration GKE On-Prem avec gkectl create-config
. La configuration inclut la spécification oidc
suivante. Renseignez oidc
avec des valeurs spécifiques à votre fournisseur :
oidc: issuerurl: kubectlredirecturl: clientid: clientsecret: username: usernameprefix: group: groupprefix: scopes: extraparams: usehttpproxy: capath:
issuerurl
: définissez cette valeur sur"https://accounts.google.com"
. Les applications clientes, telles que le plug-in Anthos pour Kubectl et la console Google Cloud, envoient des demandes d'autorisation à cette URL. Le serveur de l'API Kubernetes utilise cette URL pour découvrir les clés publiques permettant de valider les jetons.kubectlredirecturl
: URL de redirection que vous avez configurée précédemment pour le plug-in Anthos pour Kubectl.clientid
: ID de l'application cliente qui envoie des requêtes d'authentification au fournisseur OpenID. Le plug-in Anthos pour Kubectl et la console Google Cloud utilisent cet ID. Vous avez reçu cet ID lorsque vous avez enregistré votre application cliente auprès de Google.clientsecret
: code secret de l'application cliente. Le plug-in Anthos pour Kubectl et la console Google Cloud utilisent ce code secret. Vous avez reçu cet ID lorsque vous avez enregistré votre application cliente auprès de Google.username
: définissez cette valeur sur"email"
.usernameprefix
: facultatif. Préfixe ajouté aux revendications de nom d'utilisateur pour éviter les conflits avec les noms existants. Si vous ne renseignez pas ce champ et queusername
est une valeur autre queemail
, le préfixe est défini par défaut surissuerurl#
. Vous pouvez utiliser la valeur-
pour désactiver tous les préfixes.group
: laissez ce champ vide.groupprefix
: laissez ce champ vide.scopes
: définissez cette valeur sur"email"
.extraparams
: définissez cette valeur sur"prompt=consent,access_type=offline"
.usehttpproxy
: définissez cette valeur sur"false"
.capath
: laissez ce champ vide.
Créer une règle RBAC pour votre cluster d'utilisateur
Cette section s'adresse aux administrateurs de cluster.
Après avoir créé un cluster, utilisez le contrôle des accès basé sur les rôles (RBAC) Kubernetes afin d'accorder l'accès aux utilisateurs authentifiés du cluster. Pour accorder l'accès aux ressources d'un espace de noms particulier, créez un Role et un RoleBinding. Pour accorder l'accès aux ressources de l'ensemble d'un cluster, créez un ClusterRole et un ClusterRoleBinding.
Lorsque vous utilisez Google en tant que fournisseur OpenID, vous devez accorder l'accès à chaque utilisateur. Vous ne pouvez pas accorder l'accès aux groupes. Cela est dû au fait que le jeton renvoyé par le fournisseur Google OpenID ne contient aucune information sur les groupes auxquels appartient un utilisateur individuel.
Par exemple, supposons que vous souhaitiez que jane@example.com puisse afficher tous les objets Secret du cluster.
Voici le fichier manifeste d'un ClusterRole nommé secret-viewer
. Une personne disposant de ce rôle peut obtenir, surveiller et répertorier tous les objets Secret du cluster.
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: secret-viewer rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get", "watch", "list"]
Voici le fichier manifeste d'un ClusterRoleBinding nommé people-who-view-secrets
. La liaison accorde le rôle secret-viewer
à un utilisateur nommé jane@example.com
.
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: people-who-view-secrets subjects: - kind: User name: jane@example.com apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: secret-viewer apiGroup: rbac.authorization.k8s.io
Pour créer le ClusterRole, enregistrez le fichier manifeste dans un fichier nommé secret-viewer-cluster-role.yaml
, puis saisissez la commande suivante :
kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] apply -f secret-viewer-cluster-role.yaml
où [USER_CLUSTR_KUBECONFIG] est le fichier kubeconfig pour votre cluster d'utilisateur.
Pour créer le ClusterRoleBinding, enregistrez le fichier manifeste dans un fichier nommé secret-viewer-cluster-role-binding.yaml
, puis saisissez la commande suivante :
kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] apply -f secret-viewer-cluster-role-binding.yaml
Créer votre premier fichier de configuration d'authentification
Cette section s'adresse aux administrateurs de cluster.
Une fois que vous avez créé un cluster d'utilisateur, créez un fichier de configuration d'authentification pour votre cluster :
gkectl create-login-config --kubeconfig [USER_CLUSTER_KUBECONFIG]
où [USER_CLUSTER_KUBECONFIG] est le chemin d'accès au fichier de votre cluster d'utilisateur. Lorsque vous avez créé votre cluster d'utilisateur, gkectl create cluster
a généré un fichier kubeconfig pour le cluster.
La commande précédente crée un fichier nommé kubectl-anthos-config.yaml
dans le répertoire actuel.
Ajouter des clusters supplémentaires à votre fichier de configuration d'authentification
Cette section s'adresse aux administrateurs de cluster.
Vous pouvez stocker la configuration d'authentification pour plusieurs clusters dans un même fichier. Vous pouvez ensuite distribuer ce fichier aux développeurs qui doivent avoir accès à tous ces clusters.
Commencez avec un fichier de configuration d'authentification existant. Exécutez ensuite la commande suivante pour fusionner ce fichier avec la configuration d'un cluster supplémentaire :
gkectl create-login-config --kubeconfig [USER_CLUSTER_KUBECONFIG] \ --merge-from [IN_AUTH_CONFIG_FILE] --output [OUT_AUTH_CONFIG_FILE]
Où :
[USER_CLUSTER_KUBECONFIG] est le fichier kubeconfig du cluster supplémentaire.
[IN_AUTH_CONFIG_FILE] est le chemin d'accès au fichier de configuration d'authentification existant.
[OUT_AUTH_CONFIG_FILE] correspond au chemin dans lequel vous souhaitez enregistrer le fichier contenant la configuration fusionnée. Il peut s'agir de la même valeur que [IN_AUTH_CONFIG_FILE].
Distribuer le fichier de configuration d'authentification
Cette section s'adresse aux administrateurs de cluster.
Le fichier de configuration d'authentification que vous distribuez à vos développeurs doit être nommé kubectl-anthos-config.yaml
. Vous pouvez le distribuer de plusieurs manières :
Transmettez manuellement le fichier à chaque développeur.
Hébergez le fichier sur une URL, afin que les développeurs puissent le télécharger.
Transférez le fichier à l'ordinateur de chaque développeur.
Quel que soit votre mode de distribution, le fichier de configuration d'authentification doit être placé à cet emplacement sur la machine de chaque développeur :
Linux
$HOME/.config/google/anthos/kubectl-anthos-config.yaml
macOS
$HOME/Library/Preferences/google/anthos/kubectl-anthos-config.yaml
Windows
%APPDATA%\google\anthos\kubectl-anthos-config.yaml
Placer le fichier de configuration d'authentification
Cette section s'adresse aux développeurs.
Le fichier de configuration d'authentification contient les détails de tous les clusters auxquels vous pouvez vous authentifier. Ne modifiez pas le contenu de ce fichier.
Si l'administrateur de cluster vous a fourni un fichier de configuration d'authentification, placez-le dans le répertoire approprié. Si l'administrateur de cluster a déjà placé la configuration sur votre machine, vous pouvez ignorer cette section.
Copiez le fichier de configuration d'authentification à son emplacement par défaut :
Linux
mkdir -p $HOME/.config/google/anthos/ cp [AUTH_CONFIG_FILE] $HOME/.config/google/anthos/kubectl-anthos-config.yaml
où [AUTH_CONFIG_FILE] est le nom de votre fichier de configuration d'authentification.
macOS
mkdir -p $HOME/Library/Preferences/google/anthos/ cp [AUTH_CONFIG_FILE] $HOME/Library/Preferences/google/anthos/kubectl-anthos-config.yaml
où [AUTH_CONFIG_FILE] est le nom de votre fichier de configuration d'authentification.
Windows
md "%APPDATA%\google\anthos" copy [AUTH_CONFIG_FILE] "%APPDATA%\google\anthos\kubectl-anthos-config.yaml"
où [AUTH_CONFIG_FILE] est le nom de votre fichier de configuration d'authentification.
Obtenir le plug-in Anthos pour Kubectl
Cette section s'adresse aux administrateurs de cluster.
Le plug-in Anthos pour Kubectl est inclus dans votre poste de travail administrateur à l'adresse :
Linux
/usr/bin/kubectl_anthos/v1.0beta/linux_amd64/kubectl-anthos
macOS
/usr/bin/kubectl_anthos/v1.0beta/darwin_amd64/kubectl-anthos
Windows
/usr/bin/kubectl_anthos/v1.0beta/windows_amd64/kubectl-anthos
Vous pouvez distribuer le plug-in à vos développeurs ou leur demander de le télécharger directement.
Télécharger le plug-in Anthos pour Kubectl
Cette section s'adresse aux administrateurs de cluster et aux développeurs.
Tous les développeurs doivent disposer du plug-in Anthos pour Kubectl sur leur propre machine. Les développeurs peuvent télécharger le plug-in individuellement, ou l'administrateur du cluster peut télécharger le plug-in, puis le distribuer aux développeurs.
Remarque pour les développeurs : Demandez à l'administrateur de cluster quelle version du plug-in vous devez utiliser.
Téléchargez le plug-in Anthos pour Kubectl :
Linux
gsutil cp gs://gke-on-prem-release/kubectl-anthos/v1.0beta/linux_amd64/kubectl-anthos ./ chmod +x kubectl-anthos
macOS
gsutil cp gs://gke-on-prem-release/kubectl-anthos/v1.0beta/darwin_amd64/kubectl-anthos ./ chmod +x kubectl-anthos
Windows
gsutil cp gs://gke-on-prem-release/kubectl-anthos/v1.0beta/windows_amd64/kubectl-anthos ./ rename kubectl-anthos kubectl-anthos.exe.
Installer le plug-in Anthos pour Kubectl
Cette section s'adresse aux développeurs.
L'administrateur de cluster peut vous fournir le plug-in Anthos pour Kubectl. Il peut également vous demander de télécharger le plug-in vous-même.
Pour installer le plug-in Anthos pour Kubectl, déplacez le fichier exécutable vers n'importe quel emplacement de votre variable PATH.
Le fichier exécutable doit être nommé kubectl-anthos
. Pour en savoir plus, consultez la section Installer des plug-ins Kubectl.
Vérifiez que le plug-in Anthos pour Kubectl est installé :
kubectl plugin list kubectl anthos version
Répertorier les clusters disponibles
Cette section s'adresse aux développeurs.
Si votre fichier de configuration d'authentification se trouve sur le chemin par défaut, saisissez la commande suivante pour répertorier les clusters auxquels vous pouvez vous authentifier :
kubectl anthos listclusters
Si votre fichier de configuration d'authentification ne se trouve pas sur le chemin par défaut, saisissez la commande suivante pour répertorier les clusters :
kubectl anthos listclusters --loginconfig [AUTH_CONFIG_FILE]
où [AUTH_CONFIG_FILE] est le chemin d'accès à votre fichier de configuration d'authentification.
Utiliser le plug-in Anthos pour Kubectl pour s'authentifier
Cette section s'adresse aux développeurs.
Connectez-vous à un cluster d'utilisateur :
kubectl anthos login --cluster [CLUSTER_NAME] --user [USER_NAME] \ --loginconfig [AUTH_CONFIG_FILE] --kubeconfig [USER_CLUSTER_KUBECONFIG]
où :
[CLUSTER_NAME] par le nom de votre cluster d'utilisateur. Ce nom doit être sélectionné dans la liste fournie par la commande
kubectl anthos listclusters
.[USER_NAME] correspond au paramètre facultatif qui spécifie le nom d'utilisateur pour les identifiants stockés dans le fichier kubeconfig. La valeur par défaut est
[CLUSTER_NAME]-anthos-default-user
.[AUTH_CONFIG_FILE] est le chemin d'accès à votre fichier de configuration d'authentification. Si votre fichier de configuration d'authentification se trouve à l'emplacement par défaut, vous pouvez omettre ce paramètre.
[USER_CLUSTER_KUBECONFIG] est le chemin d'accès au fichier kubeconfig de votre cluster d'utilisateur. Si aucun fichier kubeconfig n'existe, la commande génère un nouveau fichier kubeconfig à partir du fichier de configuration d'authentification, puis ajoute les jetons et les détails du cluster au fichier kubeconfig.
kubectl anthos login
lance un navigateur dans lequel vous pouvez saisir vos identifiants.
Le fichier kubeconfig fourni contient désormais un jeton d'ID que kubectl
peut utiliser pour s'authentifier auprès du serveur d'API Kubernetes sur le cluster d'utilisateur.
La commande kubectl anthos login
comporte une option --dry-run
facultative. Si vous incluez l'option --dry-run
, la commande imprime les commandes kubectl
qui ajouteraient des jetons au fichier kubeconfig, mais n'enregistre pas réellement ces jetons dans le fichier kubeconfig.
Vérifiez que l'authentification a abouti en saisissant une commande kubectl
. Exemple :
kubectl get nodes --kubeconfig [USER_CLUSTER_KUBECONFIG]
Utiliser OIDC avec Google Cloud Console
Cette section s'adresse aux développeurs.
-
Vérifiez que votre cluster est configuré pour OIDC.
-
Vérifiez que votre cluster a été enregistré auprès de Google Cloud soit automatiquement lors de sa création, soit manuellement.
-
Accédez à la page Clusters Kubernetes dans la console Google Cloud.
-
Dans la liste des clusters, localisez votre cluster GKE On-Prem, puis cliquez sur Connexion.
-
Sélectionnez S'authentifier auprès du fournisseur d'identité configuré pour le cluster, puis cliquez sur CONNEXION.
Vous serez redirigé vers votre fournisseur d'identité, où vous devrez peut-être vous connecter ou autoriser la console Google Cloud à accéder à votre compte. Vous serez ensuite redirigé vers la page Clusters Kubernetes dans la console Google Cloud.
Configuration personnalisée
Par défaut, le plug-in Anthos pour Kubectl s'attend à ce que le fichier de configuration d'authentification se trouve à un certain emplacement.
Si vous ne souhaitez pas placer le fichier de configuration d'authentification à l'emplacement par défaut, vous pouvez transmettre manuellement son chemin d'accès aux commandes du plug-in à l'aide de l'option --login-config
. Pour voir un exemple, consultez la section Utiliser le plug-in Anthos pour Kubectl pour s'authentifier.
Résoudre les problèmes liés à OIDC dans GKE On-Prem
Configuration non valide
Si la console Google Cloud ne peut pas lire la configuration OIDC de votre cluster, le bouton CONNEXION est désactivé.
Configuration de fournisseur non valide
Si la configuration de votre fournisseur d'identité n'est pas valide, un message d'erreur en provenance de votre fournisseur d'identité s'affiche lorsque vous cliquez sur CONNEXION. Suivez les instructions propres au fournisseur pour configurer correctement le fournisseur ou votre cluster.
Autorisations non valides
Si vous avez terminé le processus d'authentification, mais que vous ne voyez toujours pas les détails du cluster, assurez-vous que vous avez accordé les autorisations RBAC correctes au compte que vous avez utilisé avec OIDC. Notez qu'il peut s'agir d'un compte différent de celui que vous utilisez pour accéder à la console Google Cloud.
Error: missing 'RefreshToken' field in 'OAuth2Token' in credentials struct
Vous pouvez rencontrer cette erreur si le serveur d'autorisation demande votre autorisation, mais que le paramètre d'authentification requis n'a pas été fourni. Indiquez le paramètre prompt=consent
dans le champ oidc: extraparams
du fichier de configuration de GKE On-Prem et générez à nouveau le fichier d'authentification du client avec l'option --extra-params prompt=consent
.
Étapes suivantes
Consultez la présentation de l'authentification avec OpenID Connect dans GKE On-Prem.
Découvrez-en davantage sur OAuth 2.0.
Découvrez-en davantage sur OpenID Connect.
En savoir plus sur les champs d'application et les revendications.
En savoir plus sur les revendications personnalisées dans les jetons d'ID.