A Guide to Deploying Onyxia On-Premises (part 1): basic installation and user account management with Keycloak

Onyxia est un projet open source porté par l’INSEE (France) et créé initialement pour faciliter la mise en place d’un environnement de travail pour les personnels de l’institut. Onyxia fournit une application web pour lancer et configurer un environnement de travail. Il permet ainsi à l’utilisateur de choisir des outils (VSCode, Jupyter, etc.), des ressources (CPU, GPU et RAM) et de connecter des services de stockage (type S3) sans avoir à gérer directement les complexités du cloud ou de l’infrastructure sous-jacente.

Onyxia s’appuie sur Kubernetes. Les environnements de travail sont packagés dans des Charts Helm et configurables au niveau de l’interface web fournit par Onyxia. L’INSEE propose une instance de Onyxia appelée SPPCloud, elle est gratuite pour toutes les administrations publiques françaises. Toutefois, cette instance n’est pas configurable et les ressources doivent être partagées avec un nombre croissant d’utilisateurs.

L’installation d’une instance Onyxia sur un cluster Kubernetes est possible et c’est l’objectif de ce billet de blog. La documentation d’installation de Onyxia est très bien faite, mais un peu trop générique pour correspondre à des cas spécifiques et de toute façon il n’est pas pensable de traiter chaque cas. Par ailleurs, la documentation n’est pas forcément à jour et les dernières versions des outils tiers comme Keycloak et Vault ne sont pas disponibles.

Dans ce billet de blog, nous adoptorons une approche incrémentale, en commençant avec l’installation de Onyxia, puis l’ajout et l’intégration du gestionnaire d’identification et d’autentification Keycloak. Dans le cas spécifique de Keycloak, nous détaillerons la gestion implicite des utilisateurs via Keycloak, avant de présenter la configuration nécessaire pour fédérer une source d’identité externe qui supporte OpenID.

D’autres points pourront être abordés dans des prochains billets, notamment l’installation et l’intégration d’un stockage S3, la gestion des secrets avec Vault, ainsi que l’utilisation de Prometheus pour la supervision du cluster Kubernetes. Sur cette base, nous mettrons en place des stratégies d’allocation de ressources afin d’éviter, par exemple, l’accaparement des ressources critiques telles que les GPU. Enfin, nous verrons ultérieurement comment créer ses propres services.

Enfin, contrairement à la documentation officielle d’Onyxia qui s’appuie sur Argo CD pour le déploiement, nous réaliserons ici toutes les opérations via l’outil en ligne de commande kubectl. Bien que l’approche avec Argo CD soit recommandée pour un environnement de production, l’objectif de ce billet est de proposer une première installation simple afin de découvrir et tester la plateforme Onyxia.

Prérequis

Pour mettre en œuvre l’ensemble des éléments présentés, vous aurez besoin d’un cluster Kubernetes. À ce sujet, je vous invite à consulter les deux billets de blog que j’ai déjà publiés.

Il vous faudra également disposer d’un nom de domaine. Nous utiliserons dans cet exemple le domaine fictif : *.mydomain.fr.

Onyxia tout simplement

Cette section décrit la configuration et l’installation d’Onyxia à partir d’un chart Helm. La personnalisation de l’apparence constitue la seule étape de configuration abordée. Les autres paramètres seront traités ultérieurement, après la mise en place du système d’authentification avec Keycloak.

Installation Onyxia

  • Créer un fichier minimaliste onyxia-values.yaml pour que l’installation se déroule sans problème. Ainsi, un seul utilisateur sera défini et l’apparence conservera les paramètres par défaut.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
ingress:
  enabled: true
  hosts:
    - host: onyxia.mydomain.fr
web:
  env:
api:
  regions:
    [
      {
        id: "onyxia_id",
        name: "Onyxia",
        description: "Instance Onyxia de TEST.",
        services: {
          type: "KUBERNETES",
          singleNamespace: true,
          authenticationMode: "serviceAccount",
          namespacePrefix: "onyxia-user-",
          expose: {
            domain: "lab-onyxia.mydomain.fr"
          },
        },
      },
    ]
  • Ajouter le dépôt Helm de Onyxia à la configuration Helm locale et vérifier que ce dépôt est disponible.
