Skip to content

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