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 :
- D’un serveur Linux avec Docker
- D’un reverse proxy, dans ce tutoriel je vais utiliser Nginx.
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 :
- https://www.keycloak.org/getting-started/getting-started-docker
- https://www.keycloak.org/server/containers
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.io/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.io/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 :
Variable | Explication |
---|---|
MYSQL_PASSWORD | Mot de passe de l’utilisateur keycloak dans MariaDB |
MYSQL_ROOT_PASSWORD | Mot de passe du compte root dans MariaDB |
KEYCLOAK_ADMIN_PASSWORD | Mot de passe du compte admin de Keycloak |
KEYCLOAK_PORT_EXPOSE | Pour exposé du conteneur Keycloak, par défaut 8080 |
KC_HOSTNAME_URL | Protocle (HTTP/HTTPS) et url du service Keycloak |
KC_HOSTNAME | url du service Keycloak (normalement non utilisé) |
KC_HOSTNAME_PORT | port du service Keycloak (normalement non utilisé) |
KC_PROXY | Permet 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 :
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
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
- …