Tutoriel : Mettre en place un fournisseur OIDC pour l’authentification
OKS prend en charge l’authentification OpenID Connect (OIDC) des utilisateurs via kubectl. Vous pouvez configurer votre cluster OKS pour activer le protocole d’authentification OIDC.
Cette stratégie d’authentification s’ajoute à l’authentification par certificat utilisée par défaut pour les clusters OKS. L’accès par certificat est utilisé lors des premières étapes pour ajouter des autorisations de contrôle d’accès basé sur les rôles (RBAC) aux utilisateurs connectés via OIDC.
|
Cette fonctionnalité est disponible à partir de la version 1.20 d’OKS CLI. |
Préparer votre fournisseur OIDC
Avant de commencer :
|
Dans cet exemple, nous allons utiliser GitLab en tant que fournisseur d’identité OIDC.
-
Sur GitLab, accédez à vos applications :
https://gitlab.<DOMAIN.NAME>/-/user_settings/applications. -
Cliquez sur Ajouter une nouvelle application pour ajouter un fournisseur d’authentification.
Une section de configuration s’affiche. -
Dans le champ Name, saisissez un nom pour votre application.
-
Dans le champ Redirect URI, saisissez
http://localhost:8000, et désactivez l’optionConfidentiel. -
Dans la liste Scopes, sélectionnez
openid,profile, etemail, puis cliquez sur Enregistrer l’application.
Votre nouvelle application est créée, et GitLab affiche son identifiant et son secret.
Configurer OIDC pour votre cluster
Pour activer la prise en charge d’OIDC et afficher les noms d’utilisateur sous forme d’adresses e-mail plutôt que d’ID, vous devez définir les propriétés de l’application OIDC pour votre cluster à l’aide de l’option set.
Créer un cluster
Pour créer un nouveau cluster, utilisez la commande cluster create en suivant cette syntaxe :
$ oks-cli cluster create \
--cluster-name <NAME_OF_CLUSTER> \
--set auth.oidc.client-id=<APPLICATION_ID> \
--set auth.oidc.issuer-url=https://gitlab.<DOMAIN.NAME> \
--set auth.oidc.username-claim=email
Cette commande contient les options suivantes que vous devez spécifier :
-
cluster-name: Le nom du cluster, d’une longueur maximale de 40 caractères alphanumériques et tirets (-). Ce nom doit commencer par une lettre minuscule et ne doit pas finir par un tiret. Il doit être unique dans le projet. -
set: Permet de définir des propriétés.-
auth.oidc.client-id: L’identifiant client fourni par le fournisseur OIDC. Il sera utilisé par le cluster pour se connecter au serveur. -
auth.oidc.issuer-url: L’URL du serveur du fournisseur OIDC, utilisant le protocole HTTPS (https://). -
auth.oidc.username-claim: Un JSON Web Token (JWT) fourni par le fournisseur OIDC. Par défaut,email. Il sera utilisé pour récupérer l’adresse e-mail de connexion côté Kubernetes.
-
Le cluster prend désormais en charge la connexion via OIDC à l’adresse https://gitlab.<DOMAIN.NAME>, en plus des connexions par certificat.
Mettre à jour un cluster
Pour mettre à jour un cluster existant, utilisez la commande cluster update en suivant cette syntaxe :
$ oks-cli cluster update \
--cluster-name <NAME_OF_CLUSTER> \
--set auth.oidc.client-id=<APPLICATION_ID> \
--set auth.oidc.issuer-url=https://gitlab.<DOMAIN.NAME> \
--set auth.oidc.username-claim=email
Cette commande contient les options suivantes que vous devez spécifier :
-
cluster-name: Le nom du cluster que vous voulez mettre à jour. -
set: Permet de définir des propriétés.-
auth.oidc.client-id: L’identifiant client fourni par le fournisseur OIDC. Il sera utilisé par le cluster pour se connecter au serveur. -
auth.oidc.issuer-url: L’URL du serveur du fournisseur OIDC, utilisant le protocole HTTPS (https://). -
auth.oidc.username-claim: Un JSON Web Token (JWT) fourni par le fournisseur OIDC. Par défaut,email. Il sera utilisé pour récupérer l’adresse e-mail de connexion à GitLab côté Kubernetes.
-
Le cluster prend désormais en charge la connexion via OIDC à l’adresse https://gitlab.<DOMAIN.NAME>, en plus des connexions par certificat.
Gérer les accès à votre cluster
Définir la variable d’environnement kubeconfig
Pour permettre à kubectl de s’authentifier et de configurer le cluster, vous devez exporter le chemin vers le fichier kubeconfig en tant que variable d’environnement. Pour ce faire, utilisez la commande export en suivant cette syntaxe :
$ export KUBECONFIG=`oks-cli cluster kubeconfig \
--cluster-name <NAME_OF_CLUSTER> \
--print-path \
--refresh`
La variable d’environnement KUBECONFIG est définie pour être maintenue à jour.
Définir les rôles d’accès pour les utilisateurs OKS
Pour attribuer un rôle d’accès à une adresse e-mail utilisée pour vous connecter au fournisseur OIDC, vous devez modifier le fichier kubeconfig de votre cluster. Pour en savoir plus sur la gestion des accès, voir Gérer les accès pour les utilisateurs OKS.
|
Vous pouvez vérifier l’utilisateur actif côté OKS à l’aide de la commande kubectl whoami : Exemple de requête
Exemple de résultat
|
Dans cet exemple, nous attribuerons le rôle par défaut cluster-admin à un utilisateur, à l’aide d’un ClusterRoleBinding. Cette ressource accorde les permissions définies pour un rôle à un utilisateur ou à un ensemble d’utilisateurs. Pour ce faire, utilisez la commande kubectl create clusterrolebinding :
$ kubectl --kubeconfig $KUBECONFIG create clusterrolebinding oidc-cluster-admin \
--clusterrole=cluster-admin \
--user='oidc:<EMAIL_ADDRESS>'
Cette commande contient les options suivantes que vous devez spécifier :
-
kubeconfig: Le chemin vers le fichier kubeconfig à utiliser pour les requêtes CLI. -
clusterrole: Le rôle que ce ClusterRoleBinding doit référencer. -
user: Les noms d’utilisateur à associer au ClusterRole. Ici, nous ajouterons le préfixeoidc:pour pouvoir l’utiliser ultérieurement lors de la configuration de kubectl. Cette option peut être répétée pour ajouter plusieurs utilisateurs.Un préfixe peut être modifié via le cluster ou via son fichier kubeconfig.
Autoriser l’accès à d’autres utilisateurs
Pour permettre à tous les utilisateurs de votre fournisseur OIDC d’accéder à votre cluster, vous devez modifier son fichier kubeconfig afin de supprimer les utilisateurs OKS.
Pour supprimer les utilisateurs OKS du fichier kubeconfig, utilisez la commande kubectl config delete-user en suivant cette syntaxe :
$ kubectl --kubeconfig $KUBECONFIG config delete-user cluster-admin
deleted user cluster-admin from $KUBECONFIG
Vous pouvez désormais partager ce fichier kubeconfig pour permettre aux utilisateurs d’accéder à votre cluster.
Avec l’accès partagé, chaque utilisateur doit s’authentifier via le fournisseur OIDC et disposera de droits d’accès définis par RBAC.
$ cat $KUBECONFIG
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: CLUSTER_CERTIFICATE==
server: https://example-domain.123123123.project.eu-west-2.oks.outscale.com:6443
name: NAME_OF_CLUSTER
contexts:
- context:
cluster: NAME_OF_CLUSTER
user: cluster-admin
name: cluster-admin@NAME_OF_CLUSTER
current-context: cluster-admin@NAME_OF_CLUSTER
kind: Config
preferences: {}
users:
- name: oidc
user: {}
Activer l’authentification OIDC avec kubectl
Pour activer l’authentification OIDC, utilisez la commande kubectl config set-credentials en suivant cette syntaxe :
$ kubectl config set-credentials oidc \
--exec-api-version=client.authentication.k8s.io/v1 \
--exec-interactive-mode=Never \
--exec-command=kubectl \
--exec-arg=oidc-login \
--exec-arg=get-token \
--exec-arg="--oidc-issuer-url=https://gitlab.<DOMAIN.NAME> " \
--exec-arg="--oidc-client-id=<APPLICATION_ID>" \
--exec-arg="--oidc-extra-scope=email" --kubeconfig=$KUBECONFIG
User "oidc" set.
Les éléments suivants sont ajoutés à la section users du fichier kubeconfig.
users:
- name: oidc
user:
exec:
apiVersion: client.authentication.k8s.io/v1
args:
- oidc-login
- get-token
- --oidc-issuer-url=https://gitlab.<DOMAIN.NAME>
- --oidc-client-id=<APPLICATION_ID>
- --oidc-extra-scope=email
command: kubectl
env: null
interactiveMode: Never
provideClusterInfo: false
...
Exiger une identification OIDC lors de la connexion à votre cluster
Pour activer l’authentification OIDC lors de votre connexion au cluster, vous devez définir l’utilisateur lié au contexte. Utilisez la commande kubectl config set-context avec le préfixe d’utilisateur ajouté précédemment (oidc:) :
$ kubectl --kubeconfig $KUBECONFIG config set-context \
--current \
--user=oidc
Cette commande contient les options suivantes que vous devez spécifier :
-
kubeconfig: Le chemin d’accès au fichier kubeconfig à utiliser pour les requêtes CLI. -
current: Permet de modifier le contexte actuel. -
user: L’utilisateur associé à l’entrée de contexte dans le fichier kubeconfig.
|
Vous pouvez tester la nouvelle configuration à l’aide de la commande kubectl get secrets : Exemple de requête
Votre navigateur s’ouvre sur la page de connexion de votre fournisseur OIDC. Une fois connecté, vous pourrez accéder à la liste des secrets de votre cluster. |
Désactiver l’authentification OIDC pour votre cluster
Afin de désactiver l’authentification OIDC pour votre cluster, utilisez la commande cluster update en suivant cette syntaxe :
$ oks-cli cluster update \
--cluster-name <NAME_OF_CLUSTER> \
--set auth={}
Pages connexes
Méthodes API correspondantes