Skip to content

Repository files navigation

🖥️ GIT VM Portal — Google Cloud

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.

CI  ·  Prod : https://git-vm-google.satom-openstack.workers.dev

Variante Google Cloud du projet (le jumeau AWS vit dans un autre repo/worker, inchangé).


✨ Fonctionnalités

  • 🔐 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.

🧱 Stack

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
Email EmailJS (REST) · Erreurs : Sentry (optionnel)

Choix d'architecture justifiés dans les ADR.

🚀 Démarrage rapide

# 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é). Voir docs/CONFIGURATION.md.

🗺️ Architecture en bref

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

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.

🔐 Secrets

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.

📄 Licence

Projet éducatif interne — tous droits réservés.

About

No description, website, or topics provided.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages