# 🚀 Guide de PrĂ©paration Production - Lions User Manager **Date**: 2025-01-15 **Version**: 1.0.0 **Statut**: ⚠ **OBLIGATOIRE AVANT DÉPLOIEMENT** --- ## ⚠ IMPORTANT **NE PAS DÉPLOYER** avant d'avoir complĂ©tĂ© toutes les Ă©tapes de ce guide. Le dĂ©ploiement Ă©chouera si : - ❌ Keycloak n'est pas configurĂ© (clients, rĂŽles, utilisateurs) - ❌ La base de donnĂ©es PostgreSQL n'existe pas - ❌ Les secrets et variables d'environnement ne sont pas configurĂ©s --- ## 📋 Table des MatiĂšres 1. [PrĂ©requis](#prĂ©requis) 2. [Configuration Keycloak Production](#configuration-keycloak-production) 3. [Configuration Base de DonnĂ©es PostgreSQL](#configuration-base-de-donnĂ©es-postgresql) 4. [PrĂ©paration des Secrets](#prĂ©paration-des-secrets) 5. [VĂ©rification PrĂ©-DĂ©ploiement](#vĂ©rification-prĂ©-dĂ©ploiement) 6. [Checklist ComplĂšte](#checklist-complĂšte) --- ## 1. PrĂ©requis ### Infrastructure Requise - ✅ **Keycloak** : Accessible sur `https://security.lions.dev` - ✅ **PostgreSQL** : Base de donnĂ©es disponible dans le cluster Kubernetes - ✅ **AccĂšs SSH** : AccĂšs au VPS/cluster pour exĂ©cuter les commandes - ✅ **kubectl** : ConfigurĂ© et connectĂ© au cluster de production - ✅ **kcadm.sh** : Keycloak Admin CLI (optionnel, pour scripts) ### AccĂšs Requis - ✅ AccĂšs admin Ă  Keycloak (`master` realm) - ✅ AccĂšs admin au cluster Kubernetes - ✅ AccĂšs Ă  la base de donnĂ©es PostgreSQL --- ## 2. Configuration Keycloak Production ### 2.1. CrĂ©er le Realm (si nĂ©cessaire) Le realm `master` est utilisĂ© par dĂ©faut pour gĂ©rer tous les autres realms. **VĂ©rification** : ```bash # Via Keycloak Admin Console https://security.lions.dev/admin # Realm: master # User: admin ``` ### 2.2. CrĂ©er les Clients OIDC #### Client Frontend (`lions-user-manager-client`) **Configuration requise** : - **Client ID** : `lions-user-manager-client` - **Type** : `public` (ou `confidential` avec secret) - **Realm** : `master` - **Redirect URIs** : - `https://user-manager.lions.dev/*` - `https://admin.lions.dev/*` - `https://user-manager.lions.dev/auth/callback` - **Web Origins** : - `https://user-manager.lions.dev` - `https://admin.lions.dev` - **Standard Flow** : ✅ ActivĂ© - **Direct Access Grants** : ❌ DĂ©sactivĂ© (sĂ©curitĂ©) - **Service Accounts** : ❌ DĂ©sactivĂ© - **PKCE** : ✅ ActivĂ© (recommandĂ©) **Script PowerShell** : `scripts/setup-keycloak-production.ps1` (Ă  crĂ©er) #### Client Backend (`lions-user-manager`) **Configuration requise** : - **Client ID** : `lions-user-manager` - **Type** : `confidential` (avec secret) - **Realm** : `master` - **Service Accounts** : ✅ ActivĂ© (OBLIGATOIRE) - **Standard Flow** : ❌ DĂ©sactivĂ© - **Direct Access Grants** : ✅ ActivĂ© (pour service account) - **Authorization** : ✅ ActivĂ© **RĂŽles Ă  assigner au Service Account** : - `admin` (dans le realm `master`) - Ou crĂ©er un rĂŽle spĂ©cifique `lions-user-manager-service` avec les permissions nĂ©cessaires **Script PowerShell** : `scripts/setup-keycloak-production.ps1` (Ă  crĂ©er) ### 2.3. CrĂ©er les RĂŽles Realm Les rĂŽles suivants doivent exister dans le realm `master` : | RĂŽle | Description | Utilisation | |------|-------------|-------------| | `admin` | Administrateur systĂšme | AccĂšs complet Ă  tous les endpoints | | `user_manager` | Gestionnaire utilisateur | CRUD utilisateurs | | `user_viewer` | Visualiseur utilisateur | Lecture seule utilisateurs | | `auditor` | Auditeur | Consultation logs d'audit | | `sync_manager` | Gestionnaire synchronisation | Gestion synchronisation | | `role_manager` | Gestionnaire rĂŽles | CRUD rĂŽles | | `role_viewer` | Visualiseur rĂŽles | Lecture seule rĂŽles | **Script** : `scripts/setup-keycloak-roles-production.ps1` (Ă  crĂ©er) ### 2.4. Configurer les Protocol Mappers **Client Scope** : `roles` (dĂ©jĂ  existant dans Keycloak) **VĂ©rifier que le mapper inclut** : - ✅ `realm_access.roles` dans l'access token - ✅ `roles` dans l'id token (optionnel) **Configuration** : 1. Aller dans **Client Scopes** → `roles` 2. Onglet **Mappers** 3. VĂ©rifier que `realm roles` existe et est configurĂ© pour l'access token ### 2.5. CrĂ©er un Utilisateur de Test (Optionnel) Pour tester l'application en production : - **Username** : `admin-user-manager` - **Email** : `admin-user-manager@lions.dev` - **Password** : (gĂ©nĂ©rer un mot de passe fort) - **RĂŽles** : Assigner `admin`, `user_manager`, `auditor` --- ## 3. Configuration Base de DonnĂ©es PostgreSQL ### 3.1. CrĂ©er la Base de DonnĂ©es **Nom** : `lions_audit` **Script PowerShell** : `scripts/setup-database-production.ps1` (Ă  crĂ©er) **Commandes manuelles** : ```bash # Se connecter au pod PostgreSQL kubectl exec -it -n postgresql -- psql -U -d postgres # CrĂ©er la base de donnĂ©es CREATE DATABASE lions_audit OWNER ; # CrĂ©er l'utilisateur (si nĂ©cessaire) CREATE USER lions_audit_user WITH PASSWORD ''; # Octroyer les privilĂšges GRANT ALL PRIVILEGES ON DATABASE lions_audit TO lions_audit_user; # Se connecter Ă  la nouvelle base \c lions_audit # VĂ©rifier les privilĂšges \l ``` ### 3.2. VĂ©rifier les Migrations Flyway Les migrations Flyway seront exĂ©cutĂ©es automatiquement au dĂ©marrage du backend si : - `quarkus.flyway.migrate-at-start=true` (dĂ©jĂ  configurĂ© dans `application-prod.properties`) **VĂ©rification** : - Les fichiers de migration sont dans `lions-user-manager-server-impl-quarkus/src/main/resources/db/migration/` - Flyway crĂ©era automatiquement les tables nĂ©cessaires ### 3.3. Configuration de Connexion **Variables d'environnement requises** : ```bash DB_HOST=lions-db.lions.svc.cluster.local # Service Kubernetes DB_PORT=5432 DB_NAME=lions_audit DB_USERNAME=lions_audit_user DB_PASSWORD= ``` --- ## 4. PrĂ©paration des Secrets ### 4.1. Secrets Keycloak #### Frontend Client Secret **OĂč le trouver** : 1. Keycloak Admin Console → **Clients** → `lions-user-manager-client` 2. Onglet **Credentials** 3. Copier le **Secret** (si client confidential) **Si client public** : Pas de secret nĂ©cessaire #### Backend Service Account Secret **OĂč le trouver** : 1. Keycloak Admin Console → **Clients** → `lions-user-manager` 2. Onglet **Credentials** 3. Copier le **Secret** #### OIDC Encryption Secret **GĂ©nĂ©rer un secret de 32 caractĂšres minimum** : ```bash # Linux/Mac openssl rand -base64 32 # PowerShell -join ((48..57) + (65..90) + (97..122) | Get-Random -Count 32 | ForEach-Object {[char]$_}) ``` **Stockage** : À stocker dans Kubernetes Secret ### 4.2. Secrets Base de DonnĂ©es **GĂ©nĂ©rer un mot de passe fort** : ```bash # Linux/Mac openssl rand -base64 24 # PowerShell -join ((48..57) + (65..90) + (97..122) | Get-Random -Count 24 | ForEach-Object {[char]$_}) ``` ### 4.3. CrĂ©er les Kubernetes Secrets **Namespace** : `lions-user-manager` (ou `applications`) **Secret pour Frontend** : ```yaml apiVersion: v1 kind: Secret metadata: name: lions-user-manager-client-secrets namespace: lions-user-manager type: Opaque stringData: KEYCLOAK_CLIENT_SECRET: OIDC_ENCRYPTION_SECRET: <32-char-encryption-secret> LIONS_USER_MANAGER_BACKEND_URL: https://api.lions.dev/lions-user-manager ``` **Secret pour Backend** : ```yaml apiVersion: v1 kind: Secret metadata: name: lions-user-manager-server-secrets namespace: lions-user-manager type: Opaque stringData: KEYCLOAK_CLIENT_SECRET: KEYCLOAK_ADMIN_USERNAME: KEYCLOAK_ADMIN_PASSWORD: DB_PASSWORD: SSL_KEYSTORE_PASSWORD: ``` --- ## 5. VĂ©rification PrĂ©-DĂ©ploiement ### 5.1. VĂ©rifier Keycloak ```bash # Tester la connexion Keycloak curl -k https://security.lions.dev/realms/master/.well-known/openid-configuration # Tester l'obtention d'un token (service account) curl -X POST https://security.lions.dev/realms/master/protocol/openid-connect/token \ -d "client_id=lions-user-manager" \ -d "client_secret=" \ -d "grant_type=client_credentials" ``` ### 5.2. VĂ©rifier la Base de DonnĂ©es ```bash # Tester la connexion PostgreSQL kubectl exec -it -n postgresql -- psql -U lions_audit_user -d lions_audit -c "SELECT version();" ``` ### 5.3. VĂ©rifier les Secrets Kubernetes ```bash # Lister les secrets kubectl get secrets -n lions-user-manager # VĂ©rifier un secret (sans afficher les valeurs) kubectl describe secret lions-user-manager-client-secrets -n lions-user-manager ``` --- ## 6. Checklist ComplĂšte ### ✅ Configuration Keycloak - [ ] Realm `master` accessible - [ ] Client frontend `lions-user-manager-client` créé - [ ] Client backend `lions-user-manager` créé avec service account - [ ] Secret frontend rĂ©cupĂ©rĂ© (si client confidential) - [ ] Secret backend (service account) rĂ©cupĂ©rĂ© - [ ] RĂŽles créés : `admin`, `user_manager`, `user_viewer`, `auditor`, `sync_manager`, `role_manager`, `role_viewer` - [ ] RĂŽles assignĂ©s au service account backend - [ ] Protocol mapper `roles` configurĂ© pour inclure `realm_access.roles` - [ ] Utilisateur de test créé (optionnel) - [ ] Test de connexion Keycloak rĂ©ussi ### ✅ Configuration Base de DonnĂ©es - [ ] Base de donnĂ©es `lions_audit` créée - [ ] Utilisateur `lions_audit_user` créé - [ ] PrivilĂšges accordĂ©s - [ ] Test de connexion rĂ©ussi - [ ] Migrations Flyway prĂȘtes (fichiers dans `db/migration/`) ### ✅ Secrets et Configuration - [ ] Secret OIDC encryption gĂ©nĂ©rĂ© (32+ caractĂšres) - [ ] Secrets Kubernetes créés (frontend + backend) - [ ] Variables d'environnement documentĂ©es - [ ] ConfigMaps Kubernetes prĂ©parĂ©s (si nĂ©cessaire) ### ✅ Infrastructure - [ ] Namespace Kubernetes créé - [ ] Ingress configurĂ© (si exposition externe) - [ ] Certificats TLS/SSL prĂ©parĂ©s - [ ] Health checks configurĂ©s ### ✅ Tests - [ ] Test Keycloak : Obtenir un token service account - [ ] Test Database : Connexion PostgreSQL - [ ] Test Secrets : VĂ©rifier les secrets Kubernetes --- ## 7. Scripts de Configuration ### 7.1. Script Keycloak Production **Fichier** : `scripts/setup-keycloak-production.ps1` ✅ **CRÉÉ** Ce script : 1. ✅ Se connecte Ă  Keycloak production (`https://security.lions.dev`) 2. ✅ CrĂ©e les clients OIDC (frontend + backend) 3. ✅ CrĂ©e les rĂŽles realm (admin, user_manager, user_viewer, auditor, sync_manager, role_manager, role_viewer) 4. ✅ VĂ©rifie le protocol mapper `roles` 5. ✅ Assigne les rĂŽles au service account backend 6. ✅ Affiche les secrets rĂ©cupĂ©rĂ©s **Utilisation** : ```powershell .\scripts\setup-keycloak-production.ps1 ` -AdminUsername "admin" ` -AdminPassword "your-admin-password" ``` ### 7.2. Script Base de DonnĂ©es Production **Fichier** : `scripts/setup-database-production.ps1` ✅ **CRÉÉ** Ce script : 1. ✅ Se connecte au cluster Kubernetes via SSH 2. ✅ Trouve le pod PostgreSQL 3. ✅ CrĂ©e la base de donnĂ©es `lions_audit` 4. ✅ CrĂ©e l'utilisateur `lions_audit_user` 5. ✅ Octroie les privilĂšges 6. ✅ Teste la connexion **Utilisation** : ```powershell .\scripts\setup-database-production.ps1 ` -VpsHost "lions@176.57.150.2" ` -DatabasePassword "strong-password-123" ``` ### 7.3. Script CrĂ©ation Secrets Kubernetes **Fichier** : `scripts/create-kubernetes-secrets-production.ps1` ✅ **CRÉÉ** Ce script : 1. ✅ CrĂ©e le namespace si nĂ©cessaire 2. ✅ CrĂ©e le secret frontend (KEYCLOAK_CLIENT_SECRET, OIDC_ENCRYPTION_SECRET, LIONS_USER_MANAGER_BACKEND_URL) 3. ✅ CrĂ©e le secret backend (KEYCLOAK_CLIENT_SECRET, KEYCLOAK_ADMIN_PASSWORD, DB_PASSWORD) 4. ✅ VĂ©rifie la crĂ©ation des secrets **Utilisation** : ```powershell .\scripts\create-kubernetes-secrets-production.ps1 ` -VpsHost "lions@176.57.150.2" ` -FrontendClientSecret "" ` -BackendClientSecret "" ` -OidcEncryptionSecret "<32-char-secret>" ` -KeycloakAdminPassword "" ` -DatabasePassword "" ``` --- ## 8. Ordre d'ExĂ©cution **IMPORTANT** : Respecter cet ordre : 1. ✅ **Configuration Keycloak** (clients, rĂŽles, secrets) 2. ✅ **Configuration Base de DonnĂ©es** (crĂ©ation DB, utilisateur) 3. ✅ **CrĂ©ation Secrets Kubernetes** (secrets, configmaps) 4. ✅ **VĂ©rification** (tests de connexion) 5. ✅ **DĂ©ploiement** (via lionsctl ou kubectl) --- ## 9. Commandes de DĂ©ploiement (APRÈS Configuration) Une fois toutes les configurations terminĂ©es : **Server (Backend)** : ```bash cd ../lions-infrastructure-2025/lionsctl ./lionsctl.exe pipeline -u https://git.lions.dev/lionsdev/lions-user-manager-server-impl-quarkus -b main -j 17 -e production -c k2 -m gbanedahoud@gmail.com ``` **Client (Frontend)** : ```bash cd ../lions-infrastructure-2025/lionsctl ./lionsctl.exe pipeline -u https://git.lions.dev/lionsdev/lions-user-manager-client-quarkus-primefaces-freya -b main -j 17 -e production -c k2 -m gbanedahoud@gmail.com ``` --- ## 10. Troubleshooting ### Erreur : "401 Unauthorized" lors du dĂ©marrage **Cause** : Secret Keycloak incorrect ou client non configurĂ© **Solution** : VĂ©rifier les secrets dans Keycloak et Kubernetes ### Erreur : "Database connection failed" **Cause** : Base de donnĂ©es non créée ou credentials incorrects **Solution** : VĂ©rifier la crĂ©ation de la DB et les credentials ### Erreur : "Roles not found in token" **Cause** : Protocol mapper non configurĂ© **Solution** : VĂ©rifier le mapper `roles` dans Keycloak --- ## ✅ Conclusion **NE PAS DÉPLOYER** avant d'avoir complĂ©tĂ© toutes les Ă©tapes de ce guide. **Ordre** : 1. ⚠ Configuration Keycloak (OBLIGATOIRE) 2. ⚠ Configuration Base de DonnĂ©es (OBLIGATOIRE) 3. ⚠ CrĂ©ation Secrets Kubernetes (OBLIGATOIRE) 4. ✅ VĂ©rification (OBLIGATOIRE) 5. 🚀 DĂ©ploiement (aprĂšs vĂ©rification) --- **Document gĂ©nĂ©rĂ© le** : 2025-01-15 **DerniĂšre mise Ă  jour** : 2025-01-15 **Scripts créés** : - ✅ `scripts/setup-keycloak-production.ps1` : Configuration Keycloak - ✅ `scripts/setup-database-production.ps1` : Configuration PostgreSQL - ✅ `scripts/create-kubernetes-secrets-production.ps1` : CrĂ©ation secrets Kubernetes **Prochaine Ă©tape** : ExĂ©cuter les scripts dans l'ordre indiquĂ© ci-dessus