1
2
helm repo add onyxia https://inseefrlab.github.io/onyxia
helm repo list

La sortie console attendue :

1
2
3
4
5
6
NAME                  	URL
ingress-nginx         	https://kubernetes.github.io/ingress-nginx
nvidia                	https://helm.ngc.nvidia.com/nvidia
onyxia                	https://inseefrlab.github.io/onyxia
prometheus-community  	https://prometheus-community.github.io/helm-charts
...
  • Déployer le chart Onyxia dans sa version 10.28.9.
1
helm install onyxia onyxia/onyxia -f onyxia-values.yaml --version 10.28.9 --create-namespace --namespace onyxia

La sortie console attendue :

1
2
3
4
5
6
7
NAME: onyxia
LAST DEPLOYED: Fri Oct  3 17:26:00 2025
NAMESPACE: onyxia
STATUS: deployed
REVISION: 1
NOTES:
Enjoy Onyxia :)

Deux pods devront être créées : l’un pour la partie serveur, qui fournit l’API, et l’autre pour la partie interface utilisateur.

  • Tester la disponibilité de ces deux pods par la ligne de commande suivante.
1
kubectl get pods -n onyxia

La sortie console attendue :

1
2
3
NAME                          READY   STATUS    RESTARTS   AGE
onyxia-api-54594bb97d-xxzcq   1/1     Running   0          28m
onyxia-web-67666469d8-27xpb   1/1     Running   0          28m
  • Ouvrir un navigateur web et saisir l’URL suivante : https://onyxia.mydomain.fr

Installation de Onyxia avec les paramètres minimalistes

Vous remarquerez sur la partie en bas à droite la version courante de Onyxia (10.28.9).

Mise à jour de la version de Onyxia

Lorsque des mises à jour de version ou de configuration de Onyxia seront nécessaires, ce qui se produit régulièrement, il suffira de suivre les étapes ci-dessous pour les appliquer.

  • Forcer la mise à jour du dépôt
1
helm repo update onyxia

La sortie console attendue :

1
2
3
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "onyxia" chart repository
Update Complete. ⎈Happy Helming!⎈
  • Afficher les versions disponibles du dépôt Onyxia.
1
helm search repo onyxia -l

La sortie console attendue :

1
2
3
4
5
6
7
8
NAME         	CHART VERSION	APP VERSION	DESCRIPTION
onyxia/onyxia	10.29.2      	           	Onyxia is your datalab's hub.
onyxia/onyxia	10.29.1      	           	Onyxia is your datalab's hub.
onyxia/onyxia	10.29.0      	           	Onyxia is your datalab's hub.
onyxia/onyxia	10.28.10     	           	Onyxia is your datalab's hub.
onyxia/onyxia	10.28.9      	           	Onyxia is your datalab's hub.
onyxia/onyxia	10.28.8      	           	Onyxia is your datalab's hub.
...
  • Mettre à jour la version Onyxia en spécifiant la version souhaitée.
1
helm update onyxia onyxia/onyxia -f onyxia-values.yaml --version 10.29.2 --create-namespace --namespace onyxia

Personnalisation de Onyxia

Intéressons nous maintenant à personnaliser l’affichage de l’instance Onyxia déployée. Il s’agit de compléter les éléments de la clé env depuis le fichier onyxia-values.yaml. L’ensemble des paramètres sont disponibles depuis le dépôt Github du projet qui gère l’interface utilisateur : onyxia/web/.env. La documentation est bien faite, car chaque paramètre est accompagné d’une illustration indiquant précisément l’endroit où il est configuré.

  • Éditer le fichier onyxia-values.yaml en ajoutant le contenu de la clé env.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
ingress:
  enabled: true
  hosts:
    - host: onyxia.mydomain.fr
