10 — Load Balancing & Edge Security
Distribuer le trafic + sécuriser les accès au périmètre Azure :
- Load Balancing : LB (L4), App Gateway (L7 régional), Front Door (L7 global), Traffic Manager (DNS global)
- Edge Security : Azure Firewall (filtre L3-L7), Azure Bastion (RDP/SSH sans Public IP)
A. Décider : quel service de load balancing ?
| Azure LB | App Gateway | Front Door | Traffic Manager | |
|---|---|---|---|---|
| Layer | L4 (TCP/UDP) | L7 (HTTP/S) | L7 (HTTP/S) | DNS (L7 logique) |
| Scope | Régional | Régional | Global | Global |
| WAF | ❌ | ✅ (v2) | ✅ (Premium) | ❌ |
| SSL termination | ❌ | ✅ | ✅ | ❌ |
| URL path routing | ❌ | ✅ | ✅ | ❌ |
| CDN / caching | ❌ | ❌ | ✅ | ❌ |
| Failover speed | Instant (LB) | Instant | Instant (anycast) | Lent (TTL DNS) |
Règle d'or AZ-104 : multi-region + L7 + WAF + CDN → Front Door. Single-region L7 → App Gateway. Trafic non-HTTP (DB, IoT, gaming) → LB. Active-passive simple cross-region → Traffic Manager.
B. Azure Load Balancer
L4 (TCP/UDP), distribue le trafic vers un backend pool (VMs, VMSS, NICs). Très haute perf, faible latence.
Types
| Public LB | Internal LB (ILB) | |
|---|---|---|
| Frontend | Public IP | Private IP (dans un VNet) |
| Use case | Exposer un service à internet | Load balance interne (tier app vers DB, etc.) |
SKUs
| SKU | Statut | Note |
|---|---|---|
| Standard ⭐ | Actif (recommandé) | AZ support, HA Ports, default deny outbound, secured by NSG |
| 🚨 Retiré 30 sept 2025 | Plus de création possible. Migrer vers Standard |
Le SKU du LB doit matcher celui de la Public IP + des VMs en backend.
Backend pool — règles à connaître (piège exam)
Pour attacher une VM au backend pool d'un Standard LB :
- ✅ La VM peut être en état Stopped (Deallocated ou Running)
- ✅ La VM peut ne pas avoir de Public IP (le LB sert de frontend)
- ⚠️ Si la VM a une Public IP, son SKU doit matcher celui du LB (Public IP Standard ↔ LB Standard, Basic ↔ Basic)
- → Pour résoudre un mismatch : upgrade la Public IP en Standard, OU retire la Public IP de la VM (la VM peut être attachée sans Public IP)
Composants
| Composant | Rôle |
|---|---|
| Frontend IP | IP publique ou privée d'entrée (1+ par LB) |
| Backend pool | NICs ou IPs de VMs/VMSS qui reçoivent le trafic |
| Health probe | TCP / HTTP(S) → tester la santé des backends, sortir les unhealthy |
| Load balancing rule | Mapping Frontend:Port → Backend:Port (avec session persistence, idle timeout) |
| Inbound NAT rule | Forwarding Frontend:Port → 1 backend spécifique:Port (ex SSH/RDP par instance) |
| Outbound rule | Définir le SNAT outbound des backends |
Outbound (piège classique)
- Standard LB bloque outbound par défaut → besoin d'outbound rule OU NAT Gateway sur le subnet.
- 🚨 Default outbound access des nouveaux VNets retiré après 31 mars 2026 → MS pousse NAT Gateway comme méthode standard.
Algorithmes de distribution
- 5-tuple hash (default) : src IP + src port + dst IP + dst port + protocol → distribue.
- Source IP affinity (2-tuple ou 3-tuple) : sticky session par IP source.
- HA Ports (Standard only) : load-balance tous les ports simultanément (utilisé pour NVA actives-actives).
Distribution mode (session persistence)
- None : default
- Client IP : 2-tuple (src IP + dst IP)
- Client IP + Protocol : 3-tuple
C. Application Gateway
L7 (HTTP/HTTPS/HTTP/2/WebSockets) régional, dans ton VNet. Routing avancé + WAF.
SKUs
| SKU | Statut | Note |
|---|---|---|
| 🚨 Retraite 28 avril 2026 | Migrer vers v2 | |
| Standard v2 | Recommandé | Auto-scale, AZ, header rewrite, faster provisioning |
| WAF v2 | Recommandé sécu | Standard v2 + WAF (OWASP Core Rule Set, custom rules, bot manager) |
Architecture
Client → Frontend IP (Public/Private)
↓
Listener (HTTP/HTTPS, port, host header) — termine SSL ici
↓
Routing rule (Basic ou Path-based)
↓
Backend HTTP setting (port, protocol, timeout, probe)
↓
Backend pool (VMs, VMSS, App Service, IPs, FQDNs)
Composants clés
- Listener : ce qu'écoute l'AGW (port, protocol, host header pour multi-site).
- Backend pool : VMs / VMSS / App Service / IPs / FQDN.
- HTTP settings : comment l'AGW parle au backend (port, probe, cookie affinity, override host header).
- Rules :
- Basic : 1 listener → 1 backend pool
- Path-based :
/api/*→ pool A,/images/*→ pool B
- Probes : custom (path, intervalle, threshold) — checker la santé.
- Rewrite rules : modifier headers/URL en flight.
Features importantes
- SSL termination : décharge SSL côté AGW, trafic HTTP en interne (ou re-encrypt SSL en backend).
- End-to-end SSL : SSL re-chiffré vers le backend.
- WebSocket / HTTP/2 : supportés.
- Multi-site hosting : un seul AGW pour
app1.com,app2.com(via host header). - Autoscaling v2 : min/max instances, instances facturées par capacity unit (CU).
- Subnet dédié dans le VNet (réservé à l'AGW,
/27minimum). - AGIC (App Gateway Ingress Controller) pour AKS.
💡 App Gateway mode interne (ILB-like L7) : App Gateway peut avoir un Frontend IP privé (au lieu de public) → fonctionne comme un ILB L7 pour des apps LOB accessibles uniquement depuis VNet, VNets peerés, ou on-prem (via VPN/ER).
Use case typique : LB du trafic on-prem multi-sites (S2S VPN) vers backend VMSS Azure avec routing L7 + SSL termination, sans exposer publiquement. Pour ce scénario → App Gateway interne OU Internal LB (L7 vs L4 selon besoin).
WAF v2
- OWASP Core Rule Set (3.2 / 3.1 / 3.0) — règles préconfigurées contre injection SQL, XSS, etc.
- Custom rules : whitelist IP, geo-block, rate limit (preview).
- Bot Manager : block bad bots.
- Modes : Detection (log only) ou Prevention (block).
D. Azure Front Door
L7 global (anycast, edge MS dans 100+ POPs). Fait : load balancing global + CDN + WAF global + SSL offload.
SKUs
| SKU | Description |
|---|---|
| Standard | LB global + CDN + custom domain + SSL |
| Premium ⭐ | Standard + WAF Premium + Private Link (vers backend privés) + Bot Manager + Microsoft-managed rules |
| Legacy, en sunset |
Use cases
- App multi-region : route les utilisateurs vers le backend régional le plus proche.
- Static + dynamic content acceleration.
- Failover global (region down → bascule vers la suivante).
- WAF global au plus proche de l'attaquant (avant que la requête atteigne le backend).
Routing methods
| Méthode | Description |
|---|---|
| Latency | Backend le plus rapide (default) |
| Priority | Active-passive (backup pool) |
| Weighted | A/B testing, blue/green |
| Session affinity | Stick cookie sur backend |
Architecture
- Endpoint : URL globale
<name>.azurefd.net(ou custom domain). - Origin group : pool de backends (App Service, VM, Storage static site, AGW, IP arbitraire).
- Origin : un backend individuel (avec health probe, priority, weight).
- Route : matche un pattern (
/api/*) → origin group.
Front Door + Private Link (Premium)
- Backend privé (App Service avec PE, Storage avec PE, ILB) accessible depuis Front Door sans l'exposer publiquement.
- Approval workflow.
Pour AZ-104 : retenir Front Door = global + WAF + CDN. Souvent utilisé devant App Gateway pour combo edge + régional.
E. Traffic Manager
DNS-based load balancer global. Renvoie l'IP du backend le plus approprié à chaque résolution DNS.
Routing methods
| Méthode | Use case |
|---|---|
| Priority | Failover : 1 primary, N backups |
| Weighted | Distribution % entre endpoints |
| Performance | Latence la plus faible (region la plus proche) |
| Geographic | Géo-routing strict (ex: France → backend FR uniquement) |
| MultiValue | Renvoie plusieurs IPs (client choisit) |
| Subnet | Mapping subnets → endpoints |
Limites par rapport à Front Door
- Failover lent (dépend du TTL DNS, default 60s+).
- Pas de SSL termination, pas de WAF, pas de CDN.
- Le client va directement au backend (pas de proxy au milieu).
Quand préférer Traffic Manager à Front Door
- Trafic non-HTTP (TCP/UDP).
- Backend hors Azure (sites on-prem, autres clouds).
- Geographic routing strict (compliance).
F. Azure Firewall
Pare-feu stateful L3-L7 managé, avec haute dispo intégrée. Souvent utilisé en hub dans une architecture hub-and-spoke pour filtrer le trafic egress + east-west.
SKUs
| SKU | Use case | Features |
|---|---|---|
| Basic | SMB / dev | L3-L7, throughput limité (~250 Mbps), pas de IDPS |
| Standard | Prod générale | L3-L7, threat intelligence, FQDN tags, DNAT/SNAT |
| Premium ⭐ | Sécu avancée | Standard + TLS Inspection, IDPS, URL filtering, web categories |
Composants
- Firewall policy (recommandé) : ressource séparée qui contient les règles, héritable (parent → enfant).
- Rule collections dans la policy :
- DNAT rules : forwarding inbound (Public IP firewall → IP privée backend)
- Network rules : L3-L4 (IP / Port / Protocol)
- Application rules : L7 (FQDN, FQDN tags, web categories en Premium)
- Priority dans collections : 100-65000.
- Default action : Deny.
FQDN Tags (Standard+)
Préconfigurés MS (similaire aux Service Tags NSG mais L7) :
WindowsUpdate,WindowsDiagnostics,MicrosoftActiveProtectionService,AppServiceEnvironment,AzureKubernetesService, etc.
Threat Intelligence (Standard+)
- Block / alert sur des IPs/domains malveillants connus (feed MS).
- Modes :
Off,Alert only,Alert and deny.
TLS Inspection (Premium uniquement)
- Décrypte HTTPS sortant, inspecte, re-chiffre.
- Nécessite : KV avec un certificat root + Managed Identity du firewall.
Subnet
- Dédié :
AzureFirewallSubnet(/26minimum, pas de NSG dessus). - Pour Forced Tunneling (Standard+) :
AzureFirewallManagementSubnetadditionnel.
Vs NSG
| NSG | Azure Firewall | |
|---|---|---|
| Layer | L3-L4 | L3-L7 |
| Scope | NIC ou Subnet | Subnet (via UDR) |
| Stateful | ✅ | ✅ |
| FQDN filtering | ❌ | ✅ |
| TLS Inspection | ❌ | ✅ (Premium) |
| Logging centralisé | Pas natif | Oui (Log Analytics) |
| Coût | Gratuit | $$$ |
Combo classique : NSG sur subnets pour le micro-segmentation interne + Azure Firewall en hub pour le trafic nord-sud.
G. Azure Bastion
RDP / SSH vers tes VMs Azure depuis le portail web, sans Public IP sur les VMs et sans VPN. Sécurise drastiquement l'accès admin.
Architecture
- Service déployé dans un VNet (subnet dédié
AzureBastionSubnet,/26minimum). - Tu te connectes via le portail Azure → Bastion ouvre une session SSL/HTML5 vers la VM en privé.
- VM accessible via Bastion sur tous les VNets peerés.
SKUs
| SKU | Instances | Capacité par instance | Features clés |
|---|---|---|---|
| Developer | Partagé MS | 1 conn max | Gratuit, partagé, pas de scaling. Dev/test only |
| Basic | 2 instances fixes | ~20 RDP / ~40 SSH | RDP/SSH via portail uniquement, pas de host scaling |
| Standard ⭐ | 2 à 50 (host scaling) | ~20 RDP / ~40 SSH par instance | Basic + native client (az network bastion), shareable links, IP-based, custom ports, file transfer SCP/RDP |
| Premium | 2-50 | Idem Standard | Standard + session recording (compliance), private-only deployment |
🚨 Piège exam : pour accommoder >40 users RDP simultanés il faut :
- Upgrade SKU Basic → Standard (étape first ; sans ça pas de scaling possible)
- Increase instance count (ex 5 instances × 20 RDP = 100 simultanés)
⚠️ Upgrade Basic → Standard est IRRÉVERSIBLE (pas de downgrade possible). Réfléchir avant.
Calcul rapide : ~20 RDP ou ~40 SSH par instance → si 90 users RDP → besoin 5 instances minimum (5×20=100 RDP).
Sécurité
- VMs cibles n'ont pas besoin de Public IP → réduction surface d'attaque.
- NSG sur la VM bloque RDP/SSH depuis Internet → seul Bastion (depuis
AzureBastionSubnet) y accède. - Auth = Entra ID (avec RBAC) ou local user de la VM.
Subnet
AzureBastionSubnet(nom obligatoire,/26minimum).- Pas de NSG strict requis (Bastion gère sa propre sécurité), mais possible avec règles spécifiques MS.
DEMO — chemins portail
Standard Load Balancer
Load balancers > Create > SKU: Standard, Type: Public/Internal- Frontend IP : nouvelle Public IP Standard ou IP privée
- Backend pool : add VMs / VMSS
- Health probe : TCP/HTTP path
- LB rule : frontend port → backend port (avec persistence, idle timeout)
- Outbound : créer outbound rule OU attacher NAT GW au subnet backend
Inbound NAT rule (RDP/SSH par VM via LB)
LB > Inbound NAT rules > Add- Service
Custom, frontend port unique (ex 50001), target VM, target port 3389 - Tester
mstsc <lb-ip>:50001
Application Gateway v2
Application Gateways > Create > Tier: Standard v2 ou WAF v2- Onglet Configuration :
- Frontend IP (Public et/ou Private)
- Backend pool : VMs/VMSS/App Service/IP
- Routing rule : Listener (HTTP/HTTPS) → Backend pool + HTTP settings
- HTTP settings : port backend, probe, cookie affinity
- Subnet dédié dans le VNet (
/27minimum, vide) - Pour WAF v2 :
WAF policy— choisir mode Detection ou Prevention, OWASP CRS
App Gateway — path-based routing
- Créer plusieurs backend pools (
api-pool,images-pool) Listeners > Add: 1 listener HTTPS port 443Rules > Add path-based rule:/api/*→ api-pool/images/*→ images-pool- default → main-pool
Front Door Standard/Premium
Front Door and CDN profiles > Create > Custom create- Endpoint :
<name>.azurefd.net - Origin group : add origins (ex App Service, AGW, Storage static site)
- Routes : pattern
/*→ origin group, caching on/off, compression - Custom domain : ajouter le domaine + valider via TXT record + bind cert
- WAF Premium : créer une WAF policy Front Door + attacher à l'endpoint
Traffic Manager
Traffic Manager profiles > Create- Choisir routing method (Priority, Weighted, Performance, Geographic, etc.)
- Add endpoints : Azure (App Service, Public IP, Cloud Service) ou External (FQDN)
- Health monitoring : protocol, port, path, interval
- Tester avec
nslookup <profile>.trafficmanager.net
Azure Firewall
- Subnet : créer
AzureFirewallSubnet(/26) dans le VNet hub Firewalls > Create > SKU: Basic/Standard/Premium- Choisir Firewall Policy (créer une nouvelle)
- Rule collections dans la policy :
- DNAT :
Public IP:8080 → 10.1.0.4:80 - Network :
10.0.0.0/8 → Internet ports 443 Allow - Application :
*.windowsupdate.com Allowou FQDN tagWindowsUpdate
- DNAT :
- UDR sur les subnets spokes :
0.0.0.0/0 → Next hop = Virtual Appliance, IP du firewall
Azure Firewall Premium — TLS Inspection
- Créer un Key Vault avec certificat root + Managed Identity
Firewall Policy > TLS inspection > Enable→ choisir le KV + cert- Ajouter une
Application Rule Collectionavec TLS inspection enabled
Azure Bastion
- Subnet : créer
AzureBastionSubnet(/26exact name,/26minimum) dans le VNet Bastions > Create > SKU: Developer/Basic/Standard/Premium- Public IP Standard (auto)
- Pour Standard+ : choisir scale units (2-50), file transfer
- Connexion :
VM > Connect > Bastion→ user/password ou SSH key (ou Entra ID si Standard+)
Bastion + Entra ID auth (Standard+)
- VM Linux : installer Entra ID login extension
- RBAC : assigner
Virtual Machine Administrator LoginouVirtual Machine User Login - Connect via Bastion → choisir Entra ID
🏢 Scenarios d'entreprise réels — pensée d'architecte
Comment ces services s'utilisent dans la vraie vie. Pour chaque scenario : contexte business → choix techniques (uniquement les services traités dans la fiche) → pièges typiques.
Scenario 1 : E-commerce mono-région avec checkout sécurisé
Contexte business : retailer FR (~2M visites/mois) — site web Magento sur VMSS, paiement via PSP externe. Besoin de filtrage WAF (carte = cible #1), SSL termination centralisée, routing /checkout/* vers un pool VM dédié (instances plus grosses, isolation perf).
Choix techniques : App Gateway WAF v2 en frontal + Internal LB (Standard) entre tier app et tier DB read-replicas. Pas besoin de Front Door (single region, pas de CDN critique).
Architecture / pattern :
- AGW WAF v2 public (Prevention mode, OWASP CRS 3.2) → path-based routing
/checkout/*→ pool premium, reste → pool standard - HTTP settings : re-encrypt SSL end-to-end vers backend (PCI DSS)
- Health probe custom
/health(pas/qui retourne 200 même si DB down) - ILB Standard derrière pour load balance les lectures vers SQL replicas (port 1433) Pièges à éviter :
- AGW subnet dédié
/27minimum vide — pas de NSG bloquant les ports MS de management (65200-65535 v2) - Oublier d'activer WAF en Prevention (rester en Detection = log only, aucune protection réelle)
- Public IP Standard obligatoire pour AGW v2 (Basic refusé)
Scenario 2 : SaaS B2B multi-tenant (40+ domaines clients)
Contexte business : éditeur SaaS RH — chaque client a son sous-domaine (client1.app.com, client2.app.com…). 1 codebase, isolation logique par tenant. Veut centraliser TLS + WAF + scaling auto.
Choix techniques : App Gateway WAF v2 avec multi-site hosting (jusqu'à 100+ sites sur 1 AGW), 1 listener HTTPS multi-site par host header, WAF policy custom par site sensible.
Architecture / pattern :
- 1 listener
Multi-siteHTTPS port 443 avec SNI → matche le host header - 1 routing rule par client (ou wildcard
*.app.com+ rewrite rule pour extraire le tenant) - WAF policy globale
OWASP CRS 3.2+ WAF policies spécifiques sur les sites VIP (mode Prevention strict) - Autoscaling v2 : min 2 / max 20 instances → encaisse les pics paie de fin de mois Pièges à éviter :
- Limite 40 sites WAF par AGW (au-delà : 2e AGW, pas un seul géant) — au-delà → Front Door
- Certificats : monter via KV reference + Managed Identity AGW (pas upload manuel renouvelable à la main)
- v1 Standard/WAF en retraite 28 avril 2026 → si legacy, migrer v2 maintenant
Scenario 3 : Gaming studio — backend matchmaking UDP
Contexte business : studio mobile gaming — serveurs matchmaking proprio (UDP 30000-30100), 50K joueurs concurrents, besoin throughput max + latence ultra-faible. Pas de HTTP, pas de SSL côté LB. Choix techniques : Public Standard LB (L4 TCP/UDP, millions de flux), HA Ports pour NVA active-active si firewall maison, outbound rule explicite + NAT Gateway pour SNAT massif. Architecture / pattern :
- LB Standard avec frontend Public IP Standard + backend pool VMSS (50+ VMs game servers)
- Load balancing rule UDP avec Source IP affinity (2-tuple) : un joueur reste sur le même serveur pendant sa session
- Health probe TCP custom port 30099 (UDP n'a pas de probe natif) — l'app expose un endpoint TCP de health
- NAT Gateway sur le subnet pour outbound télémétrie (vers Application Insights, etc.) Pièges à éviter :
- Basic LB retiré 30 sept 2025 : si vieux script utilise
Standard_LBSKU = Basic implicite → migration obligatoire avant - Standard LB bloque outbound par défaut : sans outbound rule ni NAT GW les VMs ne peuvent pas faire de DNS → silent fail
- Front Door inutile ici (UDP non supporté). Pour DR cross-region : Traffic Manager (DNS-based, supporte UDP en routant l'IP de destination)
Scenario 4 : Application LOB interne (banking, accès on-prem uniquement)
Contexte business : banque régionale — app intranet (ressources humaines, paie). Accès uniquement depuis le réseau corporate via ExpressRoute. Besoin de routing L7 + WAF (compliance) sans aucune exposition publique. Choix techniques : App Gateway interne (Frontend IP privé) + Azure Bastion Standard pour accès admin VMs backend (jamais de Public IP sur les VMs). Architecture / pattern :
- AGW v2 WAF avec Frontend Private IP dans subnet dédié (
/27) - ExpressRoute → on-prem clients atteignent l'IP privée AGW
- WAF en Prevention même en interne (defense in depth — un attaquant insider passe par là)
- Bastion Standard (host scaling 2-5 instances) dans
AzureBastionSubnet /26pour admin VMs sans IP publique, audit Entra ID Pièges à éviter : - Croire que "interne = pas besoin de WAF" → un poste compromis sur le LAN bypass tout
- Upgrade Bastion Basic → Standard irréversible : choisir Standard d'emblée si >40 sessions RDP simultanées prévues
- AGW interne + DNS : besoin d'une Private DNS Zone pour résoudre
app.corp.localvers l'IP privée AGW (sinon clients on-prem ne trouvent pas)
Sources :