Flotte Mobile CLS est une application web de gestion des lignes mobiles du groupe CLS. Elle consolide les données ADP (collaborateurs) et Intune (appareils), applique les tarifs opérateurs, et fournit un dashboard de suivi avec plan de migration. Un ETL intégré utilise Azure AI (GPT-4.1-mini) pour le matching flou entre noms ADP et appareils Intune.
| Caracteristique | Detail |
|---|---|
| Type | Application web statique (HTML/CSS/JS) + API serverless |
| Hebergement | Azure Static Web App (free tier) — swa-flotte-mobile-v2 |
| Runtime API | Azure Functions managed (Node.js 18) |
| Base de données | Azure PostgreSQL Flexible Server (B1ms) — pg-n8n-labs-cls.postgres.database.azure.com Base : flotte_mobile — Tables : lignes_mobiles, plan_migration |
| Intelligence artificielle | Azure AI Foundry (GPT-4.1-mini) — ai-foundry-cls.cognitiveservices.azure.com Matching flou noms ADP / appareils Intune lors de l'ETL |
| Emails | Microsoft Graph API (OAuth2 client_credentials) — si notifications email nécessaires |
| Authentification | Azure AD SSO (provider intégré SWA) + MFA, avec fallback mot de passe |
| Région | West Europe (SWA) / France Central (PostgreSQL, AI Foundry) |
| Resource Group | rg-checklist-salles |
| Code source | GitHub privé — glagadec/flotte-mobile-cls |
| CI/CD | GitHub Actions — déploiement automatique sur push |
| Equipe | Accès |
|---|---|
| EADM | Consultation dashboard, gestion plan de migration |
| DSI | Administration complète, ETL upload, plan de migration |
| Donnée | Type | Sensibilité |
|---|---|---|
| Numéros de téléphone | Numérique | Faible à moyen (numéros professionnels) |
| Opérateurs (SFR, Orange, Bouygues, Free) | Liste fermée | Faible |
| Noms des collaborateurs (nom_complet ADP) | Identité | Donnée personnelle (RGPD) |
| Tarifs mensuels | Montants € | Faible |
| Numéros IMEI (Intune) | Identifiant appareil | Faible |
| Plan de migration (dates, statut) | Données métier | Faible |
| ID | Source | Destination | Port | Proto | Description | Auth | LAN CLS |
|---|---|---|---|---|---|---|---|
| FM-IN-01 | Navigateur collaborateur CLS | flottemobile.groupcls.com (Azure SWA — West Europe) |
443 | HTTPS | Accès à l'application (pages HTML, JS, CSS). Authentification via Azure AD SSO + MFA, ou mot de passe (fallback). | Azure AD SSO + MFA ou mot de passe |
AUCUN |
| FM-IN-02 | Frontend (navigateur) | flottemobile.groupcls.com/api/* (Azure Functions — managed) |
443 | HTTPS | Appels API REST : GET /api/data, POST /api/etl, POST /api/migration | Header x-ms-client-principalou x-auth-password(SSO injecté par Azure, non falsifiable) |
AUCUN |
| ID | Source | Destination | Port | Proto | Description | Auth | LAN CLS |
|---|---|---|---|---|---|---|---|
| FM-OUT-01 | Azure Functions (ETL — /api/etl) |
ai-foundry-cls.cognitiveservices.azure.com (Azure AI Foundry — France Central) |
443 | HTTPS | Appel GPT-4.1-mini pour le matching flou entre noms ADP et appareils Intune lors de la consolidation ETL | API Key (AZURE_AI_KEY) | AUCUN |
| FM-OUT-02 | Azure Functions | login.microsoftonline.com (Azure AD token endpoint) |
443 | HTTPS | Obtention du token OAuth2 (client_credentials grant) pour envoi email via Graph API Tenant : cfb22cb5-ed63-4518-b2ef-aeb539d18da7 |
Client ID + Client Secret | AUCUN |
| FM-OUT-03 | Azure Functions | graph.microsoft.com POST /v1.0/users/{userId}/sendMail |
443 | HTTPS | Envoi email notification (si nécessaire) From : CLSWorkflow@groupcls.com |
Bearer token OAuth2 (permission Mail.Send) |
AUCUN |
| ID | Source | Destination | Description | Sécurité |
|---|---|---|---|---|
| FM-INT-01 | Azure SWA | Azure AD (login.microsoftonline.com) |
Redirection authentification SSO. Protocole OpenID Connect. Le navigateur est redirigé vers Azure AD, l'utilisateur s'authentifie avec MFA, puis retour vers la SWA avec un cookie de session. |
OAuth2 / OIDC / TLS 1.2+ |
| FM-INT-02 | Azure Functions | PostgreSQL Flexible Server pg-n8n-labs-cls.postgres.database.azure.com:5432 |
Lecture et écriture des données de la flotte mobile. Table lignes_mobiles : données consolidées (ADP + Intune + tarifs).Table plan_migration : planning de migration des lignes.Connexion via pg Pool (Node.js). |
Connection string (PG_USER + PG_PASSWORD) SSL obligatoire TLS 1.2+ Chiffrement au repos Azure |
| Mesure | Implémentation |
|---|---|
| Authentification | Azure AD SSO (provider intégré SWA). MFA appliquée par la politique Azure AD CLS. Fallback par mot de passe (header x-auth-password) pour les SWA identity.7 qui n'ont pas encore le SSO complet. Aucune page accessible sans authentification (sauf redirection vers login). |
| Autorisation | Vérification de l'identité dans chaque endpoint API via le header x-ms-client-principal (SSO) ou x-auth-password (fallback). Le header SSO est injecté par le reverse proxy Azure et ne peut pas être falsifié par le client.GET /api/data : utilisateurs authentifiés (EADM, DSI). POST /api/etl : administrateurs uniquement. POST /api/migration : utilisateurs authentifiés (EADM, DSI). |
| Chiffrement en transit | TLS 1.2+ sur tous les flux (navigateur ↔ SWA, Functions ↔ PostgreSQL, Functions ↔ AI Foundry, Functions ↔ Graph API). Certificat TLS géré automatiquement par Azure. SSL obligatoire sur PostgreSQL. |
| Chiffrement au repos | PostgreSQL Flexible Server : chiffrement au repos par défaut (Azure-managed keys). AI Foundry : aucun stockage de données (opt-out training par défaut). |
| En-têtes HTTP | X-Frame-Options: DENY (anti-clickjacking)X-Content-Type-Options: nosniff (anti-MIME sniffing)Configurés dans staticwebapp.config.json (globalHeaders). |
| Secrets | PG_HOST, PG_USER, PG_PASSWORD, AZURE_AI_KEY, GRAPH_CLIENT_ID, GRAPH_CLIENT_SECRET, APP_PASSWORD stockés dans les Application Settings de la SWA (chiffrés au repos). Jamais dans le code source. |
| Intelligence artificielle | Azure AI Foundry dans le même tenant CLS, région France Central. Opt-out training par défaut : aucune donnée utilisée pour l'entraînement du modèle. Modèle utilisé uniquement pour le matching flou de noms lors de l'ETL. |
| Isolation réseau | Aucun flux vers le LAN CLS. PostgreSQL accessible uniquement depuis les Azure Functions (même Resource Group). AI Foundry accessible via API Key sur HTTPS uniquement. |
| Audit | Azure AD sign-in logs (connexions SSO). Azure Monitor (requêtes API). GitHub Actions (historique déploiements). Chaque import ETL est daté (date_import dans la base). |
| Backup | PostgreSQL Flexible Server : backup automatique Azure (rétention 7 jours, point-in-time restore). Code source : GitHub (historique complet). |
| URL | Méthode | Auth requise | Description |
|---|---|---|---|
/api/data?date=YYYY-MM-DD | GET | SSO ou mot de passe | Données dashboard : lignes mobiles, plan migration, statistiques, dates disponibles |
/api/etl | POST | SSO ou mot de passe | ETL upload : consolidation fichiers ADP/Intune/Tarifs avec matching IA |
/api/migration | POST | SSO ou mot de passe | CRUD plan de migration : fetch, add, update, delete (action dans le body) |
/.auth/login/aad | GET | — | Redirection vers Azure AD (géré par SWA) |
/.auth/me | GET | Cookie | Identité de l'utilisateur connecté (géré par SWA) |
/api/* rejettent les requêtes sans le header x-ms-client-principal (SSO) ou x-auth-password valide (HTTP 401). Le header SSO est injecté uniquement par Azure après authentification réussie.
| Catégorie | Nombre | Protocole | Ports | Impact LAN CLS |
|---|---|---|---|---|
| Flux entrants | 2 | HTTPS | 443 uniquement | AUCUN |
| Flux sortants | 3 | HTTPS | 443 uniquement | AUCUN |
| Flux intra-Azure | 2 | HTTPS / TLS | 443, 5432 | Interne Azure |
| Total | 7 flux | HTTPS / TLS uniquement | 443 + 5432 uniquement | ZERO flux LAN |