web:
  env:
    HEADER_TEXT_BOLD: Test
    TAB_TITLE: Onyxia Test
    HOMEPAGE_HERO_TEXT: |
      {
        "fr": "Bienvenue dans la version Test",
        "en": "Welcome to the Test version "
      }
    PALETTE_OVERRIDE: |
      {
        focus: {
          main: "#067A76",
          light: "#0AD6CF",
          light2: "#AEE4E3"
        },
        dark: {
          main: "#2D1C3A",
          light: "#4A3957",
          greyVariant1: "#22122E",
          greyVariant2: "#493E51",
          greyVariant3: "#918A98",
          greyVariant4: "#C0B8C6"
        },
        light: {
          main: "#F7F5F4",
          light: "#FDFDFC",
          greyVariant1: "#E6E6E6",
          greyVariant2: "#C9C9C9",
          greyVariant3: "#9E9E9E",
          greyVariant4: "#747474"
        }
      }
api:
    ...
  • Mettre à jour la version Onyxia.
1
helm update onyxia onyxia/onyxia -f onyxia-values.yaml --version 10.29.2 --create-namespace --namespace onyxia

Onyxia après des paramètres de personnalisation de l'interface utilisateur

Onyxia avec des utilisateurs

L’identification (le fait de déclarer qui l’on est) et l’authenfication (le fait de prouver que l’on est bien celui qu’on prétend être) seront déléguées à Keycloak. Nous utiliserons la version 26.3.3 de Keycloak depuis le chart Helm en version 25.2.0. À noter que depuis août 2025, Bitnami ne proposera gratuitement qu’un ensemble réduit d’images sécurisées sous le tag latest, tandis que les anciennes versions seront déplacées vers le dépôt bitnamilegacy sans mises à jour. Nous allons nous limiter à utiliser la version 25.2.0 disponible dans le dépôt bitnamilegacy.

Installation Keycloak

  • Créer un fichier keycloak-values.yaml et copier le contenu suivant tout en l’adaptant à votre besoin (changement de domaine). Penser à changer la valeur de mydomain.fr par le domaine que vous souhaitez.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
postgresql:
  enabled: true
  image:
    repository: bitnamilegacy/postgresql
  auth:
    postgresPassword: "test"
    username: "keycloak"
    password: "test"
    database: "keycloak"
global:
  security:
    allowInsecureImages: true
image:
  repository: bitnamilegacy/keycloak
auth:
  adminUser: keycloak
  adminPassword: test
production: true
tls:
  enabled: false
  autoGenerated:
    enabled: false
proxyHeaders: xforwarded
proxy: edge
httpRelativePath: "/auth/"
replicaCount: 1
ingress:
  enabled: true
  annotations:
    nginx.ingress.kubernetes.io/proxy-buffer-size: 128k
  hostname: auth.lab-onyxia.mydomain.fr
  extraTls:
    - hosts:
      - auth.lab-onyxia.mydomain.fr

extraStartupArgs: "--features=preview --log-level=org.keycloak.events:debug"
extraEnvVars:
  - name: ONYXIA_RESOURCES_ALLOWED_ORIGINS
    value: "https://onyxia.mydomain.fr, http://localhost, http://127.0.0.1"
  - name: KEYCLOAK_LOG_LEVEL
    value: DEBUG

initContainers: |
  - name: realm-ext-provider
    image: curlimages/curl
    imagePullPolicy: IfNotPresent
    command:
      - sh
    args:
      - -c
      - |
        curl -L -f -S -o /extensions/onyxia-web.jar https://github.com/InseeFrLab/onyxia/releases/download/v10.28.8/keycloak-theme.jar
    volumeMounts:
      - name: empty-dir
        mountPath: /extensions
        subPath: app-providers-dir

externalDatabase:
  host: keycloakv3-postgresql
  port: 5432
  user: keycloak
  password: test
  database: keycloak

Dans ce fichier plusieurs choses : l’utilisation des images du dépôt bitnamilegacy en attente d’avoir les dernières versions. L’initialisation en utilisant initContainers afin de télécharger un thème spécifique. Les mots de passes par défaut devront être changé après l’installation. Le sous-domaine de Keycloak sera auth.lab-onyxia.

1
helm install onyxiakeycloak oci://registry-1.docker.io/bitnamicharts/keycloak --version 25.2.0 -f keycloak-values.yaml --create-namespace --namespace onyxia-keycloak

