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.

  1. Sur GitLab, accédez à vos applications : https://gitlab.<DOMAIN.NAME>/-/user_settings/applications.

  2. Cliquez sur Ajouter une nouvelle application pour ajouter un fournisseur d’authentification.
    Une section de configuration s’affiche.

  3. Dans le champ Name, saisissez un nom pour votre application.

  4. Dans le champ Redirect URI, saisissez http://localhost:8000, et désactivez l’option Confidentiel.

  5. Dans la liste Scopes, sélectionnez openid, profile, et email, 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 :

Exemple de requête
$ 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 :

Exemple de requête
$ 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
$ kubectl --kubeconfig $KUBECONFIG auth whoami
Exemple de résultat
ATTRIBUTE                                           VALUE
Username                                            cluster-admin
Groups                                              [system:authenticated]
Extra: authentication.kubernetes.io/credential-id   [X509SHA256=6c6ba4b6bd76414bd84ccb02c394478aeb68c465b5ac58febb78d8941df5991f]

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 :

Exemple de 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éfixe oidc: 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 :

Exemple de requête
$ kubectl --kubeconfig $KUBECONFIG config delete-user cluster-admin
Exemple de résultat
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.

Exemple de requête : Imprimer le fichier kubeconfig partageable
$ cat $KUBECONFIG
Exemple de résultat
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 :

Exemple de requête
$ 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
Exemple de résultat
User "oidc" set.

Les éléments suivants sont ajoutés à la section users du fichier kubeconfig.

Exemple de 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:) :

Exemple de requête
$ 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
$ kubectl get secrets -A

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 :

Exemple de requête
$ oks-cli cluster update \
  --cluster-name <NAME_OF_CLUSTER> \
  --set auth={}

Pages connexes

Méthodes API correspondantes