Plateforme self-service de provisioning de machines virtuelles SSO Microsoft → demande → validation → VM Google Compute Engine automatique → arrêt à l'échéance. Le tout sur Cloudflare Workers.
Variante Google Cloud du projet (le jumeau AWS vit dans un autre repo/worker, inchangé).
- 🔐 SSO Microsoft Entra ID (OIDC authorization-code, in-Worker, aucun mot de passe stocké).
- 🖥️ Demande de VM en libre-service depuis un catalogue performance × stockage × OS ; 1 à 4 VM d'un coup, chacune nommée et configurée ; >1 VM ⇒ groupe (piloté ensemble).
- 🐧 7 systèmes : Ubuntu 24.04, Debian 12, RHEL 9, Rocky Linux 9, AlmaLinux 9, Windows Server 2022 et Windows poste de travail (bureau).
- 👥 3 rôles : membre · formateur (1–30 VM attribuées à des utilisateurs) · admin.
- ✅ Workflow de validation (admin approuve/refuse, à la VM ou au groupe) + notifications.
- ⚙️ Provisioning Compute Engine automatique et idempotent via un réconciliateur cron.
- 🔑 Accès sécurisé par VM : clé SSH RSA chiffrée AES-GCM (Linux) ou mot de passe RDP chiffré (Windows) — propriétaire uniquement. Guides intégrés (MobaXterm, Termius, Bureau à distance).
- 💾 Snapshots de disque : créer / supprimer, snapshot auto avant suppression, restaurer une VM depuis un snapshot à la création.
- ⏱️ Cycle de vie : dates obligatoires, suppression auto à l'échéance, arrêt sur inactivité (CPU Cloud Monitoring), extinction nocturne, planification start/stop par VM.
- 🛡️ Durcissement sécurité : DNS filtré (Cloudflare for Families), blocage P2P/torrent, hostname verrouillé, + egress VPC firewall verrouillé (filtrage réseau non contournable).
- 📊 Console admin unifiée (demandes + machines), estimation des coûts, export CSV, audit.
- 🌗 Thème clair/sombre · 🌐 FR/EN.
| Couche | Techno |
|---|---|
| Frontend | React 19 · Vite · TypeScript · Tailwind v4 · TanStack Query · react-i18next |
| Backend | Cloudflare Worker (Hono) — API JSON + cron scheduled() |
| Base de données | Cloudflare D1 (SQLite) |
| Hébergement | Cloudflare Workers Static Assets (SPA) + Worker (API) |
| Auth utilisateur | Microsoft Entra ID (OIDC) |
| Compute | Google Cloud Compute Engine (europe-west6 / Zurich) |
| Auth GCP | Workload Identity Federation (sans clé) → impersonation de service account |
| EmailJS (REST) · Erreurs : Sentry (optionnel) |
Choix d'architecture justifiés dans les ADR.
# 1. Installer les dépendances (worker + SPA)
npm install && npm --prefix web install
# 2. Migrer la base locale
npx wrangler d1 migrations apply git_vm_google --local
# 3. Lancer le worker (API) et la SPA
npx wrangler dev # → http://localhost:8787 (API)
npm --prefix web run dev # → http://localhost:5173 (SPA, proxy /api → :8787)Les secrets locaux se mettent dans un fichier
.dev.vars(non commité). Voirdocs/CONFIGURATION.md.
Navigateur ──HTTPS──> Cloudflare Worker (Hono)
│ React SPA │ OIDC Entra ID · API JSON · cron scheduled()
│ (static assets) ├──> D1 (SQLite) = état désiré
│ ├──> Compute Engine (WIF, sans clé) = provisioning réel
│ └──> EmailJS = notifications
└─ La cron réconcilie en continu l'état réel GCP avec la DB (provisioning→active, drift, expiry).
Détails et diagrammes : docs/ARCHITECTURE.md.
Déploiement automatique via Cloudflare Workers Builds : un merge sur main déclenche
build + migrations D1 + déploiement. Pas de wrangler deploy manuel. Voir
docs/DEPLOYMENT.md.
Config publique dans wrangler.jsonc (vars). Secrets via wrangler secret put (jamais commités) :
SESSION_SECRET, ENTRA_CLIENT_SECRET, GCP_WIF_PRIVATE_KEY, EMAILJS_PRIVATE_KEY.
Aucune clé de service GCP (auth par WIF). Détail, IAM, procédure WIF, rotation :
docs/CONFIGURATION.md.
Projet éducatif interne — tous droits réservés.