Le résulat attendu est le suivant

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Pulled: registry-1.docker.io/bitnamicharts/keycloak:25.2.0
Digest: sha256:3e12451e0300902bafa1e588e62cce8ad3467dc3d6bf15352c25a0393a75fc6e
NAME: onyxiakeycloak
LAST DEPLOYED: Thu Oct  2 17:07:49 2025
NAMESPACE: onyxia-keycloak
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: keycloak
CHART VERSION: 25.2.0
APP VERSION: 26.3.3

⚠ WARNING: Since August 28th, 2025, only a limited subset of images/charts are available for free.
    Subscribe to Bitnami Secure Images to receive continued support and security updates.
    More info at https://bitnami.com and https://github.com/bitnami/containers/issues/83267

** Please be patient while the chart is being deployed **

Keycloak can be accessed through the following DNS name from within your cluster:

    onyxiakeycloak.onyxia-keycloak.svc.cluster.local (port 80)

To access Keycloak from outside the cluster execute the following commands:

1. Get the Keycloak URL and associate its hostname to your cluster external IP:

   export CLUSTER_IP=$(minikube ip) # On Minikube. Use: `kubectl cluster-info` on others K8s clusters
   echo "Keycloak URL: http://auth.lab-onyxia.mydomain.fr/"
   echo "$CLUSTER_IP  auth.lab-onyxia.mydomain.fr" | sudo tee -a /etc/hosts

2. Access Keycloak using the obtained URL.
3. Access the Administration Console using the following credentials:

  echo Username: keycloak
  echo Password: $(kubectl get secret --namespace onyxia-keycloak onyxiakeycloak -o jsonpath="{.data.admin-password}" | base64 -d)

WARNING: There are "resources" sections in the chart not set. Using "resourcesPreset" is not recommended for production. For production installations, please set the following values according to your workload needs:
  - resources
+info https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

⚠ SECURITY WARNING: Original containers have been substituted. This Helm chart was designed, tested, and validated on multiple platforms using a specific set of Bitnami and Tanzu Application Catalog containers. Substituting other containers is likely to cause degraded security and performance, broken chart features, and missing environment variables.

Substituted images detected:
  - docker.io/bitnamilegacy/keycloak:26.3.3-debian-12-r0

⚠ SECURITY WARNING: Verifying original container images was skipped. Please note this Helm chart was designed, tested, and validated on multiple platforms using a specific set of Bitnami and Bitnami Secure Images containers. Substituting other containers is likely to cause degraded security and performance, broken chart features, and missing environment variables.

Deux pods devront être créés à savoir celui pour la base de données PostgreSQL et celui pour Keycloak. Ce dernier étant long à démarrer, tester la disponibilité des pods par la ligne de commande suivante.

1
kubectl get pods -n onyxia-keycloak

Le résultat attendu

1
2
3
NAME                          READY   STATUS    RESTARTS        AGE
onyxiakeycloak-0              1/1     Running   1 (8m13s ago)   10m
onyxiakeycloak-postgresql-0   1/1     Running   0               10m

Connexion à Keycloak après l'installation

Le nom d’utilisateur et le mot de passe ont été précisé dans le fichier keycloak-values.yaml à savoir keycloak et test.

La première chose que nous allons effectuer est la création d’un nouveau compte administrateur car le compte keycloak est temporaire (recommandation de Keycloak).

  • Depuis le realm keycloak choisir le menu Users et créer un utilisateur admin (Add User). Depuis l’onglet Role Mapping assigner le rôle admin (Assign role -> Realm roles et choisir admin) et changer enfin le mot de passe via l’onglet Credentials.

Création d'un compte utilisateur admin

Intégration Keycloak avec Onyxia

Intéressons-nous maintenant à l’intégration de Keycloak avec Onyxia, afin que Keycloak devienne le gestionnaire de compte utilisateur pour Onyxia. Dans cette première version d’intégration, les utilisateurs seront créés par l’administrateur de Keycloak et nous désactiverons la création de compte à la volée.

  • Créer un nouveau realm onyxia via le menu Manage realms. Vous devrez cliquer sur Create realm et saisir dans Realm name la valeur onyxia. Pour valider cliquer sur Create.

