Prérequis et architecture¶
Ce tutoriel s'appuie sur le Tutoriel 1 — Fondations et le Tutoriel 2 — VDI Linux. Verifiez que votre environnement est pret.
Tutoriels précédents termines¶
Vous devez avoir :
- Un projet GCP configuré avec
universe_domain - Un service account
packer-builderavec les rôles nécessaires - Une méthode d'authentification (clé JSON ou WIF)
- Le build du Tuto 1 (image Docker) fonctionnel
- Au moins une image VDI Linux deployable (Tuto 2)
Obligatoire
Si vous n'avez pas suivi les tutoriels précédents, faites-le d'abord :
Versions requises¶
| Outil | Version minimum | Vérification |
|---|---|---|
| gcloud CLI | Dernière | gcloud --version |
| Packer | 1.10+ | packer --version |
| Ansible | 2.15+ | ansible --version |
| Python | 3.10+ | python3 --version |
APIs GCP supplémentaires¶
En plus des APIs activees dans le Tuto 1, activez :
gcloud services enable sqladmin.googleapis.com
gcloud services enable servicenetworking.googleapis.com
| API | Usage |
|---|---|
| Cloud SQL Admin API | Provisionnement de l'instance PostgreSQL |
| Service Networking API | Connexion Private IP entre VPC et Cloud SQL |
Composants Apache Guacamole¶
Apache Guacamole se compose de trois éléments :
graph LR
Browser["Navigateur"] -->|"HTTP"| Client["guacamole-client (WAR)"]
Client -->|"Guacamole Protocol"| Daemon["guacd (daemon C)"]
Client -->|"JDBC"| DB["PostgreSQL"]
Daemon -->|"RDP / SSH"| VDI["VDI distantes"] guacamole-client (webapp)¶
Application web Java déployée dans Tomcat. C'est l'interface utilisateur : écran de login, liste des connexions, affichage du bureau distant dans le navigateur via HTML5 Canvas.
guacd (daemon proxy)¶
Daemon natif en C qui fait le pont entre le protocole Guacamole (websocket) et les protocoles distants (RDP, SSH). C'est lui qui etablit les connexions vers les VDI.
VNC interdit
Ce tutoriel compile guacd sans support VNC. La dépendance libvncserver-dev n'est pas installee. Seuls RDP et SSH sont actifs.
Extensions¶
- guacamole-auth-jdbc-postgresql : stockage des utilisateurs, connexions et permissions dans PostgreSQL
- guacamole-auth-sso-saml : authentification déléguée a un IdP SAML externe
Flux réseau¶
| Source | Destination | Port | Protocole | Usage |
|---|---|---|---|---|
| Navigateur | VM Guacamole | 8080 | HTTP | Interface web |
| Guacamole webapp | Cloud SQL | 5432 | PostgreSQL | Auth + connexions |
| Guacamole webapp | IdP externe | 443 | HTTPS/SAML | Authentification SSO |
| guacd | VDI Linux | 3389 | RDP | Bureau distant |
| guacd | VDI Linux | 22 | SSH | Terminal distant |
| guacd | VDI Windows | 3389 | RDP | Bureau distant |
Réseau interne
Toutes les connexions guacd → VDI et webapp → Cloud SQL passent par le réseau interne GCP (Private IP). Seul le port 8080 est expose à l'extérieur.
Rôles du service account¶
Le service account packer-builder existant a besoin d'un rôle supplémentaire :
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:packer-builder@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/cloudsql.client"
Structure du projet¶
À la fin de ce tutoriel, votre projet aura cette structure :
packer-guacamole/
├── packer/
│ ├── guacamole.pkr.hcl
│ ├── variables.pkr.hcl
│ └── guacamole.auto.pkrvars.hcl
└── ansible/
├── playbook.yml
└── roles/
├── tomcat/
│ ├── tasks/main.yml
│ ├── handlers/main.yml
│ └── defaults/main.yml
├── guacd/
│ ├── tasks/main.yml
│ ├── handlers/main.yml
│ └── defaults/main.yml
└── guacamole-webapp/
├── tasks/main.yml
├── templates/
│ └── guacamole.properties.j2
└── defaults/main.yml