Présentation
Dans ce tutoriel, je vais vous expliquer comment configurer Guacamole pour utiliser Keycloak avec OpenID afin d’authentifier les utilisateurs.
L’utilisation de Keycloak avec Guacamole va nous apporter des fonctionnalités supplémentaires comme :
- Stratégie de mot de passe (complexité / durée de vie …)
- Configuration de l’OTP
- Mot de passe oublié, l’utilisateur pourra le changer lui même
- Portail SSO si plusieurs application dans le royaume
- …
Avec Keycloak et l’OpenID, il y a deux façon de gérer les utilisateurs au niveau de Guacamole :
- Les utilisateurs sont seulement créés dans Keycloak, dans ca cas la, les utilisateurs ne sont pas provisionnés dans Guacamole et l’attribution des droits de connexion se fait à l’aide des groupes, ce qui implique de gérer les groupes dans Guacamole.
- Les utilisateurs sont créés dans Keycloak et Guacamole et dans ce cas, la liaison entre les deux est effectuée avec l’identifiant de l’utilisateur, l’adresse e-mail
Dans ce tutoriel, je vais aborder les deux.
Concernant l’environnement Guacamole et Keycloak sont déployés avec Docker.
Configuration de Keycloak
La configuration de Keycloak va se faire en plusieurs étapes.
Création d’un royaume dédié à Guacamole
On va commencer par configurer Keycloak, pour des raisons de gestion, la client Guacamole sera configuré dans un royaume (realm) dédié.
Cette étape n’est pas obligatoire, il est tout à fait possible de configurer le client dans un royaume existant.
Depuis l’interface d’administration Keycloak, cliquer sur la liste des royaumes 1 et cliquer sur Create realm 2.
Nommer le royaume 1 et cliquer sur le bouton Create 2.
Le royaume est créé et on est redirigé dessus.
Configuration du royaume
Pour facilité la gestion des utilisateurs, on va configurer le royaume pour utiliser l’adresse e-mail comme identifiant.
Dans le menu de navigation cliquer sur Realms settings 1.
Aller sur l’onglet Login 1.
Passer à On le paramètre : Email as username 1.
La configuration au niveau du royaume dans Keycloak est terminée.
Ajouter le client Guacamole dans Keycloak
On va maintenant passer à la configuration du client pour Guacamole dans Keycloak.
Depuis le menu de navigation à gauche, cliquer sur Clients 1.
Depuis la liste des Clients dans Keycloak, cliquer sur Create client 1 pour ajouter un nouveau client.
Entrer le client ID 1 et le nom du client 2 et cliquer sur le bouton Next 3.
Configuration l’authentification flow en décochant la case Standard flow 1 et en cochant Implicit flow 2 puis cliquer sur Next 3.
Dans les champs Root URL 1 et Home URL 2 indiquer l’URL de Guacamole puis cliquer sur Save 3 pour créer le client dans Keycloak.
Une fois client ajouté, on est redirigé sur la page de configuration de celui-ci.
La configuration du client est terminé.
Configurer Guacamole pour utiliser Keycloak comme fournisseur OpenID
Afin que Guacamole utilise Keycloak comme fournisseur d’authentification, nous allons modifier le fichier docker-compose.yml
pour ajouter des variables dans environment:
Avant de commencer, faire une copie de votre fichier docker-compose.yml
.
sudo cp docker-compose.yml docker-compose.yml.backup
Voici les lignes à ajouter, qu’il faut adapter avec vos urls et nom de royaume :
Une fois le fichier de configuration des containers pour Guacamole modifié, redémarrer les containers pour la prise en compte de la nouvelle configuration.
sudo docker compose down -v && sudo docker compose up -d && sudo docker compose logs -f
Dans les logs qui s’affiche dans le terminal, vérifier que l’Extension OpenID est chargé.
On peut aussi vérifier le changement de l’extension OpenID depuis le formulaire d’authentification de Guacamole. En bas à gauche de la page, un nouveau lien s’affiche Sign with : OpenID
.
Si tout est bien configuré, en cliquant sur OpenID, on arrive sur le formulaire d’authentification de Keycloak.
La configuration de Guacamole est terminé.
Gestion des utilisateurs dans Guacamole avec Keycloak
Comme expliquer en introduction de ce tutoriel, il y a deux façon de gérer les utilisateurs dans Guacamole avec Keycloak, nous allons maintenant voir cela.
Utilisateur présent dans Guacamole
Nous allons commencer avec les utilisateurs qui sont créés dans les deux logiciels.
Dans cette situation, les paramètres présents dans l’utilisateur Guacamole seront appliqués, la liaison entre les deux logiciels est faite par l’identifiant de l’utilisateur, il faut pour cela que dans Guacamole l’utilisateur est comme identifiant son adresse e-mail.
Ci-dessous voici mon utilisateur dans Guacamole qui a comme identifiant une adresse email et on peut voir que celui-ci est administrateur dans Guacamole.
On va maintenant créer un utilisateur avec la même adresse email dans Keycloak.
Dans le menu de navigation, aller sur Users 1 et cliquer sur Add user 2.
Remplir le formulaire de création d’utilisateur 1 en prenant le soin d’indiquer l’adresse email qui a servi d’identifiant dans Guacamole puis cliquer sur le bouton Create 2.
L’utilisateur est créé dans Keycloak, nous allons maintenant lui affecter un mot de passe, aller sur l’onglet Credentials 1.
En production, si un serveur SMTP est configuré dans Keycloak, les utilisateurs doivent utiliser la procédure de mot de passe oublié pour créer leur mot de passe.
Sur l’onglet Credentials, cliquer sur Set password 1.
Entrer le mot de passe et confirmer le 1, indiquer si le mot de passe doit être changé à la prochaine connexion 2 et cliquer sur Save 3.
Etant un compte que je vais utiliser et dans un environnement de test, j’ai désactivé le changement à la prochaine connexion.
Cliquer sur le bouton Save password 1.
Le compte utilisateur est créé et configuré.
Maintenant, aller sur Guacamole, sur le formulaire d’authentification, cliquer sur le lien OpenID.
Sur le formulaire d’identification de Keycloak, entrer les informations du compte que l’on vient de créer.
On est connecté à Guacamole, comme mon compte est administrateur, je vois toutes les connexions.
Utilisateur seulement présent de Keycloak
Afin d’éviter la double création de compte, il est possible de créer les utilisateurs seulement dans Keycloak, l’attribution des droits se fait à l’aide de groupe qui doivent être créer dans Guacamole et Keycloak avec les mêmes noms.
Dans Guacamole, j’ai 3 groupes comme on peut le voir sur la capture ci-dessous :
Le groupe Test1 permet d’avoir accès au connexion T1 et T2.
Configurer Keycloak pour passer les groupes au client
Afin de passer les groupes comme revendication dans Keycloak, nous allons devoir les ajouter.
Dans Keycloak, aller sur Clients scopes 1.
Dans le champ Name 1 entrer groups, si nécessaire donner une description et cliquer sur Save 2.
Le Client scope est créé, on va maintenant faire le mappage, aller sur l’onglet Mappers 1.
Cliquer sur le bouton Configure a new mapper 1.
Cliquer sur Group Membership 1 pour le sélectionner.
Passer à Off le sélecteur Full group path 1 et cliquer sur le bouton Save 2.
Il faut maintenant ajouter le Client scope que l’on vient de créer au client, aller sur Clients 1 et cliquer sur le client 2 configurer pour Guacamole.
Aller sur l’onglet Client scopes 1 et cliquer sur le bouton Add client scope 2.
Sélectionner le client scope groups 1, cliquer sur Add 2 puis sur Default 3.
Le client scope est ajouté au client pour Guacamole.
Création de l’utilisateur dans Keycloak
Ici, je ne vais pas reprendre l’ensemble de la création d’un utilisateur cela à déjà était vu au dessus. Ici pour le tutoriel je vais créer un nouvel utilisateur dont voici son compte :
Il est possible d’assigner l’utilisateur à un groupe dès sa création en cliquant sur le bouton Join Groups puis en cochant le ou les groupes.
N’ayant pas encore créer de groupe dans le tutoriel, nous ferrons l’affectation par le groupe.
Création du groupe dans Keycloak
Nous allons maintenant créer le groupe Test1 dans Keycloak.
Depuis le menu, aller sur Groups et cliquer sur Create group 2.
Nommer le groupe 1 puis cliquer sur Create 2. Pour rappel, le groupe dans Keycloak doit avoir le même nom que le groupe dans Guacamole.
Le groupe est créé.
Ajouter des utilisateurs au groupe
Il faut maintenant ajouter les utilisateurs groupes, cette manipulation peut être effectuer de différente façon :
- Lors de la création d’un utilisateur
- Depuis la page de l’utilisateur
- Depuis la page groupe
Cette opération assez simple nécessite pas de rentrer dans le détail, dans le tutoriel, je vais affecter l’utilisateur au groupe depuis la page du groupe.
Cliquer sur le groupe 1 que vient d’être créé.
Aller sur l’onglet Members 1 et cliquer sur le bouton Add member 2.
Sélectionner le ou les utilisateurs 1 qui doivent être ajoutés et cliquer sur le bouton Add 2.
L’utilisateur est ajouté au groupe.
Connexion à Guacamole
Pour effectuer les tests, passer par le mode privé du navigateur.
Sur la page d’authentification de Guacamole, cliquer sur OpenID.
Entrer les informations d’identification du compte utilisateur.
On est connecté à Guacamole et les connexions configuré dans le groupe sont disponibles.
Création automatique des utilisateurs de Keycloak dans Guacamole
Si nécessaire, il est possible de créer les comptes utilisateurs de Keycloak dans Guacamole automatiquement en ajoutant l’option suivante :
environment:
- MYSQL_AUTO_CREATE_ACCOUNTS=true
En activant le provisionnement des comptes dans Guacamole, vous pourrez aux besoins activer les restrictions d’accès horaire par exemple ou désactiver le compte pour empêcher l’accès aux connexions.
Vous savez maintenant comment configurer Guacamole avec Keycloak. pour configurer l’authentification OpenID et permettre le SSO si vous utiliser plusieurs client dans le même royaume.