Création d'un realm onyxia

  • Sélectionner le nouveau realm onyxia

Sélection du realm onyxia

Toutes les demandes d’autorisation pour Onyxia seront désormais gérées depuis ce realm. Il est toutefois nécessaire de procéder à sa configuration, notamment pour définir le thème graphique utilisé sur les formulaires d’identification ou encore pour déterminer si la création de comptes est autorisée.

  • Depuis le menu de latéral, cliquer sur Realm settings.

  • Depuis l’onglet Login, désactiver l’option de création d’utilisateur (User registration) afin d’éviter de pouvoir créer à la volée des utilisateurs.

Configuration realm onyxia : login

  • Depuis l’onglet Email configurer les informations pour permettre l’envoi d’email. Les paramètres à choisir dépendent des informations dont vous disposez. Le bouton Test connection vous permet de tester si tout fonctionne correctement.

Configuration realm onyxia : login

  • Depuis l’onglet Themes choisir le thème fourni par Onyxia pour les champs d’édition Login theme et Email theme.

Configuration realm onyxia : themes

  • Depuis l’onglet Localization ajouter de nouvelles langues. L’identification devra pouvoir gérer l’anglais et le français.

Configuration realm onyxia : localization

Il nous reste maintenant à créer un client Keycloak afin de permettre à Onyxia de s’appuyer sur lui pour l’authentification et de lui faire confiance.

  • Créer un nouveau client via le menu Clients, puis cliquer sur Create client.

Création d'un client

  • Dans le champ d’édition Client ID saisir la valeur onyxia.

Création d'un client : identification du client

  • Sélectionner l’option Direct access grants pour que le nom d’utilisateur le mot de passe puisse être envoyé à Keycloak afin de recevoir par la suite un jeton d’accès.

Création d'un client : configuration

  • Saisir dans le champ d’édition Rool URL la valeur https://onyxia.mydomain.fr, puis dans le champ d’édition Valid redirects URIs la valeur https://onyxia.mydomain.fr/* et enfin dans le champ d’édition Web origins la valeur *.

Création d'un client : configuration des accès

  • Après la création du client, modifier la valeur pour le champ d’édition Login theme en choisissant onyxia.

Création d'un client : configuration de l'apparence

Pour tester le client Keycloak, il faut au moins créer un utilisateur.

  • Depuis Keycloak avec le realm onyxia courant, créer un compte utilisateur test.

Du côté configuration Onyxia, il faut modifier le fichier onyxia-values.yaml pour préciser le client Keycloak précédemment construit.

  • Modifier le fichier onyxia-values.yaml afin d’ajouter les éléments de la clé env ainsi que le changement pour la valeur singleNamespace. L’authentification se fera à partir d’OpenID.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
ingress:
  enabled: true
  hosts:
    - host: onyxia.mydomain.fr
web:
  ...
api:
  serviceAccount:
    create: true
    clusterAdmin: true

  env:
    security.cors.allowed_origins: "*"
    authentication.mode: "openidconnect"
    oidc.issuer-uri: "https://auth.lab-onyxia.mydomain.fr/auth/realms/onyxia"
    oidc.clientID: "onyxia"
    oidc.audience: "onyxia"

  regions:
    [
      {
        id: "onyxia_id",
        name: "Onyxia",
        description: "Instance Onyxia de TEST.",
        services: {
          type: "KUBERNETES",
          singleNamespace: false,
          authenticationMode: "serviceAccount",
          namespacePrefix: "onyxia-user-",
          expose: {
            domain: "lab-onyxia.mydomain.fr"
          },
        },
      },
    ]
  • Mettre à jour la version Onyxia.
1
helm update onyxia onyxia/onyxia -f onyxia-values.yaml --version 10.29.2 --create-namespace --namespace onyxia
  • Depuis l’application web Onyxia, cliquer sur le bouton Connexion (en haut à droite) pour faire apparaître le formulaire d’authentification.

Formulaire d'authentification

