Keycloak : déployer un gestionnaire d’identification avec Docker

Dans ce tutoriel, je vais vous expliquer comment déployer Keycloak avec Docker.

Présentation de Keycloak

Avant de rentrer dans le vif du sujet, je vais vous présenter Keycloak.

Keycloak est un logiciel Open source, qui permet de mettre en place un système d’authentification unique SSO qui prend en charge :

  • OpenID
  • SAML

Si vous connaissez ADFS, Keycloak permet de faire la « même chose », c’est à dire d’avoir un portail web unique d’authentification aux applications.

Keycloak permet d’être plus flexible que ADFS car il prend en charge plusieurs sources :

  • Base local par royaume
  • Liaison avec l’Active Directory
  • ADFS
  • et la plupart des fournisseurs (Google, Facebook, Github …)

En plus des multiples sources de comptes utilisateurs Keycloak permet :

  • Stratégie de mot de passe
  • Changer son mot de passe
  • OTP

Prérequis

Pour déployer Keycloak vous aurez besoin :

Installation de Keycloak

Keycloak peut être déployé de plusieurs façons :

  • Sur une distribution Linux avec OpenJDK
  • Kubernetes
  • Podman
  • OpenShift
  • Docker

Dans ce tutoriel, je vais vous expliquer comment le déployer avec Docker.

Voici les liens de la documentation pour un déploiement avec Docker :

Si vous allez voir la documentation, la mise en production de Keycloak n’est pas très bien expliquer sur le premier lien et sur le second, on vous explique comme construire (build) votre image Docker pour la mise en production.

Afin de vous facilitez la tâche, j’ai déjà « construit » une image pour Docker et écrit un fichier docker-compose.yml.

Les sources sont disponible ici : https://git.rdr-it.com/registry/keycloak.

J’ai en plus ajouté à l’image le complément suivant : Keycloak: Restrict user authorization on clients qui permet de restreindre l’authentification en fonction d’un rôle.

Cela apporte une fonctionnalité similaire à AD FS avec la restriction par groupe utilisateur.

Si vous commencez à avoir l’habitude de lire mes tutoriels quand j’utilise des containers Docker, je vais commencer par créer un dossier où je vais mettre les différents fichiers et les volumes.

Ici je vais travailler dans le dossier /containers/keycloak/.

On commence par cloner le dépôt :

sudo git clone https://git.rdr-it.com/registry/keycloak.git .

Vérifier que les fichiers du dépôt sont présents :

ll

Afin de faciliter la configuration des conteneurs, les paramètres ont été mis dans un fichier d’environnement.

Copier le fichier :

sudo cp .env.template .env

Editer le fichier .env

sudo nano .env

Voici les paramètres variables à éditer à minima :

VariableExplication
MYSQL_PASSWORDMot de passe de l’utilisateur keycloak dans MariaDB
MYSQL_ROOT_PASSWORDMot de passe du compte root dans MariaDB
KEYCLOAK_ADMIN_PASSWORDMot de passe du compte admin de Keycloak
KEYCLOAK_PORT_EXPOSEPour exposé du conteneur Keycloak, par défaut 8080
KC_HOSTNAME_URLProtocle (HTTP/HTTPS) et url du service Keycloak
KC_HOSTNAMEurl du service Keycloak (normalement non utilisé)
KC_HOSTNAME_PORTport du service Keycloak (normalement non utilisé)
KC_PROXYPermet de déclarer si un reverse proxy est utilisé, dans le tutoriel ça sera reencrypt

Maintenant que la configuration des conteneurs est faite, télécharger les images :

sudo docker compose pull

Démarrer les conteneurs :

sudo docker compose up -d

Vérifier que tout se passe bien en affichant les logs :

sudo docker compose logs -f

Le conteneur Keycloak est opérationnel.

Avant de pouvoir y accéder, il faut configurer le reverse proxy

Configurer Nginx comme reverse proxy pour Keycloak

Dans le dossier cloné, le fichier nginx-keycloak est un modèle pour la configuration du virtual host.

Adapter à votre environnement.

Voici le fichier :

Si vous avez des questions pour la mise en place du virtual host sur Nginx, poser les dans les commentaires.

Quand la configuration du reverse proxy est terminé, ouvrir un navigateur et aller à l’URL configuré pour valider le fonctionnement.

Si tout se passe bien, vous arrivez sur cette page :

keycloak landing page

Premier pas avec Keycloak

Dans cette partie, je ne vais pas vous expliquer comment configurer des applications avec Keycloak pour mettre en place une authentification SAML ou OpenID, mais je vais vous présenter l’interface d’administration et vous donnez quelques informations pour la prise main.

Se connecter à l’administration de Keycloak

Sur la page précédente, cliquer sur Administration Console 1.

On arrive sur le formulaire d’authentification.

  • Identifiant : admin (sauf si vous avez changer dans le fichier .env)
  • Mot de passe : celui indiquer dans le fichier .env
keycloak login form

Une fois connecté, on arrive sur la page d’informations du serveur dans le royaume master.

Les royaumes / domaine (realm)

La première chose importante à prendre dans Keycloak est la notion de Royaume/Domaine (realm).

Voici la définition donnée dans la documentation officiel :

Un domaine gère un ensemble d’utilisateurs, d’informations d’identification, de rôles et de groupes. Un utilisateur appartient à un domaine et s’y connecte. Les royaumes sont isolés les uns des autres et ne peuvent gérer et authentifier que les utilisateurs qu’ils contrôlent.

La création de différents realm va dépendre de l’utilisation que vous allez faire de Keycloak.

Si vous êtes une entreprise de service vous allez par exemple créer un domaine par client.

Dans le cas d’utilisation dans une entreprise en interne, on peut par exemple créer un realm par application.

Clients

Dans chaque domaine, nous avons des clients, les clients sont les applications que nous allons configurer pour utiliser Keycloak.

Sur la capture ci-dessous, on peut voir que deux clients ont été ajoutés :

  • kb-rdr-it-io
  • learn-rdr-it-io

Ce qui signifie que les utilisateurs du realm master peuvent se connecter aux deux applications.


Ce premier tutoriel sur Keycloak s’arrête ici. D’autre tutoriels sont en cours de rédaction où nous verrons plus de fonctionnalités dans Keycloak comme :

  • Configuration du domaine
  • Gestion des utilisateurs
  • Politique de mot de passe
  • Protection par brute force
  • Liaison avec un annuaire Active Directory
  • Confiuration de client :
    • WordPress
    • Guacamole
    • Gitlab
    • Nextcloiud




Laisser un commentaire