Phase 4.3 — Keycloak
Provisionnement de la VM via OpenTofu, configuration via Ansible.
Vue d'ensemble
Keycloak authentifie les utilisateurs sur tous les services exposés : GitLab, Harbor, Grafana, DefectDojo, ArgoCD.
| Rôle | Valeur |
|---|---|
| VM | 203 — keycloak (192.168.1.32) |
| Nœud Proxmox | pve02 |
| Groupe Ansible | keycloak |
| URL | https://keycloak.mounik.ovh |
| Base de données | PostgreSQL sur la même VM |
| TLS | Désactivé (Traefik fait le TLS) |
1. Provisionnement OpenTofu
# keycloak.tf — appel au module vm
module "keycloak" {
source = "./modules/vm"
name = "keycloak"
target_node = "pve02"
vmid = 203
cores = 2
memory = 4096
balloon = 2048
disk_size = "40G"
ip = "192.168.1.32"
ssh_key = local.ssh_key
depends_on = [module.vault]
}
Exécution :
cd homelab-proxmox/opentofu
tofu plan -target=module.keycloak -out=tfplan
tofu apply tfplan
2. Configuration Ansible
Le playbook ansible/playbooks/03-keycloak.yml applique le rôle keycloak :
ansible-playbook -i inventory/homelab.yml playbooks/03-keycloak.yml
Le rôle keycloak :
1. Installe Java 17, PostgreSQL et les dépendances
2. Télécharge et extrait Keycloak dans /opt/keycloak
3. Crée la base et l'utilisateur PostgreSQL
4. Déploie keycloak.conf (template Jinja2 — port, hostname, DB, proxy)
5. Installe le service systemd
6. Active et démarre Keycloak
Variable sensible : kc_db_password (mot de passe PostgreSQL, à passer via Vault).
La configuration des clients OIDC (GitLab, Harbor, Grafana…) est faite manuellement une fois Keycloak démarré (voir §3).
3. Configuration initiale (one-shot)
ssh mounik@192.168.1.32 -p 2222
# Créer le compte admin
/opt/keycloak/bin/kcadm.sh config credentials \
--server http://127.0.0.1:8080 \
--realm master \
--user admin \
--password <mot_de_passe_admin>
# Créer le realm
/opt/keycloak/bin/kcadm.sh create realms -s realm=homelab -s enabled=true
# Créer l'utilisateur mounik
/opt/keycloak/bin/kcadm.sh create users -r homelab \
-s username=mounik -s email=mounicou@gmail.com -s enabled=true
/opt/keycloak/bin/kcadm.sh set-password -r homelab \
--username mounik --new-password <password>
# Clients OIDC
/opt/keycloak/bin/kcadm.sh create clients -r homelab \
-s clientId=gitlab -s secret=<secret> \
-s redirectUris='["https://gitlab.mounik.ovh/*"]' \
-s standardFlowEnabled=true
/opt/keycloak/bin/kcadm.sh create clients -r homelab \
-s clientId=harbor -s secret=<secret> \
-s redirectUris='["https://harbor.mounik.ovh/*"]' \
-s standardFlowEnabled=true
/opt/keycloak/bin/kcadm.sh create clients -r homelab \
-s clientId=grafana -s secret=<secret> \
-s redirectUris='["https://grafana.mounik.ovh/*"]' \
-s standardFlowEnabled=true
/opt/keycloak/bin/kcadm.sh create clients -r homelab \
-s clientId=defectdojo -s secret=<secret> \
-s redirectUris='["https://defectdojo.mounik.ovh/*"]' \
-s standardFlowEnabled=true
/opt/keycloak/bin/kcadm.sh create clients -r homelab \
-s clientId=argocd -s secret=<secret> \
-s redirectUris='["https://argocd.mounik.ovh/*"]' \
-s standardFlowEnabled=true
Les secrets des clients OIDC sont stockés dans Vault :
vault kv put homelab/keycloak-clients gitlab-secret=...
4. Vérification
systemctl status keycloak
journalctl -u keycloak -f
curl https://keycloak.mounik.ovh/realms/homelab/.well-known/openid-configuration
Pour aller plus loin
- Phase 2 — OpenTofu — provisioning de toutes les VMs
- Phase 4.4 — GitLab — intégration OIDC dans GitLab
- Playbooks Ansible — dans
ansible/du dépôt