À cette étape Onyxia a pu appeler le client onyxia de Keycloak puisque le formulaire d’authentification est affiché.

  • Se connecter avec le compte utilisateur test et malheureusement vous devriez obtenir une erreur de type 401.

Pour comprendre l’erreur, afficher la console développeur du navigateur et chercher la requête correspondant à l’erreur 401. Au niveau de l’en-tête de la réponse, la clé Www-Authenticate devrait retourner cette erreur Bearer error="invalid_token", error_description="An error occurred while attempting to decode the Jwt: The required audience onyxia is missing", error_uri="https://tools.ietf.org/html/rfc6750#section-3.1. Elle précise que le jeton JWT (fourni par OpenID) ne contient pas dans la clé aud la valeur onyxia. La configuration realm onyxia depuis Keycloak doit être modifiée.

  • Depuis le menu latéral, cliquer sur Client scopes puis sur Create client scope. Dans le champ d’édition Name saisir la valeur onyxia.

Création d'un client scope

  • Une fois créée, sélectionner l’onglet Mappers puis cliquer sur Configure a new mapper et choisir Audience.

  • Dans le champ d’édition Name, saisir la valeur Audience for Onyxia et dans le champ d’édition Included Client Audience, sélectionner la valeur onyxia puis cliquer sur Save.

Configuration d'un client scope

Il reste désormais à ajouter cette nouvelle configuration au client onyxia de Keycloak.

  • Depuis le menu latéral, cliquer sur Clients et sélectionner onyxia. Depuis l’onglet Client scopes, cliquer sur Add client scope et sélectionner onyxia.

Ajout d'un client scope à un client

Il est possible de vérifier le contenu du jeton JWT directement depuis Keycloak en spécifiant un utilisateur disponible dans la base.

  • Depuis le menu latéral, cliquer sur Client et sélectionner le client onyxia. Depuis l’onglet Client scopes, sélectionner le sous onglet Evaluate. Dans le champ d’édition Users saisir test.

Évaluation de la valeur d'un jeton JWT

Comme vous pouvez le remarquer, la clé aud contient deux valeurs qui sont onyxia et account.

  • Depuis l’interface web de Onyxia, se connecter et normalement vous ne devriez pas obtenir d’erreur.

Configuration d’un fournisseur d’identité OpenID dans Keycloak

Dans la section précédente, nous avons présenté l’utilisation de Keycloak avec des utilisateurs créés directement par l’administrateur de Keycloak. Dans cette section, nous allons montrer comment intégrer un fournisseur d’identité OpenID externe. Dans ce cas de figure, les personnes accédant à Onyxia peuvent provenir soit du système d’information existant (via le fournisseur d’identité OpenID externe), soit de comptes locaux créés manuellement par l’administrateur Keycloak.

