Introduction
Keycloak est une solution opensource permettant d'implémenter du SSO (Single-Sign-On) au sein d'une infrastructure. Il est compatible avec les principaux protocoles d'authentification (OAuth2.0, OpenID-Connect). Il peut être couplé à un annuaire LDAP.
Dans cet article, Keycloak, va être déployé sur une Debian 10 conteneurisé dans 2 images dockers. Docker-Compose va orchestrer le tout. Un serveur nginx sera en frontal en tant que reverse-proxy.
Prérequis
-
1 serveur Debian 10 à jour qui sera dédié à hébergé le serveur Keycloack
-
1 serveur web Nginx opérationnel
-
Certificats SSL générés pour votre nom de domaine
Voir article : Nginx : Ajouter un certificat SSL Let’s Encrypt pour passer en HTTPS
Installation
Installation des paquets
-
Installer docker :
sudo apt install docker
-
Installer docker-compose :
sudo apt install docker-compose
-
Vérifier l'installation de docker-compose :
docker-compose --version
Création du docker-compose
-
Créer un répertoire afin d'y stocker le fichier docker-compose :
sudo mkdir keycloak
-
Se positionner dans le répertoire nouvellement créé :
cd keycloak
-
Créer un fichier
docker-compose.yml
:sudo vi docker-compose.yml
Attention, le fichier doit être au format
YAML
ce qui signifie que la tabulation est interdite (il faut mettre des espaces pour l'indentation).
-
Copier / Coller le fichier suivant :
version: '3.3' volumes: postgres_data: driver: local services: postgres: image: postgres volumes: - postgres_data:/var/lib/postgresql/data environment: POSTGRES_DB: keycloak POSTGRES_USER: keycloak POSTGRES_PASSWORD: password keycloak: image: jboss/keycloak:latest environment: PROXY_ADDRESS_FORWARDING: 'true' DB_VENDOR: POSTGRES DB_ADDR: postgres DB_DATABASE: keycloak DB_USER: keycloak DB_PASSWORD: password KEYCLOAK_USER: admin KEYCLOAK_PASSWORD: Mon_mot_de_passe ports: - 9090:8080 depends_on: - postgres
-
Le numéro de version indiqué en 1ère ligne peut varier suivant votre version de docker-compose. Dans mon cas, j'ai une version de docker-compose en 1.21.0.
-
Le port de keycloak dans le conteneur est le 8080, il sera bind sur le 9090 du serveur.
-
La directive
PROXY_ADDRESS_FORWARDING
est très importante dans le cas d'une utilisation de reverse proxy.
-
Lancement du docker-compose
-
Exécuter le docker-compose :
sudo docker-compose -f ~/keycloak/docker-compose.yml up
-
Pour lancer le docker-compose en arrière-plan :
sudo docker-compose -f ~/keycloak/docker-compose.yml up -d
-
Vérifier que les conteneurs docker soient bien démarrés :
sudo docker ps
-
Le résultat soit être similaire à :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 643f26101b75 jboss/keycloak:latest "/opt/jboss/tools/do…" About a minute ago Up 52 seconds 8443/tcp, 0.0.0.0:9090->8080/tcp keycloak_keycloak_1 6789a8285283 postgres "docker-entrypoint.s…" About a minute ago Up 52 seconds 5432/tcp keycloak_postgres_1
Configuration reverse-proxy SSL avec Nginx
-
Un serveur Nginx doit être opérationnel.
S'appuyer sur cet article : Nginx : Installation d’un Reverse Proxy
-
Les certificats SSl doivent être générés.
S'appuyer sur cet article : Nginx : Ajouter un certificat SSL Let’s Encrypt pour passer en HTTPS
-
Créer le fichier de configuration du virtual host :
sudo vi /etc/nginx/sites-available/keycloak.conf
-
Copier / Coller le fichier suivant :
server { listen 80; server_name keycloak.example.com; rewrite ^ https://keycloak.example.com permanent; } server { listen 443 ssl; server_name keycloak.example.com; ssl_certificate /etc/letsencrypt/live/keycloak.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/keycloak.example.com/privkey.pem; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://IP_MON_SERVEUR_KEYCLOACK:9090; } }
- Remplacer
keycloak.example.com
par le nom de domaine pour le serveur keycloak. Le nécessaire doit être fait au sein de la zone DNS. - Vérifier les chemins d'accès aux certificats SSL.
- Modifier la directive
proxy_pass
pour correspondre avec le serveur keycloak.
- Remplacer
-
Créer un lien symbolique pour activer le virtual host :
sudo ln -s /etc/nginx/sites-available/keycloak.conf /etc/nginx/sites-enabled/keycloak.conf
-
Vérifier la configuration de Nginx avec :
sudo nginx -t
-
Redémarrer le service nginx :
sudo systemctl restart nginx
Accès administrateur à Keycloak
-
Se rendre à l'adresse : https://keycloak.example.com
-
Accéder à
Administration Console
:
Les credentials à entrer sont ceux définit dans le fichier
docker-compose.yml
aux lignes suivantes :KEYCLOAK_USER: admin KEYCLOAK_PASSWORD: Mon_mot_de_passe
Démarrage automatique avec le système
-
Avec la configuration actuelle au redémarrage du serveur keycloak, le docker-compose ne sera pas lancé.
-
Pour activer le démarrage automatique des conteneurs Postegresql et Keycloak au boot du serveur, modifier le
docker-compose.yml
et ajouter cette ligne dans chaqueservices
qui doit démarrer avec le service docker :restart: always
Si les conteneurs sont arrêtés à la main, ils ne démarreront pas automatiquement. Docker comprend que c'est une action manuelle et que c'est l'état désiré.
-
Pour que cela soit fonctionnel, le service
docker.service
doit être en statusenable
:sudo systemctl status docker.service
-
Le résultat doit être le suivant :
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
-
Si cela n'est pas le cas :
sudo systemctl enable docker.service
2 commentaires