Passa al contenuto principale
Versione: 0.5.6

Keycloak su Aruba Cloud

Esegui il deployment di Keycloak — gestione delle identità e degli accessi enterprise — su Aruba Cloud tramite Terraform e cloud-init. Keycloak viene eseguito in modalità Quarkus di produzione con un database PostgreSQL locale.

Versione provider: arubacloud/arubacloud ~> 1.0 | Terraform: ≥ 1.9


Introduzione​

Keycloak è una piattaforma IAM open-source certificata CNCF che fornisce SSO, OIDC, OAuth2 e SAML 2.0. Questo esempio distribuisce Keycloak con:

  • Distribuzione Keycloak Quarkus in modalità server di produzione — non modalità dev, nessun database H2 effimero
  • PostgreSQL locale — Keycloak supporta ufficialmente PostgreSQL e MariaDB. MySQL gestito da ArubaCloud DBaaS non è nella matrice di supporto di Keycloak e non viene usato qui
  • Reverse proxy nginx sulle porte 80/443 con header di forwarding corretti (X-Forwarded-*), mentre Keycloak si lega a 127.0.0.1:8080
  • Utente admin creato automaticamente al primo avvio tramite file di ambiente systemd — accedi immediatamente dopo il bootstrap
  • HTTPS Let's Encrypt opzionale quando viene fornito un dominio personalizzato

Panoramica dell'architettura​


Infrastruttura creata​

RisorsaPattern del nomeDescrizione
arubacloud_projectkc-prodContenitore del progetto
arubacloud_vpckc-prod-vpcVirtual Private Cloud
arubacloud_subnetkc-prod-subnetSubnet base
arubacloud_securitygroupkc-prod-vm-sgSecurity group
arubacloud_securityrulekc-prod-vm-sshRegola ingress SSH
arubacloud_securityrulekc-prod-vm-httpRegola ingress HTTP
arubacloud_securityrulekc-prod-vm-httpsRegola ingress HTTPS
arubacloud_elasticipkc-prod-vm-eipIP pubblico della VM
arubacloud_blockstoragekc-prod-bootDisco di boot da 50 GB (Performance)
arubacloud_keypairkc-prod-keypairChiave pubblica SSH
arubacloud_cloudserverkc-prod-vmVM CloudServer

Costo mensile stimato​

RisorsaSpecificheCosto stimato/mese
VM CloudServerCSO4A8 — 4 vCPU / 8 GB~€36
Disco di boot50 GB Performance~€6
Elastic IP—~€3
Totale~€45/mese

Requisiti​

  • Terraform ≥ 1.9
  • ArubaCloud Terraform Provider ~> 1.0
  • Un account ArubaCloud con credenziali API OAuth2
  • Una coppia di chiavi SSH

Variabili​

Obbligatorie​

VariabileDescrizione
arubacloud_client_idClient ID OAuth2 di ArubaCloud
arubacloud_client_secretClient secret OAuth2 di ArubaCloud
ssh_public_keyContenuto della chiave pubblica SSH
keycloak_admin_passwordPassword admin Keycloak (min 12 caratteri)
db_passwordPassword utente Keycloak PostgreSQL (min 16 caratteri)

Opzionali​

VariabileDefaultDescrizione
app_name"kc"Nome breve usato in tutti i nomi delle risorse
environment"prod"Etichetta dell'ambiente
location"ITBG-Bergamo"Regione ArubaCloud
zone"ITBG-1"Zona di disponibilità
billing_period"Hour""Hour" o "Month"
vm_flavor"CSO4A8"Flavor del CloudServer
vm_image"LU22-001"Immagine del disco di boot (Ubuntu 22.04 LTS)
vm_disk_size_gb50Dimensione del disco di boot in GB
ssh_cidr"0.0.0.0/0"CIDR per SSH — limita al tuo IP
keycloak_admin"admin"Nome utente admin Keycloak
keycloak_version"26.0.7"Versione di Keycloak
domain""Dominio personalizzato per HTTPS — lascia vuoto per usare l'Elastic IP

Output​

OutputDescrizione
keycloak_urlURL Keycloak
admin_console_urlURL della console admin Keycloak
vm_public_ipIP pubblico della VM
ssh_commandComando SSH per connettersi
keycloak_adminNome utente admin

Istruzioni di deployment​

1. Clona e naviga​

git clone https://github.com/arubacloud/terraform-arubacloud-examples.git
cd terraform-arubacloud-examples/keycloak

2. Configura le variabili​

cp terraform.tfvars.example terraform.tfvars

Imposta keycloak_admin_password e db_password.

3. Esegui il deployment​

terraform init
terraform plan
terraform apply

Il bootstrap richiede circa 8–12 minuti — Keycloak scarica ~120 MB e kc.sh build compila l'app Quarkus.

4. Accedi alla console Admin​

terraform output admin_console_url

Accedi con il nome utente admin e keycloak_admin_password. Crea i tuoi realm, client e utenti.


Raccomandazioni di sicurezza​

  1. Usa HTTPS. Imposta domain per abilitare TLS Let's Encrypt. I token Keycloak trasmessi via HTTP possono essere intercettati.

  2. Limita SSH. Imposta ssh_cidr = "your.ip/32".

  3. Cambia la password admin dopo il primo accesso con un valore univoco e robusto.

  4. Disabilita il master realm per uso in produzione. Crea un realm dedicato per le tue applicazioni e disabilita l'accesso diretto al master realm.

  5. Abilita la protezione brute-force. In Impostazioni Realm → Difese di Sicurezza → Rilevamento Brute Force.

  6. Esegui backup regolari del database PostgreSQL — tutta la configurazione di realm, utenti e client è memorizzata lì.


Risoluzione dei problemi​

Keycloak non raggiungibile dopo apply​

sudo systemctl status keycloak
sudo journalctl -u keycloak -n 50
sudo tail -f /var/log/cloud-init-output.log

Keycloak impiega 2–4 minuti per avviarsi la prima volta (kc.sh build deve girare prima). Gli avvii successivi sono più veloci.

La console admin restituisce 403​

Assicurati che l'hostname in keycloak.conf corrisponda all'hostname da cui stai accedendo a Keycloak. Con accesso via IP e senza dominio, hostname-strict=false è già impostato.

PostgreSQL connection refused​

sudo systemctl status postgresql
sudo -u postgres psql -c "\l" # elenca i database
sudo -u postgres psql -c "\du" # elenca gli utenti

Riferimenti​