Concernant le fournisseur d’identité OpenID externe, j’utiliserai celui proposé par l’hébergeur des services que je déploie. Il est bien entendu possible d’utiliser d’autres fournisseurs, tels que ceux proposés par Google ou Meta. Quel que soit le fournisseur d’identité OpenID retenu, trois informations seront nécessaires pour configurer Keycloak :

  1. L’URL du endpoint : adresse du fournisseur d’identité (OpenID Provider) qui expose les points d’accès nécessaires à l’authentification (https://auth-cas.mydomain.fr/authentification/oidc/.well-known);
  2. Le client ID : identifiant public de l’application déclarée auprès du fournisseur d’identité (n’est pas secret car disponible sur le client) ;
  3. Le client secrète : mot de passe associé au Client ID (ne pas divulguer et seul Keycloak le conservera).
  • Depuis le menu latéral, cliquer sur Identiy Providers et sélectionner le fournisseur OpenID Connect v1.0.

Ajouter un fournisseur OIDC

  • Préciser dans les champs d’édition Alias et Display Name la valeur oidc. Au niveau du champ d’édition Discovery endpoint, donner l’URL du endpoint. Enfin, remplir les champs d’édition Client ID et Client Secret.

Compléter les informations du fournisseur OIDC

  • Au niveau du champ de sélection Sync mode, choisir la valeur Import. Ainsi, les informations du compte seront importées une seule fois lors de la création de l’utilisateur. Vous pouvez également utiliser le mode Force qui permet de mettre à jour les informations du compte à chaque nouvelle connexion.

Configurer les informations du fournisseur OIDC

La réponse fournit des informations permettant, entre autres, de déterminer quels attributs sont renvoyés par le fournisseur d’identité OpenID :

1
2
3
4
5
6
7
8
9
10
11
12
  "claims_supported": [
    "aud",
    "sub",
    "iss",
    "auth_time",
    "name",
    "given_name",
    "family_name",
    "preferred_username",
    "email",
    "acr"
  ]

À cette étape de configuration lors de la phase d’authentification, vous pourrez le faire soit en passant par le fournisseur d’identité OpenID fraichement configuré soit passer par les comptes créés manuellement par l’administrateur Keycloak.

Formulaire d'authenfication avec deux possibilités

Quand vous choisissez l’authentification par le fournisseur d’identité OpenID, vous aurez un formulaire qui vous demandera de compléter les données.

Formulaire pour compléter les informations de l'utilisateur

La raison, c’est que notre fournisseur d’identité OpenID regroupent les informations utilisateur dans un objet attributes car il s’appuie fortement sur LDAP. Keycloak n’arrive donc pas à créer un utilisateur avec les informations minimalistes (userName, email, firstName et lastName).

Nous montrons dans la suite comment faire correspondre (mapper) des attributs du fournisseur (claim) qui sont contenus dans un objet attributes avec des attributs du modèle utilisateur Keycloak.

1
2
3
4
5
6
7
"attributes": {
  "uid": ["baronm"],
  "displayName": ["Mickaël BARON"],
  "givenName": ["Mickaël"],
  "sn": ["BARON"],
  "email": ["mickael.baron@ensma.fr"]
}
  • Éditer la configuration du fournisseur d’identité OpenID et sélectionner l’onglet Mappers.

Configuration des mappers

  • Cliquer sur Add mapper, saisir dans le champ d’édition Name la valeur email, choisir le type de correspondance Mapper Type la valeur Attribute Importer, saisir dans le champ d’édition Claim la valeur attributes.email et dans le champ de sélection User Attribute Name la valeur email.

Configuration du mapper email

  • Procéder de la même façon pour les attributs firstName et lastName.

Configuration de tous les mappers

Vérifier que la configuration est opérationnelle en vous authentifiant via le fournisseur d’identité OpenID. A l’issue de cette opération, un nouvel utilisateur sera créer directement dans Keycloak. Les informations userName, email, firstName et lastName proviendront du fournisseur de service OpenID.

Conclusion

Dans ce premier billet, nous avons posé les bases du déploiement d’Onyxia en environnement on-premises sur Kubernetes. Après une installation volontairement simple de la plateforme, nous avons progressivement introduit la gestion des utilisateurs et de l’authentification en nous appuyant sur Keycloak. Cette approche incrémentale permet de mieux comprendre chaque brique, leurs interactions et les points de configuration essentiels.

Nous avons ainsi vu comment :

  • déployer Onyxia via Helm et personnaliser son interface ;
  • installer et configurer Keycloak comme gestionnaire d’identités ;
  • intégrer Onyxia avec Keycloak via OpenID Connect ;
  • gérer les audiences et les jetons JWT ;
  • fédérer un fournisseur d’identité OpenID externe ;
  • et mapper correctement les attributs utilisateur lorsque ceux-ci ne sont pas exposés de manière standard.

Cette première étape permet déjà de disposer d’une plateforme Onyxia pleinement fonctionnelle, sécurisée et intégrée à un système d’authentification.

Dans le prochain billet, nous verrons comment définir des droits spécifiques par utilisateur afin de contrôler finement l’accès aux ressources critiques, en particulier les GPU. Pour cela, nous utiliserons le principe de roles dans Onyxia.

Ce billet est open source. Vous avez noté un problème de typographie ?
Ou quelque chose d'obscur ? Améliorer ce billet à partir du dépôt GitHub.
Commentaire

Vous pouvez laisser un commentaire en utilisant les Github Issues.