Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

🌐 Amazon CloudFront (CDN & Edge Network)

Guide IDEO-Lab : Distribution de contenu (Web, APIs, Vidéo), Caching, Sécurité WAF/Shield & Intégrations S3 / ALB / API Gateway.

1.1

Concept : CDN Global & Edge

CloudFront est un CDN mondial, avec des Edge Locations proches des utilisateurs pour réduire la latence.

CDN Edge
1.2

Concept : Origins & Behaviors

Association des chemins d’URL aux origines (S3, ALB, API, Custom) via les Cache Behaviors.

Origins Behaviors
1.3

Concept : Cache & TTL

Durée de vie du contenu, prise en compte des headers, cookies et query strings.

TTL Cache Policy
2.1

Sécurité : HTTPS & TLS

Certificats ACM, redirection HTTP→HTTPS, politiques TLS modernes.

ACM TLS 1.2+
2.2

Sécurité : Contenu Privé

Signed URLs & Signed Cookies pour restreindre l’accùs à certains fichiers (VOD, documents payants).

Private Content Signed URL
2.3

Sécurité : WAF & Shield

Protection DDoS (Shield) et filtrage applicatif (WAF, rÚgles gérées & IP sets).

AWS WAF Shield
3.1

Perf : Edge & Latence

Anycast, réseau AWS, Regional Edge Caches et impact sur le TTFB.

Anycast Latency
3.2

Perf : Policies de Cache

Gestion fine des cookies, headers et query strings pour booster le cache hit ratio.

Cache Policy Hit Ratio
3.3

Use Case : Site statique S3

Architecture simple : S3 privé + Origin Access Control + CloudFront + Route53.

S3 Static Website
4.1

Use Case : API REST

CloudFront devant API Gateway ou ALB pour gérer cache, WAF et TLS globale.

API Gateway ALB
4.2

Use Case : Streaming Vidéo

Distribution HLS/DASH, segmentation, et multi-régions pour une VOD performante.

HLS VOD
5.1

Tarification CloudFront

Data Transfer, nombre de requĂȘtes, invalidations et bonnes pratiques FinOps.

Billing FinOps
8. ÉcosystĂšme : IntĂ©grations Services AWS
Le Duo Incontournable : S3 + CloudFront

L'intégration native pour héberger des sites statiques, des images ou des documents.

Architecture Sécurisée (OAC)
  • Bucket PrivĂ© : "Block Public Access" doit ĂȘtre sur ON.
  • OAC (Origin Access Control) : Le mĂ©canisme moderne qui remplace OAI. Il signe les requĂȘtes vers S3 (SigV4).
  • Transfer Acceleration : Inutile si vous utilisez CloudFront (car l'upload passe par l'Edge).
Bucket Policy Requise

Le bucket doit autoriser CloudFront explicitement.

                            {
                            "Effect": "Allow",
                            "Principal": { "Service": "cloudfront.amazonaws.com" },
                            "Action": "s3:GetObject",
                            "Resource": "arn:aws:s3:::mon-bucket/*",
                            "Condition": {
                            "StringEquals": {
                            "AWS:SourceArn": "arn:aws:cloudfront::ACC_ID:distribution/DIST_ID"
                            }
                            }
                            }
Optimiser API Gateway avec CloudFront
PiĂšge d'Architecture : Si vous mettez CloudFront devant API Gateway, vous DEVEZ configurer votre API Gateway en mode REGIONAL.
Type d'API GatewayComportementVerdict avec CloudFront
Edge-OptimizedUtilise déjà une distribution CloudFront gérée par AWS (invisible).Mauvais
Double saut (CloudFront -> CloudFront AWS -> API). Latence ajoutée.
RegionalDéployé dans la région spécifique (ex: eu-west-3). Pas de CDN intégré.Parfait
Architecture propre : Client -> Votre CloudFront -> API Gateway Regional.
Avantages de cette stack :
  • Caching : Mettre en cache les rĂ©ponses GET coĂ»teuses directement Ă  l'Edge (Ă©conomise des invocations Lambda).
  • Timeout : CloudFront permet de gĂ©rer des timeouts diffĂ©rents (jusqu'Ă  60s) avant de couper la connexion.
Protéger vos Serveurs (ALB / EC2)

CloudFront agit comme un bouclier devant votre Load Balancer.

La Sécurité "Custom Header"

EmpĂȘchez les attaquants de contourner CloudFront en accĂ©dant directement Ă  l'ALB.

  1. CloudFront : Ajouter un header origine X-Origin-Secret: s3cr3t-k3y.
  2. ALB Listener : RĂšgle "Si header X-Origin-Secret != s3cr3t-k3y, alors renvoyer 403".
SSL/TLS Offloading
  • Client -> CloudFront : HTTPS (Certificat ACM Public).
  • CloudFront -> ALB : HTTPS (Certificat ACM Public ou PrivĂ©).
  • Note : CloudFront maintient des connexions TCP persistantes (Keep-Alive) avec l'ALB, rĂ©duisant la charge CPU du handshake SSL sur vos serveurs.
Le Pipeline Vidéo AWS (VOD & Live)

CloudFront est le dernier maillon de la chaĂźne AWS Media Services.

ServiceRÎleIntégration CloudFront
MediaConvertTranscodage VOD (MP4 -> HLS/DASH).Dépose les segments (.ts) dans S3. CloudFront les lit depuis S3.
MediaPackagePackaging "Just-in-Time" (JITP) et DRM.Agit comme une Origine HTTP pour CloudFront. CloudFront cache les segments générés dynamiquement.
MediaStoreStockage optimisé pour le Live (faible latence).Origine haute performance pour CloudFront (supporte les écritures/lectures concurrentes massives).
Authentification Ă  l'Edge avec Cognito

CloudFront ne supporte pas nativement Cognito (contrairement Ă  l'ALB). Il faut ajouter de l'intelligence.

Solution 1 : Lambda@Edge Authorizer

Une fonction Node.js sur l'événement Viewer Request.

  1. Intercepte la requĂȘte.
  2. Vérifie le cookie/header JWT.
  3. Valide le token auprÚs de Cognito (clé publique).
  4. Si invalide, redirige vers la page de Login Cognito (Hosted UI).
Solution 2 : CloudFront + ALB + Cognito

Si vous avez un ALB derriÚre, laissez l'ALB gérer l'auth.

  • CloudFront : "CachingDisabled" (Forward tout).
  • ALB : Listener Rule "Authenticate with Cognito".
  • Moins cher et plus simple, mais pas de cache possible pour le contenu privĂ©.
7. Avancé : Compute @ Edge & Logique Custom
Choisir son arme : CloudFront Functions vs Lambda@Edge

Ne sortez pas le bazooka (Lambda) pour tuer une mouche. Voici le guide de décision définitif.

CaractéristiqueCloudFront Functions (CFF)Lambda@Edge (L@E)
Use CaseManipulations légÚres : Headers, Rewrite URL, Redirections, validation JWT basique.Logique lourde : AccÚs réseau (API externe), manipulation du Body, Redimensionnement d'image.
RuntimeJavaScript (ES5.1 strict). Pas de Node.js.Node.js ou Python. AccĂšs Ă  tout le SDK AWS.
Latence< 1 ms (Exécution au PoP).~50 ms à 100 ms (Exécution au Regional Edge Cache). Risque de Cold Start.
CoûtTrÚs faible
0.10$ / million.
ÉlevĂ©
0.60$ / million + Coût durée (GB-secondes).
TriggersViewer Request / Viewer Response.Viewer Req/Res + Origin Req/Res.
CloudFront Functions : La vitesse pure

Code JS minimaliste exĂ©cutĂ© sur les 600+ Edge Locations. IdĂ©al pour normaliser les requĂȘtes avant le cache.

Exemple 1 : Normalisation de Cache (SEO)

Rediriger /about/ vers /about (ou l'inverse) pour éviter le duplicate content.

                            function handler(event) {
                            var request = event.request;
                            var uri = request.uri;

                            // Si l'URL finit par "/" et n'est pas la racine
                            if (uri.endsWith('/') && uri.length > 1) {
                            request.uri = uri.replace(/\/$/, '');
                            // Ou retourner une 301 Redirect
                            return {
                            statusCode: 301,
                            statusDescription: 'Moved Permanently',
                            headers: {
                            "location": { "value": request.uri }
                            }
                            };
                            }
                            return request;
                            }
Exemple 2 : Sécurité (Injection Headers)

Ajouter HSTS et CSP sur toutes les réponses.

                            function handler(event) {
                            var response = event.response;
                            var headers = response.headers;

                            // Ajout HSTS (Force HTTPS 1 an)
                            headers['strict-transport-security'] = 
                            { value: 'max-age=31536000; includeSubdomains' };

                            // Ajout XSS Protection
                            headers['x-content-type-options'] = 
                            { value: 'nosniff' };

                            return response;
                            }
Lambda@Edge : La puissance Node.js

Utilisez L@E quand vous avez besoin de contacter une base de données, une API externe, ou de manipuler des fichiers binaires.

Architecture : Redimensionnement d'image à la volée

Le cas d'usage le plus célÚbre. L'utilisateur demande /img/logo.jpg?w=200. S3 n'a que l'original. L@E génÚre la miniature.

Viewer Request (Client) -> CloudFront -> [CACHE MISS] -> Origin Request (Trigger Lambda@Edge) 1. Vérifie si l'image redimensionnée existe dans S3. 2. Sinon, télécharge l'original, utilise la librairie 'sharp' (Node.js). 3. Redimensionne l'image. 4. Sauvegarde dans S3 (pour la prochaine fois). 5. Renvoie l'image binaire à CloudFront. -> CloudFront met en cache la miniature. -> Viewer Response (Client voit l'image 200px).
Attention aux "Body Triggers" : Si vous activez "Include Body" sur une Lambda@Edge, la limite de payload est de 40KB (Viewer) ou 1MB (Origin). Ne tentez pas de traiter des uploads de fichiers vidéo avec L@E !
Géo-Restriction & Routage Intelligent

Il y a deux façons de gérer la géolocalisation.

1. Le Blocage Brut (Natif)

Configuration dans l'onglet "Security" de la distribution.
Action : Whitelist ou Blacklist de pays.
Résultat : L'utilisateur reçoit une 403 Forbidden (XML Error moche) s'il est dans un pays interdit.
Usage : Embargo, Droits de diffusion stricts.

2. La Redirection (Smart)

Utiliser les headers CloudFront pour guider l'utilisateur sans le bloquer.
Config : Whitelist Header CloudFront-Viewer-Country dans l'Origin Request Policy.

# CloudFront Function pour rediriger if (request.headers['cloudfront-viewer-country']) { var country = request.headers['cloudfront-viewer-country'].value; if (country === 'FR') { // Rediriger vers le site français return { statusCode: 302, headers: { "location": { "value": "/fr/" } } }; } }
Authentification Custom @ Edge

Pour les cas oĂč Signed URLs ne suffisent pas (ex: IntĂ©gration Auth0 / Cognito complexe), on utilise Lambda@Edge sur le Viewer Request.

MéthodeComplexitéDescription
Signed URLs / CookiesMoyenneStandard AWS. Le backend signe, CloudFront vérifie (RSA). TrÚs rapide, pas de code à l'Edge.
Lambda AuthorizerHauteLa Lambda intercepte chaque requĂȘte, dĂ©crypte le JWT Header, valide la signature avec Cognito/Auth0, et renvoie "Allow" ou "Deny".
Attention Ă  la latence et au coĂ»t ! (Ajoute ~50ms Ă  chaque requĂȘte).
2.3 Sécurité : WAF, Shield & Protection DDoS
🎓 Le concept : Le Videur de la Boüte de Nuit

Imaginez que votre application est une boßte de nuit trÚs prisée. CloudFront est la porte d'entrée principale. AWS WAF (Web Application Firewall) est le videur posté juste devant cette porte.

Comment ça marche ?
  1. Le client envoie une requĂȘte (ex: GET /admin).
  2. La requĂȘte arrive Ă  l'Edge Location (le point d'entrĂ©e AWS le plus proche).
  3. Avant de vĂ©rifier si la page est en cache, le WAF inspecte la carte d'identitĂ© de la requĂȘte (IP, User-Agent, Contenu).
  4. Si le WAF dit NON (Block), le client reçoit une erreur 403 Forbidden instantanĂ©ment. Votre serveur (Origin) n'est mĂȘme pas au courant.
Le concept de "Web ACL" & WCU

Une Web ACL (Access Control List) est la "liste des consignes" donnée au videur. Mais attention, le videur a une capacité cérébrale limitée, appelée WCU (Web ACL Capacity Units).

  • CapacitĂ© totale : 1500 WCUs (par dĂ©faut).
  • Une rĂšgle simple (ex: "Bloquer l'IP 1.2.3.4") coĂ»te 1 WCU.
  • Une rĂšgle complexe (ex: "DĂ©tection d'injection SQL intelligente") coĂ»te 200 WCUs.
  • Conseil dĂ©butant : Surveillez votre jauge de WCU quand vous ajoutez des "Managed Rules" AWS.
PiÚge classique du débutant : Pour CloudFront, vous DEVEZ créer votre WAF dans la région US East (N. Virginia) - us-east-1. Si vous le créez à Paris (eu-west-3), vous ne pourrez pas l'attacher à CloudFront !
đŸ› ïž Atelier : CrĂ©er une rĂšgle de Rate Limiting

ScĂ©nario : Un petit malin essaie de deviner vos mots de passe en envoyant 10 000 requĂȘtes par minute sur votre page de login.
Solution : On va dire au WAF : "Si une mĂȘme IP envoie plus de 100 requĂȘtes en 5 minutes sur /login, bloque-la !".

Déchiffrer le JSON (Ligne par ligne)

Voici la traduction humaine de la configuration technique :

  • ScopeDownStatement : "Je ne regarde QUE les requĂȘtes qui..."
  • ByteMatchStatement : "...contiennent le texte '/login'..."
  • RateBasedStatement : "...et je compte combien il y en a par IP."
  • Action Block : "Si ça dĂ©passe 100, je coupe l'accĂšs."
Le Code (PrĂȘt Ă  l'emploi)
                            {
                            "Name": "Protection-BruteForce-Login",
                            "Priority": 0,
                            "Action": { "Block": {} },
                            "VisibilityConfig": {
                            "SampledRequestsEnabled": true,
                            "CloudWatchMetricsEnabled": true,
                            "MetricName": "BruteForceLogin"
                            },
                            "Statement": {
                            "RateBasedStatement": {
                            "Limit": 100,
                            "AggregateKeyType": "IP",
                            "ScopeDownStatement": {
                            "ByteMatchStatement": {
                            "SearchString": "/login",
                            "FieldToMatch": {
                            "UriPath": {}
                            },
                            "TextTransformations": [
                            { "Priority": 0, "Type": "NONE" }
                            ],
                            "PositionalConstraint": "STARTS_WITH"
                            }
                            }
                            }
                            }
                            }
đŸ€– La Guerre des Robots (Bot Control)

Sur Internet, 40% du trafic vient de robots. Certains sont gentils (GoogleBot), d'autres sont méchants (Scrapers, DDOS). AWS WAF propose une fonctionnalité "clé en main" : Bot Control.

CatégorieExemplesAction Recommandée
Verified BotsGooglebot, Bingbot, Pinterest.ALLOW (Laisser passer). Ils référencent votre site.
Common BotsOutils SEO (Ahrefs, Semrush), Curl, Wget.BLOCK ou RATE LIMIT si vous ne voulez pas qu'ils analysent votre site.
Bad BotsScripts de scan de vulnérabilité, Impersonators.BLOCK immédiat.
L'arme ultime : Le CAPTCHA AWS

Parfois, on n'est pas sĂ»r si c'est un humain ou un robot. Au lieu de bloquer bĂȘtement, on lance un dĂ©fi.

  • Action : Au lieu de "Block", choisissez "CAPTCHA".
  • RĂ©sultat : L'utilisateur est redirigĂ© vers une page AWS (interstitielle) oĂč il doit rĂ©soudre un puzzle.
  • SuccĂšs : Si rĂ©ussi, AWS pose un cookie. L'utilisateur est tranquille pendant X minutes (configurable).

Aperçu du workflow

Doute
Puzzle
Cookie
đŸ›Ąïž AWS Shield : L'Assurance Tous Risques

Une attaque DDoS (DĂ©ni de Service DistribuĂ©), c'est comme si 10 000 personnes essayaient de rentrer en mĂȘme temps dans votre magasin pour empĂȘcher les vrais clients d'entrer.

Comparatif : Ai-je besoin de payer 3000$ / mois ?
Shield Standard (Gratuit)
  • ActivĂ© par dĂ©faut pour tout le monde.
  • ArrĂȘte les attaques "brutes" sur le rĂ©seau (Couche 3 & 4).
  • Suffisant pour 90% des sites web classiques.
Shield Advanced (Payant)
  • Pour les entreprises critiques (Banques, E-commerce gĂ©ant).
  • Cost Protection : Si une attaque fait exploser votre facture AWS (scaling auto), AWS vous rembourse.
  • DRT (DDoS Response Team) : AccĂšs direct Ă  une Ă©quipe d'Ă©lite AWS par chat/tel pendant l'attaque pour Ă©crire des rĂšgles WAF Ă  votre place.
đŸ•”ïž Atelier Debug : "Au secours, mon client est bloquĂ© !"

C'est le problÚme n°1 du WAF : les Faux Positifs. Vous avez bloqué un vrai client par erreur. Comment savoir pourquoi ?

Astuce de Pro : N'activez jamais une nouvelle rÚgle en mode BLOCK directement. Mettez-la en mode COUNT pendant 24h. Cela compte les "matchs" sans bloquer personne. Vous pouvez ainsi vérifier dans les graphiques si vous allez bloquer tout le monde ou juste les méchants.
La méthode d'investigation via Athena (SQL)

Si vous avez activé les logs WAF (vers S3), voici comment trouver le coupable :

-- 1. Trouver les requĂȘtes bloquĂ©es (BLOCK) SELECT timestamp, terminatingruleid as REGLE_COUPABLE, httprequest.clientip as IP_CLIENT, httprequest.country as PAYS, httprequest.uri as URL_DEMANDEE FROM waf_logs WHERE action = 'BLOCK' AND from_iso8601_timestamp(timestamp) > now() - interval '1' hour ORDER BY timestamp DESC LIMIT 20;

Interprétation :
Si vous voyez que la rĂšgle REGLE_COUPABLE est "GenericSQLInjection" et que l'URL est /search?query=select, c'est normal (le client tente une injection).
Si l'URL est /blog/article-sur-le-select, c'est un Faux Positif ! Il faut ajouter une exception.

1. Introduction : Comprendre Amazon CloudFront
💡 Comprendre le CDN avec une mĂ©taphore

Imaginez que vous vendez le journal "Le Monde" imprimé à Paris (C'est votre Origine / Serveur).

  • Sans CloudFront : Un client Ă  Tokyo doit prendre l'avion jusqu'Ă  Paris pour acheter son journal. C'est lent, cher, et ça encombre votre imprimerie.
  • Avec CloudFront : Vous envoyez des copies du journal dans des kiosques locaux Ă  Tokyo, New York, Sydney. Le client va au kiosque au coin de sa rue.

CloudFront, c'est ce réseau de kiosques (plus de 600+ Points de Présence) connectés par un réseau privé ultra-rapide (Backbone AWS).

Architecture Physique
  • Edge Locations (PoP) : Les "Kiosques". Il y en a partout (Paris, Marseille, Londres, etc.). Ils servent le contenu aux utilisateurs.
  • Regional Edge Caches : Des "EntrepĂŽts rĂ©gionaux". Si le kiosque n'a pas le journal, il demande Ă  l'entrepĂŽt rĂ©gional (plus gros cache) avant de dĂ©ranger l'imprimerie (Origine).
  • Origin : Votre S3 ou ALB. Il ne travaille que lorsque le contenu est nouveau ou expirĂ©.
Pourquoi est-ce indispensable en Production ?

Déployer une app web sans CloudFront aujourd'hui est considéré comme une erreur d'architecture (Anti-pattern).

1. Performance (Latence)

CloudFront termine la connexion TLS (HTTPS) proche du client. Le "handshake" SSL se fait en 20ms au lieu de 200ms. De plus, le contenu statique est servi depuis la RAM du serveur Edge.

2. Sécurité (DDoS & WAF)

Votre serveur (Origin) est caché dans un réseau privé. Seul CloudFront l'atteint. AWS Shield absorbe les attaques DDoS (couche 3/4) au niveau des Edge, protégeant votre backend d'écrouler.

3. Coût (Data Transfer)

Le transfert de données sortant (DTO) depuis S3 vers Internet coûte cher. Le transfert S3 vers CloudFront est gratuit. Le DTO depuis CloudFront vers Internet est souvent moins cher que depuis EC2/S3.

4. Gestion Certificat ACM

CloudFront gĂšre votre certificat SSL/TLS public gratuitement (via ACM). Pas besoin de configurer Nginx/Apache avec Certbot sur vos serveurs.

Le voyage d'une requĂȘte (Life of a Request)

Comprendre ce flux est vital pour le debugging.

ÉtapeActionDĂ©tail Technique
1DNS ResolutionL'utilisateur demande www.site.com. Route53 renvoie l'IP de l'Edge Location la plus proche (via Latency-based routing).
2Connect & TLSLe navigateur établit une connexion TCP + TLS avec l'Edge.
Gain : Pas de round-trip traversant l'océan.
3Cache CheckCloudFront regarde sa clé de cache (URL + QueryString + Headers choisis).
HIT : Renvoi immédiat. Fin.
MISS : Passage à l'étape 4.
4Origin FetchCloudFront contacte l'origine (S3/ALB) via le Backbone AWS (réseau privé optimisé, pas l'internet public).
5Save & ResponseCloudFront reçoit la réponse, la stocke (si allowed) et la transmet au client.
Comparatif : Hébergement Site Statique

Pourquoi ne pas juste activer "Static Website Hosting" sur S3 ? C'est plus simple, non ?

FonctionnalitéS3 (Static Hosting) seulS3 + CloudFront (Recommandé)
HTTPS / SSL NON (HTTP uniquement ou URL moche s3-website) OUI (Certificat Custom ACM)
PerformanceDépend de la région du bucket (lent si utilisateur loin).Accéléré mondialement (Edge).
SĂ©curitĂ©Le bucket doit ĂȘtre Public (RisquĂ©).Le bucket est PrivĂ© (AccĂšs restreint via OAC).
PersonnalisationAucune logique possible.CloudFront Functions (Redirections, Headers de sécu).
Le Petit Lexique du Débutant CloudFront
  • Distribution
    L'instance de votre CDN. Elle possĂšde un ID (ex: E123456789) et un nom de domaine (ex: d123.cloudfront.net).
  • Origin
    La source de vĂ©ritĂ©. LĂ  oĂč sont vos fichiers originaux (S3) ou votre serveur (ALB).
  • Behavior
    Les rĂšgles de routage. "Si l'URL commence par /images, va vers S3 et cache 24h. Si c'est /api, va vers ALB et ne cache rien."
  • TTL (Time To Live)
    Combien de temps l'objet reste dans le cache avant que CloudFront ne revérifie l'origine. (0s = pas de cache, 31536000s = 1 an).
  • Invalidation
    L'action de forcer la suppression d'un fichier du cache avant l'expiration de son TTL (utile lors d'un déploiement urgent).
  • OAC (Origin Access Control)
    Le "badge de sécurité" que CloudFront montre à S3 pour prouver qu'il a le droit d'accéder aux fichiers privés.
2. Architecture : Le Moteur sous le Capot
La Hiérarchie du Cache AWS

CloudFront n'est pas plat. C'est une structure à double étage pour protéger votre Origine.

  • 1. Client (Utilisateur)
    Fait une requĂȘte DNS. GrĂące Ă  l'Anycast, il est dirigĂ© vers l'IP la plus proche gĂ©ographiquement.
  • 2. Edge Location (Le Kiosque)
    +600 points dans le monde.
    Cache "chaud" (trÚs rapide, petite capacité). Sert le contenu populaire instantanément.
  • 3. Regional Edge Cache (L'EntrepĂŽt)
    ~13 points majeurs.
    Si l'Edge a un "Miss", il demande ici. Ces serveurs ont des disques énormes. Ils gardent le contenu "tiÚde" (longue traßne) pour éviter de taper sur l'Origine.
  • 4. Origin (L'Usine)
    Votre S3 ou EC2.
    N'est sollicité que si le contenu n'est nulle part (ni Edge, ni Regional).
💡 Le saviez-vous ? (Anycast)

Avec CloudFront, tous les utilisateurs du monde tapent sur la mĂȘme adresse IP publique (ou une plage trĂšs rĂ©duite).

C'est le protocole de routage d'Internet (BGP) qui décide : "Toi tu es à Paris, ton chemin le plus court vers cette IP est le datacenter CDG50". "Toi tu es à NY, c'est JFK5".
Résultat : Pas de délai de propagation DNS lors d'un failover mondial.

Origins & Origin Groups (Haute Disponibilité)

Une distribution peut avoir plusieurs sources. Mais comment gérer la panne d'un serveur ?

Type d'OriginUsage RecommandéSpécificité
S3 BucketSite statique, Images, Vidéos.Utiliser OAC (voir onglet 4). Haute performance I/O.
ALB / EC2API, App dynamique (Node, Python).CloudFront garde des connexions persistantes (Keep-Alive) avec l'ALB pour Ă©viter de refaire le handshake SSL Ă  chaque requĂȘte.
MediaStore / MediaPackageStreaming Live (HLS/DASH).Optimisé pour les écritures/lectures simultanées.
Origin Group (Failover Automatique)

Vous pouvez grouper deux origines (Primaire + Secondaire).
Si le Primaire renvoie une erreur (500, 502, 503, 504), CloudFront bascule automatiquement la requĂȘte vers le Secondaire sans que l'utilisateur ne le voie.

Config: - Primary: ALB-Region-A - Secondary: S3-Maintenance-Page (ou ALB-Region-B) - Trigger: HTTP 502, 503, 504
Cache Behaviors : L'Aiguillage Intelligent

Le Behavior est le cƓur logique. Il intercepte l'URL et dĂ©cide : "Quel cache ? Quelle origine ? Quelle sĂ©curitĂ© ?". L'ordre des rĂšgles est CRITIQUE (PrioritĂ© 0 gagne toujours).

PrioritéPath PatternOriginCache PolicyExplication
0/api/payments/*Secure-ALBCachingDisabledPas de cache pour les paiements. On passe tout (Headers, Cookies, QueryString).
1/images/*.jpgS3-AssetsCachingOptimizedCache agressif (1 an). Ignore les cookies pour maximiser le Hit Ratio.
Default*S3-FrontendCachingOptimizedLe "Catch-all". Sert l'index.html de l'application React/Vue.
Concept Clé : La "Cache Key"
CloudFront stocke les objets sous un ID unique : URL + QueryString + Headers configurés.
Attention : Si vous mettez "All QueryStrings" dans la policy, alors /img.jpg?v=1 et /img.jpg?v=2 seront deux objets diffĂ©rents dans le cache. Si vous mettez "None", CloudFront servira le mĂȘme fichier peu importe le `?v=...`.
Verrouiller S3 : OAC vs OAI

Ne laissez jamais votre Bucket S3 "Public". Tout le monde doit passer par la porte d'entrée (CloudFront).

❌ OAI (Origin Access Identity)

ObsolĂšte (Legacy).
Ne supporte pas : SSE-KMS (chiffrement), requĂȘtes POST/PUT vers S3, ni les rĂ©gions opt-in.

✅ OAC (Origin Access Control)

Standard actuel (2024+).
Supporte tout : SSE-KMS, POST/PUT, S3 dans toutes les régions. Plus sécurisé (SigV4).

La Bucket Policy S3 (Copier-Coller)

Voici la politique Ă  mettre sur votre bucket pour n'autoriser QUE votre distribution :

                    {
                    "Version": "2012-10-17",
                    "Statement": {
                    "Sid": "AllowCloudFrontServicePrincipalReadOnly",
                    "Effect": "Allow",
                    "Principal": {
                    "Service": "cloudfront.amazonaws.com"
                    },
                    "Action": "s3:GetObject",
                    "Resource": "arn:aws:s3:::MON-NOM-DE-BUCKET/*",
                    "Condition": {
                    "StringEquals": {
                    "AWS:SourceArn": "arn:aws:cloudfront::123456789012:distribution/E1ABCD2EFGHIJK"
                    }
                    }
                    }
                    }

Remplacez MON-NOM-DE-BUCKET et l'ARN de la distribution (E1ABCD...) par vos valeurs.

1.1 Le Concept : Puissance de l'Edge & Backbone
La réalité physique : Régions vs Edge Locations

Beaucoup confondent les "RĂ©gions AWS" (lĂ  oĂč sont les serveurs) et les "Edge Locations" (lĂ  oĂč sont les utilisateurs).

Régions (33+)

Ex: eu-west-3 (Paris), us-east-1 (Virginie).
C'est là que vous stockez vos données (S3) et lancez vos serveurs (EC2). C'est l'Usine.

Edge Locations (600+)

Ex: Marseille, Lyon, Bordeaux, Munich, Palerme...
Ce sont des points de prĂ©sence lĂ©gers. C'est le Magasin de proximitĂ©. Il y en a partout, mĂȘme dans les pays sans "RĂ©gion AWS".

Pourquoi cette distinction ?

La vitesse de la lumiÚre est finie. Un paquet réseau met ~150ms pour faire Paris -> Tokyo (aller-retour).

Le but de CloudFront : Casser cette latence physique en servant le contenu depuis un point situĂ© Ă  moins de 10ms de l'utilisateur, peu importe oĂč il se trouve.

Le secret de la vitesse : "TLS Termination at Edge"

CloudFront ne sert pas juste à mettre en cache. Il accélÚre aussi les contenus dynamiques (API) grùce à la physique des connexions.

PhaseSans CloudFront (Direct S3/EC2)Avec CloudFront
1. Handshake TCP/IP
(Se dire "Bonjour")
Le client (Japon) fait 3 allers-retours vers le serveur (Paris).
Latence : 150ms x 3 = 450ms
Le client (Japon) fait 3 allers-retours vers l'Edge (Tokyo).
Latence : 10ms x 3 = 30ms
2. Handshake SSL/TLS
(Échange de clĂ©s crypto)
Encore des allers-retours transcontinentaux coûteux.Négocié localement à Tokyo. Gain énorme sur le TTFB.
3. RequĂȘteVoyage sur l'Internet public (alĂ©atoire).Voyage sur le rĂ©seau privĂ© AWS (optimisĂ©).
Conclusion : MĂȘme si vous ne faites AUCUN cache (ex: API bancaire), CloudFront accĂ©lĂšre votre site car la connexion s'Ă©tablit beaucoup plus vite.
Internet Public vs AWS Backbone

Quand un utilisateur accÚde à votre serveur sans CDN, ses données passent par des dizaines de routeurs de différents FAI (Orange -> Level3 -> Tata -> AWS). C'est l'Internet public : embouteillages, pertes de paquets, routes sous-optimales.

Avec CloudFront, dÚs que l'utilisateur touche l'Edge Location la plus proche, ses données entrent dans le Réseau Mondial AWS (Backbone).

  • Fibre optique dĂ©diĂ©e propriĂ©taire.
  • Pas de congestion publique.
  • Chemin le plus court garanti vers l'Origine.
Le concept de "Cold Start Acceleration"
MĂȘme si le fichier n'est PAS dans le cache (Miss), CloudFront le rĂ©cupĂšre plus vite depuis l'Origine que le client ne le ferait en direct, grĂące Ă  ce rĂ©seau privĂ©.
La Magie de l'IP Unique (Anycast)

Comment CloudFront sait-il oĂč envoyer l'utilisateur ?

DNS Classique (Unicast)

Une IP = Un Serveur spécifique.
Si le serveur Ă  Paris tombe, il faut changer le DNS pour pointer vers Berlin (lent Ă  propager).

CloudFront (Anycast)

Une IP = Tous les serveurs en mĂȘme temps.
L'IP publique de votre distribution est annoncée partout dans le monde.
C'est le réseau (BGP) qui dit : "Pour toi qui est à Madrid, cette IP se trouve physiquement à Madrid".

Avantage : Résilience totale. Si l'Edge de Madrid tombe en panne, le réseau redirige instantanément les paquets vers l'Edge de Marseille ou Lisbonne, sans changer de DNS.

1.2 Architecture : Origins & Behaviors (Routage)
CloudFront comme "Reverse Proxy" Unifié

La puissance de CloudFront réside dans sa capacité à faire passer plusieurs serveurs différents pour un seul site web aux yeux de l'utilisateur.

https://www.monsite.com (Point d'entrĂ©e unique) │ ├── /api/* ➔ RedirigĂ© vers ALB (Node.js) ├── /blog/* ➔ RedirigĂ© vers WordPress (EC2) ├── /videos/* ➔ RedirigĂ© vers MediaStore └── * (DĂ©faut) ➔ RedirigĂ© vers S3 (React App)
Pourquoi cette architecture ?
  • Zero CORS : Le front-end (S3) et le back-end (API) sont sur le mĂȘme domaine. Plus de problĂšmes de Cross-Origin.
  • SĂ©curitĂ© unique : Le WAF et le certificat SSL sont gĂ©rĂ©s une seule fois Ă  l'entrĂ©e.
  • Performance : Connexions persistantes (Keep-Alive) entre CloudFront et les origines.
Les types d'Origins supportés
TypeFormat EndpointDétails Techniques
S3 Bucketbucket.s3.region.amazonaws.comMode "REST". Supporte OAC (Sécurité privée). Idéal pour assets statiques.
ALB (Load Balancer)my-alb-123...amazonaws.comCloudFront maintient des connexions TCP ouvertes pour réduire la latence.
Attention : Le protocole vers l'ALB peut ĂȘtre HTTP ou HTTPS (config "Origin Protocol Policy").
MediaStore / ElementalEndpoint spécifique vidéo.Optimisé pour les écritures haute fréquence (Live Streaming).
Custom OriginIP ou Domaine (ex: on-premise).Permet d'utiliser CloudFront devant un serveur dans votre datacenter ou chez un autre cloud provider.
La Logique de Priorité des Behaviors

CloudFront analyse l'URL demandée et cherche le premier "Path Pattern" qui correspond. L'ordre est CRITIQUE.

RĂšgle d'Or : CloudFront s'arrĂȘte Ă  la premiĂšre correspondance (Match First).
PrioritéPath PatternOriginScénario
0/images/secret/*S3-SecureContenu privé. Auth requise (Signed URL).
Si je demande /images/secret/a.jpg, je m'arrĂȘte ici.
1/images/*S3-PublicContenu public. Cache agressif.
Si je demande /images/logo.png, je matche ici (car la rĂšgle 0 ne matche pas).
2*.phpEC2-LegacyVieux scripts PHP non cachés.
Default*S3-FrontendObligatoire. Le "Catch-All". Si rien d'autre ne matche, on va ici (souvent l'index.html du SPA).
Origin Groups : Haute Disponibilité (Failover)

Que se passe-t-il si votre serveur principal (Origin A) plante (Erreur 500) ?

Le Mécanisme
  1. Créer un "Origin Group" contenant [Origin A, Origin B].
  2. Définir les "Failover Criteria" (ex: 500, 502, 503, 504).
  3. Assigner ce Groupe Ă  un Behavior.
Use Case : Maintenance Page

Origin A : Application API (ALB).
Origin B : Bucket S3 avec une page HTML "Site en maintenance".

Si l'ALB renvoie une 503 (surchargé), CloudFront sert automatiquement la page S3. L'utilisateur ne voit pas d'erreur technique brute.

⚠ Le PiĂšge S3 : Website vs REST Endpoint

Quand vous configurez un Origin S3, CloudFront vous propose deux choix. Ne vous trompez pas !

Type EndpointFormatFonctionnalitésVerdict
REST API Endpointbucket.s3.amazonaws.com Supporte OAC (Bucket Privé)
Supporte HTTPS vers l'origine
Recommandé
C'est le standard de sécurité.
Website Endpointbucket.s3-website.region... Bucket doit ĂȘtre PUBLIC
GĂšre les redirections S3
À Ă©viter
Sauf si vous avez besoin des rÚgles de redirection XML spécifiques à S3.
1.3 Mécanique du Cache : TTL, Headers & Policies
Le Jeu de la Négociation : Qui décide de la durée ?

CloudFront possÚde ses propres réglages (Min/Default/Max TTL), mais votre serveur (Origin) envoie aussi des instructions (Headers). Comment CloudFront tranche-t-il ?

L'Origin envoie...Config CloudFront (TTL)Résultat (Durée de cache)Explication
Rien (Pas de header)Default TTL (ex: 24h)24hCloudFront applique sa valeur par défaut.
max-age=3600 (1h)Min=0, Max=1an1hCloudFront respecte l'Origin car c'est dans les bornes.
max-age=10 (10s)Min TTL = 60s60sCloudFront force le cache Ă  durer plus longtemps que l'Origin ne le voulait (Overrule).
no-storeN/A0sL'objet n'est jamais écrit sur le disque.
Astuce : Utilisez le Min TTL pour protĂ©ger votre backend. MĂȘme si un dĂ©veloppeur publie un code qui dit "ne pas cacher", CloudFront forcera un cache minimum pour Ă©viter l'Ă©croulement du serveur.
MaĂźtriser les Headers HTTP

C'est le langage universel du cache web. Voici les directives que CloudFront comprend.

Directive "max-age"
Cache-Control: max-age=3600

Standard. Dit au navigateur ET au CDN de garder l'objet 1 heure.

Directive "s-maxage" (CDN Only)
Cache-Control: s-maxage=86400, max-age=60

Magique : Dit au CDN (s=shared) de garder 24h, mais au navigateur du client de ne garder que 60s. Idéal pour mettre à jour le contenu rapidement tout en déchargeant l'Origin.

Directive "no-store"
Cache-Control: no-store

Interdiction stricte d'écrire sur le disque. Pour les données bancaires ou personnelles.

Directive "private"
Cache-Control: private

CloudFront (Public) ne doit PAS cacher. Mais le navigateur (Privé) a le droit.

Cache Policy : Définir la "Cache Key"

La Cache Key est l'identifiant unique d'un objet. Par défaut, c'est juste l'URL. Une Cache Policy permet d'ajouter des variables à cette clé.

Exemple : L'impact des Query Strings

Mauvaise Config (Include ALL QueryStrings)

  • User A : /image.jpg?ref=twitter
  • User B : /image.jpg?ref=facebook

CloudFront voit 2 objets différents. Il va chercher l'image 2 fois à l'origine.
Resultat : Cache Miss inutile.

Bonne Config (Managed-CachingOptimized)

  • Policy : Ignore Query Strings.

CloudFront ignore le ?ref=.... Il sert la mĂȘme image cached pour tout le monde.
Resultat : Cache Hit massif.

La confusion classique : Cache vs Origin Request

C'est la nuance la plus importante pour l'architecture avancée.

Cache Policy (CP)Origin Request Policy (ORP)
"Qu'est-ce qui fait varier le contenu stocké ?"VS"Quelles données je transmets au backend ?"
Si j'inclus "Cookie: SessionID" ici, je crée un cache différent par utilisateur.
(Cache inefficace)
Si j'inclus "Cookie: SessionID" ici, CloudFront ne cache pas par cookie, mais transmet le cookie à l'ALB pour qu'il sache qui est connecté.
Impact : Cache Hit Ratio.Impact : Fonctionnalité backend.
Cas pratique : Google Analytics (UTM parameters) - URL : /page.html?utm_source=google - Config recommandĂ©e : 1. Cache Policy : Exclure "utm_*" (pour servir la mĂȘme page cached Ă  tout le monde). 2. Origin Request Policy : Inclure "All Query Strings" (si le serveur a besoin de logger l'UTM).
3. Sécurité Infrastructure : TLS, AccÚs & Compliance
Le Chiffrement en Transit (HTTPS)

CloudFront termine la connexion SSL/TLS aux Edge Locations. Cela décharge vos serveurs du calcul cryptographique coûteux.

1. Certificats (ACM) : Le piĂšge classique
Attention Région !
Pour utiliser un certificat ACM avec CloudFront, il DOIT ĂȘtre Ă©mis dans la rĂ©gion US East (N. Virginia) us-east-1. MĂȘme si votre bucket S3 est Ă  Paris ou Tokyo. C'est une contrainte immuable de l'architecture globale.
2. Redirection HTTP vers HTTPS

Dans le "Behavior", configurez toujours Viewer Protocol Policy sur Redirect HTTP to HTTPS. Ne laissez jamais HTTP ouvert, sauf pour des besoins trÚs spécifiques (legacy IoT).

3. Security Policy (TLS Versions)

Vous choisissez quels protocoles cryptographiques sont autorisés.

PolitiqueDétailUsage
TLSv1.2_2021Désactive TLS 1.0 et 1.1 (obsolÚtes).Recommandé (Standard)
TLSv1Supporte les trĂšs vieux navigateurs/Android.À Ă©viter (VulnĂ©rable POODLE/BEAST)

CloudFront supporte TLS 1.3 automatiquement si le client est compatible (plus rapide et sécurisé).

ContrĂŽler QUI peut voir le contenu
Geo-Restriction (Geo-Blocking)

Filtrage basé sur une base de données GeoIP maintenue par AWS (précision 99.8%).

  • Allow List : "Je ne vends mes produits qu'en France et Belgique". Tout le reste est bloquĂ© (403).
  • Block List : "Je suis sous embargo avec tel pays".
  • Note : Facilement contournable avec un VPN. Pour une sĂ©curitĂ© forte, prĂ©fĂ©rez les Signed URLs.
Contenu Privé : Signed URLs vs Signed Cookies

Pour Netflix, formations payantes, ou documents privés.

MéthodeCas d'usage idéal
Signed URLAccÚs à un seul fichier (ex: lien de téléchargement envoyé par email).
Signed CookieAccÚs à tout un site ou un dossier (ex: zone membre premium, streaming HLS segmenté).
# Exemple de Policy pour URL Signée (JSON) { "Statement": [ { "Resource": "http://d123.cloudfront.net/training/video1.mp4", "Condition": { "DateLessThan": { "AWS:EpochTime": 1698000000 }, "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" } } } ] }
Verrouiller l'arriĂšre-boutique (Origin Security)

Si un attaquant découvre l'URL directe de votre ALB ou S3, il peut contourner le WAF et le CDN. Il faut fermer cette porte.

1. Pour S3 : Origin Access Control (OAC)

S3 doit ĂȘtre PrivĂ© (Block All Public Access). Seule l'identitĂ© CloudFront (Principal) a le droit s3:GetObject via la Bucket Policy.
(Voir modal Architecture pour le JSON).

2. Pour ALB / EC2 : Le "Shared Secret"

L'ALB ne supporte pas l'OAC. L'astuce consiste Ă  injecter un mot de passe dans les headers.

  1. Dans CloudFront (Origin Settings), ajoutez un header custom :
    X-Origin-Secret: mon-mot-de-passe-tres-long-12345
  2. Sur l'ALB (Listener Rule), créez une rÚgle :
    IF Header 'X-Origin-Secret' != 'mon-mot-de-passe...' THEN Return 403.
RĂ©sultat : MĂȘme si quelqu'un connaĂźt l'IP de votre serveur, il se fait rejeter s'il ne passe pas par CloudFront.
Informer le Navigateur (Response Headers Policy)

CloudFront peut injecter des en-tĂȘtes HTTP pour durcir la sĂ©curitĂ© cĂŽtĂ© client (navigateur).

HeaderFonctionPourquoi l'activer ?
Strict-Transport-Security (HSTS)Force le navigateur Ă  utiliser HTTPS.ProtĂšge contre le "SSL Stripping" (attaque Man-in-the-Middle).
X-Frame-OptionsDENY ou SAMEORIGIN.EmpĂȘche votre site d'ĂȘtre affichĂ© dans une iframe (Anti-Clickjacking).
X-Content-Type-Optionsnosniff.EmpĂȘche le navigateur d'exĂ©cuter un fichier .jpg comme du script JS.
CORS (Access-Control-Allow-*)GĂšre les requĂȘtes cross-domaine.Indispensable si votre API (api.site.com) est appelĂ©e par le front (www.site.com).

Astuce : AWS fournit des "Managed Policies" (ex: SecurityHeadersPolicy) prĂȘtes Ă  l'emploi Ă  attacher Ă  vos Behaviors.

Conformité & Field-Level Encryption
Certifications

CloudFront est certifié pour les workloads critiques :

  • PCI-DSS (Paiements, Cartes bancaires).
  • HIPAA (DonnĂ©es de santĂ© US).
  • SOC 1, 2, 3 et ISO 27001.
Field-Level Encryption (Avancé)

Permet de chiffrer des champs sensibles (ex: Numéro de carte bleue dans un formulaire POST) dÚs l'Edge avec une clé publique.

  • Seule votre application backend privĂ©e possĂšde la clĂ© privĂ©e pour dĂ©chiffrer.
  • MĂȘme CloudFront ou AWS ne peuvent pas voir la donnĂ©e en clair.
  • Ajoute une couche de sĂ©curitĂ© ultime pour la conformitĂ© PCI-DSS.
2.1 Chiffrement : HTTPS, ACM & TLS Termination
Checklist de mise en production HTTPS

Ne laissez jamais CloudFront générer son domaine par défaut (d123...cloudfront.net) en production. Utilisez votre propre domaine.

#ActionDétail Technique
1CertificatDemander un certificat public dans AWS ACM (Gratuit).
Voir onglet 2 pour la région.
2Alternate DomainDans CloudFront (General Settings), ajouter www.monsite.com dans le champ CNAMEs.
3Attacher CertSélectionner "Custom SSL Certificate" et choisir le cert ACM créé à l'étape 1.
4Route 53Créer un enregistrement A (Alias) pointant vers la distribution CloudFront.
5Forcer HTTPSDans le Behavior, régler "Viewer Protocol Policy" sur Redirect HTTP to HTTPS.
L'erreur n°1 du débutant : La Région ACM
US-EAST-1 OBLIGATOIRE

Pour CloudFront, vous DEVEZ demander votre certificat ACM dans la région US East (N. Virginia).

Si vous créez votre certificat à Paris (eu-west-3), il n'apparaßtra JAMAIS dans la liste déroulante de CloudFront.

Pourquoi cette contrainte ?

CloudFront est un service Global. Son plan de contrÎle (le cerveau qui copie les certificats vers les 600+ Edge Locations) est situé physiquement en Virginie. Il ne peut lire que les certificats locaux.

Validation DNS vs Email
  • DNS (RecommandĂ©) : AWS vous donne un CNAME Ă  ajouter. Si vous utilisez Route53, c'est un clic automatique. Renouvellement auto.
  • Email : Envoie un mail Ă  admin@monsite.com. GalĂšre si vous n'avez pas accĂšs Ă  cette boite.
Sécuriser le tuyau : Quelle politique TLS choisir ?

CloudFront vous demande de choisir une "Security Policy". C'est la liste des algorithmes de chiffrement autorisés.

TLSv1.2_2021 (Recommandé)
  • Protocoles : TLS 1.2 et TLS 1.3 uniquement.
  • CompatibilitĂ© : Navigateurs post-2015.
  • SĂ©curitĂ© : A+ sur SSLLabs. Bloque les vieux algos faibles (CBC, RC4).
TLSv1 (ObsolĂšte)
  • Protocoles : TLS 1.0, 1.1, 1.2.
  • Risque : VulnĂ©rable aux attaques POODLE, BEAST.
  • Usage : Uniquement si vous devez supporter Windows XP ou Android 4.
Le Bonus : TLS 1.3 & 0-RTT

CloudFront active automatiquement TLS 1.3 pour les clients compatibles.
Gain : Le "Handshake" (la poignée de main de sécurité) se fait en 1 seul aller-retour au lieu de 2. C'est vital pour la performance mobile.

SNI vs VIP : Le piĂšge Ă  600$

Lors de l'ajout du certificat, CloudFront propose une option obscure. Attention Ă  la facture.

OptionTechniqueCoûtVerdict
SNI (Server Name Indication)Le navigateur dit "Je veux le site A" pendant le handshake SSL. CloudFront sert le bon certificat parmi des milliers sur la mĂȘme IP.GratuitStandard
Supporté par 99.9% des clients modernes.
Legacy Clients (Dedicated IP / VIP)CloudFront vous réserve une IP physique dédiée dans chaque POP du monde.600$ / mois / distributionDanger
Utile UNIQUEMENT pour supporter de trĂšs vieux clients corporate (Banques sous IE6, vieux IoT).
OCSP Stapling

CloudFront gÚre l'OCSP Stapling par défaut. Au lieu que le navigateur demande à l'autorité de certif "Ce certif est-il révoqué ?", c'est CloudFront qui le fait et agrafe (staple) la preuve signée à la réponse.
Gain : +30% de vitesse sur la connexion SSL.

2.2 Contenu Privé : Signed URLs & Cookies
Comment servir du contenu privé S3 via le CDN ?

Votre bucket S3 est totalement privé (OAC). Personne ne peut y accéder. Mais vous voulez qu'un utilisateur payant puisse télécharger son eBook PDF.

La solution n'est pas d'ouvrir le bucket, mais de signer la requĂȘte. C'est comme un "billet d'entrĂ©e" infalsifiable avec une date d'expiration.

Le Workflow
  1. L'utilisateur se logue sur votre app (ex: Django/Node).
  2. Votre backend vérifie qu'il a payé.
  3. Votre backend génÚre une URL Signée (avec une clé privée RSA).
  4. Le backend renvoie l'URL au navigateur : https://cdn.site.com/doc.pdf?Signature=...
  5. L'utilisateur clique. CloudFront vérifie la signature avec la Clé Publique.
  6. Si valide et non expiré : 200 OK. Sinon 403 Forbidden.
Le Dilemme : Signed URL ou Signed Cookie ?

C'est la premiĂšre question d'architecture Ă  se poser.

Signed URL (Le Billet Unitaire)Signed Cookie (Le Passe-Partout)
Principe : La signature est dans l'URL (QueryString).
file.mp4?Policy=...&Signature=...
Principe : La signature est dans un header Set-Cookie HTTP. L'URL reste propre.
Avantages :
- Simple à débugger.
- Fonctionne hors navigateur (curl, mobile app).
Avantages :
- AccĂšs Ă  plusieurs fichiers d'un coup (/videos/*).
- URL propre (SEO friendly).
Inconvénients :
- Inutilisable pour le streaming HLS/DASH (car le player appelle des centaines de segments .ts sans la signature).
Inconvénients :
- Complexe (CORS, SameSite).
- Certains clients mobiles gĂšrent mal les cookies.
Usage : Lien de téléchargement unique, PDF, Installation logiciel.Usage : Streaming Vidéo (HLS), Site membre complet, SPA.
Infrastructure : Trusted Key Groups
Ne faites plus ça : N'utilisez plus la "CloudFront Key Pair" du compte racine (Root Account). C'est une pratique obsolÚte et dangereuse niveau sécurité.
La méthode moderne (2024+) :
  1. Générer une paire RSA (Local) :
    openssl genrsa -out private_key.pem 2048
    openssl rsa -pubout -in private_key.pem -out public_key.pem
  2. Uploader la Clé Publique :
    Dans la console CloudFront > Public keys.
  3. Créer un Key Group :
    Grouper une ou plusieurs clés publiques (pour permettre la rotation de clés sans downtime).
  4. Associer au Behavior :
    Dans le Behavior (ex: /premium/*), activer "Restrict Viewer Access" et sélectionner le "Trusted Key Group".
Code Backend : Générer une URL (Python/Boto3)

Exemple de code Ă  mettre dans votre Lambda ou serveur Django.

                    import datetime
                    from cryptography.hazmat.primitives import serialization
                    from cryptography.hazmat.backends import default_backend
                    from botocore.signers import CloudFrontSigner

                    # 1. Charger la clé privée
                    def rsa_signer(message):
                    with open('private_key.pem', 'rb') as key_file:
                    private_key = serialization.load_pem_private_key(
                    key_file.read(), password=None, backend=default_backend()
                    )
                    return private_key.sign(message, padding.PKCS1v15(), hashes.SHA1())

                    # 2. Configurer le Signer
                    key_id = 'K2JCJMDEHXQW5F' # ID de la Public Key dans CloudFront
                    url = 'https://d123.cloudfront.net/premium/video.mp4'
                    expire_date = datetime.datetime.now() + datetime.timedelta(hours=1)

                    cloudfront_signer = CloudFrontSigner(key_id, rsa_signer)

                    # 3. Générer l'URL
                    signed_url = cloudfront_signer.generate_presigned_url(
                    url, date_less_than=expire_date
                    )

                    print(signed_url)
Custom Policy : Aller plus loin que la date

Il existe deux types de politiques : Canned Policy (Juste une date de fin, URL courte) et Custom Policy (Complexe, URL longue).

Structure d'une Custom Policy (JSON)

Permet de restreindre l'IP ou d'autoriser un dossier complet avec le wildcard *.

                    {
                    "Statement": [
                    {
                    "Resource": "http://d123.cloudfront.net/training/*",
                    "Condition": {
                    "DateLessThan": { "AWS:EpochTime": 1698500000 },
                    "DateGreaterThan": { "AWS:EpochTime": 1698400000 },
                    "IpAddress": { "AWS:SourceIp": "192.168.0.0/24" }
                    }
                    }
                    ]
                    }
  • Resource : Notez l'Ă©toile * Ă  la fin. Utile pour signer l'accĂšs Ă  tout un cours vidĂ©o d'un coup.
  • IpAddress : EmpĂȘche l'utilisateur de partager son lien URL avec un ami sur un autre rĂ©seau.
4. Performance : MaĂźtriser le Cache & l'Edge
Le secret de la performance : La "Cache Key"

Pour savoir si une page est déjà en mémoire, CloudFront crée une "clé unique". Si vous configurez mal cette clé, vous tuez vos performances.

L'Équation de la Cache Key
Cache Key = Domaine + URL Path + {QueryStrings?} + {Cookies?} + {Headers?}

Le piÚge : Si vous dites à CloudFront de "Tout forwarder" (Query Strings, Headers), la moindre variation crée une nouvelle clé.

  • /page?user=A vs /page?user=B → 2 caches diffĂ©rents (MISS).
  • User-Agent: iPhone vs User-Agent: iPad → 2 caches diffĂ©rents (MISS).
🎯 Objectif : Cache Hit Ratio (CHR)

C'est le % de requĂȘtes servies par l'Edge sans toucher le serveur.

  • > 90% : Excellent (Site statique).
  • 50-80% : Correct (E-commerce, mix dynamique).
  • < 10% : ProblĂšme de config (ou API temps rĂ©el).
Cache Policies & Compression

Ne réinventez pas la roue, utilisez les "Managed Policies" d'AWS.

Managed PolicyComportementUsage Recommandé
CachingOptimizedActive la compression Brotli/Gzip. Ignore QueryStrings & Cookies. TTL Long.Pour 90% des assets statiques (Images, CSS, JS).
CachingDisabledPas de cache (TTL 0). Forward tous les Headers/Cookies à l'origine.Pour les appels API dynamiques (POST, PUT) ou contenus privés temps réel.
Elemental-MediaPackageOptimisé pour le streaming vidéo (segments).Pour la VOD / Live Streaming.
Pourquoi Brotli ?

CloudFront supporte Gzip (standard) et Brotli (Google). Brotli compresse le CSS/JS 20% mieux que Gzip. Assurez-vous de l'activer, c'est gratuit et réduit la facture de Data Transfer.

Mettre à jour le contenu : La Guerre des Méthodes

Vous venez de déployer une nouvelle version de votre site. Comment s'assurer que les utilisateurs voient le nouveau logo ?

Méthode 1 : Invalidation (Bourrin)

On demande Ă  AWS : "Supprime /images/logo.png de tous les caches du monde".

  • Temps : ~60 secondes.
  • CoĂ»t : 1000 gratuits/mois, puis payant (0.005$/path).
  • DĂ©faut : Si vous invalidez /*, votre serveur d'origine va prendre une vague de trafic (Thundering Herd).
Méthode 2 : Versioning (Expert)

On change le nom du fichier : logo-v2.png ou main.a1b2c3.js.

  • Temps : InstantanĂ© (c'est un nouveau fichier).
  • CoĂ»t : Gratuit.
  • Avantage : Pas de risque de cache pĂ©rimĂ©. On peut rollback instantanĂ©ment en remettant l'ancien fichier HTML.

Verdict : Utilisez le Versioning pour les assets (CSS/JS/IMG) et l'Invalidation uniquement pour les fichiers d'entrée (index.html).

Edge Compute : Exécuter du code au plus prÚs du client

AWS propose deux moteurs pour exécuter du code sur le CDN. Ne vous trompez pas de choix.

CaractéristiqueCloudFront Functions (CFF)Lambda@Edge
CoûtTrÚs faible (1/6 du prix de Lambda).Standard Lambda + surcoût.
LatenceSub-milliseconde (Immédiat).Quelques ms à 100ms (Cold starts possibles).
LimitesJS pur, pas d'accÚs réseau/AWS, pas de body.AccÚs complet (S3, DynamoDB, Réseau), accÚs au Body.
Use CaseNormalisation headers, Redirections, JWT check simple.SSR, Redimensionnement d'image, Auth complexe.
Exemple : Redirection WWW vers non-WWW (CFF)
                    function handler(event) {
                    var request = event.request;
                    var host = request.headers.host.value;

                    if (host.startsWith('www.')) {
                    var newUrl = 'https://' + host.slice(4) + request.uri;
                    return {
                    statusCode: 301,
                    statusDescription: 'Moved Permanently',
                    headers: { "location": { "value": newUrl } }
                    };
                    }
                    return request;
                    }
Origin Shield : Le Bouclier Ultime

Par dĂ©faut, CloudFront a des "Regional Caches". Si vous avez des utilisateurs en Europe et aux USA, votre origine reçoit au moins 2 requĂȘtes pour le mĂȘme objet (une de chaque rĂ©gion).

Origin Shield ajoute une couche de cache centralisée supplémentaire.
Edge → Regional Cache → Origin Shield → Origin S3/ALB.

  • Avantage : RĂ©duit drastiquement la charge sur l'origine (dĂ©doublonnage mondial).
  • CoĂ»t : Payant (par requĂȘte).
  • Quand l'activer ? Si vous avez une audience mondiale dispersĂ©e et une origine qui souffre (ex: Serveur On-Premise fragile).
5. Monitoring : Tour de ContrĂŽle & Logs
Les KPIs vitaux Ă  afficher sur votre Dashboard

Ne surveillez pas tout. Surveillez ce qui impacte l'utilisateur ou le portefeuille.

1. Cache Hit Rate (Global)

Le % de requĂȘtes servies par CloudFront.
Objectif : >80% pour du statique.
Si ça chute, votre origine va souffrir.

2. 5xx Error Rate (Total)

Indique une panne serveur grave.
Attention : CloudFront renvoie parfois des 504 si l'origine est trop lente (timeout).

3. Origin Latency

Le temps que met VOTRE serveur à répondre à CloudFront.
C'est la métrique n°1 pour debugger une lenteur d'application.

4. Requests (Volume)

Pour détecter les pics de trafic soudains (Campagne marketing ou... attaque DDoS).

Logging : Standard ou Temps Réel ?

CloudFront propose deux types de logs. Le choix dépend de votre besoin de réactivité et de votre budget.

CaractéristiqueStandard Logs (S3)Real-Time Logs (Kinesis)
DélaiLent (livré toutes les 10 à 30 min).Immédiat (quelques secondes).
CoûtGratuit (juste le stockage S3).Payant (Coût Kinesis + Stockage).
ChampsTous les champs disponibles.Configurable (on choisit les champs).
UsageAudit, Analyse post-mortem, Facturation.Monitoring live, Blocage d'IP dynamique.
Conseil FinOps : Activez toujours les logs Standard (S3) avec une rÚgle de Lifecycle (suppression aprÚs 30 jours). C'est votre seule preuve en cas d'incident de sécurité passé.
L'outil magique : RequĂȘter les logs avec Athena

Une fois vos logs dans S3, utilisez Amazon Athena pour lancer des requĂȘtes SQL dessus. Voici les "Golden Queries" :

1. Top 10 des URLs les plus lentes (Optimisation Perf)
                    SELECT 
                    cs_uri_stem as URL, 
                    avg(time_taken) as "Latence Moyenne (s)", 
                    max(time_taken) as "Max (s)", 
                    count(*) as "Nb RequĂȘtes"
                    FROM cloudfront_logs
                    WHERE date >= current_date - interval '1' day
                    GROUP BY cs_uri_stem
                    ORDER BY avg(time_taken) DESC
                    LIMIT 10;
2. Identifier les erreurs 404 (Liens morts / Scans)
                    SELECT 
                    cs_uri_stem as "Page Introuvable", 
                    count(*) as Count, 
                    c_ip as "IP Client"
                    FROM cloudfront_logs
                    WHERE sc_status = '404'
                    GROUP BY cs_uri_stem, c_ip
                    ORDER BY Count DESC
                    LIMIT 20;
Quand réveiller l'astreinte ? (CloudWatch Alarms)

Configurez ces alarmes pour ne pas découvrir les pannes via Twitter.

MétriqueSeuil recommandéSignification
5xxErrorRate> 1% pendant 5 minCRITIQUE. L'origine plante ou timeout.
4xxErrorRate> 5% pendant 5 minLiens cassés massifs ou scan de vulnérabilité en cours.
OriginLatency> 2000ms (selon app)L'application backend rame. Risque de 504 Gateway Timeout.
Aller plus loin : CloudWatch RUM

Les logs serveurs ne disent pas tout. Ils ne voient pas le temps de rendu du navigateur ou les erreurs JavaScript client.

RUM (Real User Monitoring) est un petit script JS fourni par AWS Ă  mettre dans votre ``.

Ce que RUM vous donne :
  • Temps de chargement rĂ©el (LCP, FCP - Core Web Vitals).
  • Erreurs JS (console.error) des utilisateurs.
  • Carte du monde des latences rĂ©elles.
  • Appareils et navigateurs utilisĂ©s.
6. FinOps : MaĂźtriser la Facture CloudFront
Ce que vous payez réellement

Contrairement à un serveur classique, vous ne payez pas "à l'heure", mais au volume. La facture se compose de 3 étages :

1. Data Transfer Out (Le gros morceau)

Volume de données (GB) envoyées du CDN vers vos utilisateurs.
Prix : Dégressif. ~0.085$/GB (USA/EU).
Plus c'est loin (Amérique du Sud, Australie), plus c'est cher.

2. RequĂȘtes HTTP/HTTPS

Nombre de "hits" reçus par le CDN.
Prix : ~0.010$ pour 10 000 requĂȘtes.
Attention aux API trĂšs bavardes ou aux attaques DDoS (millions de hits).

3. Services Annexes

- Invalidations : Payant aprÚs 1000/mois. - Functions : 0.10$/million d'exécutions. - Lambda@Edge : 0.60$/million + temps de calcul (Cher !).

Bonne nouvelle : Le transfert de données ENTRANT (Origin S3 vers CloudFront) est toujours GRATUIT. Vous ne payez que la sortie vers le client.
Le Levier Puissant : Les "Price Classes"

Pourquoi payer des serveurs chers à Sydney si vos clients sont tous à Paris ? CloudFront permet de désactiver les régions coûteuses.

Price ClassRégions InclusesImpact Business
PriceClass_100
Le moins cher
USA, Canada, Europe, Israel.Idéal si votre cible est occidentale.
Un client au Japon pourra accéder au site, mais sera servi depuis les USA (Latence + élevée).
PriceClass_200
Intermédiaire
Class_100 + Asie (Singapour, Tokyo, Hong Kong...), Afrique du Sud, Moyen-Orient.Bon compromis pour une couverture mondiale standard.
PriceClass_All
Premium
Le monde entier (Inclus Amérique du Sud, Australie, Inde).Performance maximale partout. Coût le plus élevé.
# Exemple Terraform pour économiser de l'argent resource "aws_cloudfront_distribution" "example" { # ... price_class = "PriceClass_100" # ... }
Réductions & Offre Gratuite
1. AWS Free Tier (Toujours gratuit)

Depuis 2021, l'offre gratuite CloudFront est trÚs généreuse et s'applique tous les mois (pas juste la 1Úre année).

  • 1 TB (TĂ©raoctet) de Data Transfer Out / mois.
  • 10 Millions de requĂȘtes HTTP/HTTPS / mois.
  • 2 Millions d'invocations CloudFront Functions.

Suffisant pour 95% des sites personnels ou PME.

2. CloudFront Security Savings Bundle

Si vous dépassez le Free Tier, ne restez pas en "On-Demand".

  • Principe : Vous vous engagez Ă  dĂ©penser un montant minimum (ex: 10$/mois) pendant 1 an.
  • Gain : Jusqu'Ă  30% de rĂ©duction sur la facture CloudFront.
  • Bonus : AWS vous OFFRE le coĂ»t du WAF (Web Application Firewall) Ă  hauteur de 10% de votre engagement.
⚠ Attention aux CoĂ»ts CachĂ©s : Invalidations

Vider le cache manuellement coûte cher si on s'y prend mal.
Tarif : Les 1 000 premiers chemins par mois sont gratuits. Ensuite : 0,005 $ par chemin.

Mauvaise Pratique
aws cloudfront create-invalidation \ --paths "/images/img1.jpg" "/images/img2.jpg" ... (x2000 fichiers)

Ici, vous payez pour 2000 chemins individuels.
Coût : (2000 - 1000) * 0.005 = 5 USD juste pour ça.

Bonne Pratique
aws cloudfront create-invalidation \ --paths "/images/*"

L'utilisation du wildcard * compte pour 1 seul chemin.
Coût : 0 USD (inclus dans le quota gratuit).
InconvĂ©nient : Vous videz peut-ĂȘtre trop de choses.

Checklist d'Optimisation FinOps
ActionImpact FinOpsComplexité
Activer la Compression (Brotli/Gzip)Réduit le volume (GB) de 70% sur le texte/JS/CSS.Facile
Augmenter le TTL (Cache-Control)RĂ©duit le nombre de requĂȘtes vers l'Origine et les refetchs.Facile
Utiliser PriceClass_100Élimine les coĂ»ts Ă©levĂ©s des rĂ©gions "exotiques".Facile
Filtrer les Bots (WAF)EmpĂȘche les robots inutiles de consommer vos requĂȘtes/bande passante.Moyen
Passer de Lambda@Edge à CF FunctionsDivise le coût de calcul par 6.Difficile (Refonte code)
3.1 Performance : Dompter la Latence & le Réseau
TTFB (Time To First Byte) : L'ennemi n°1

Le TTFB est le temps qui s'Ă©coule entre le moment oĂč le client envoie la requĂȘte et le moment oĂč il reçoit le premier octet de rĂ©ponse. CloudFront rĂ©duit ce temps drastiquement, mĂȘme pour le contenu dynamique.

Anatomie d'une Latence (Paris → New York)
ActionInternet PublicVia CloudFront
Distance Physique~6 000 km~10 km (Edge local)
Ping (RTT)80 ms2 ms
Handshake TLS (3 RTT)240 ms (Lent !)6 ms (Rapide !)
Total TTFB~300 ms~20 ms (si Cache Hit)
Pourquoi c'est plus rapide mĂȘme sans cache ?

MĂȘme si CloudFront doit contacter l'origine (Cache Miss), le client a dĂ©jĂ  fini son handshake SSL avec l'Edge. La connexion entre l'Edge et l'Origine utilise une connexion persistante (Keep-Alive) prĂ©-chauffĂ©e sur le rĂ©seau AWS.

RĂ©sultat : On Ă©conomise les temps de nĂ©gociation TCP/SSL Ă  chaque requĂȘte.

Anycast : Une IP pour les gouverner tous

CloudFront n'utilise pas le DNS pour diriger le trafic (comme les vieux load balancers). Il utilise BGP Anycast.

L'Analogie du "112" (Urgences)

Quand vous composez le 112, vous ne cherchez pas à joindre "le centre d'appel de Paris". Vous cherchez "le centre d'appel le plus proche". Le réseau téléphonique vous route automatiquement vers le centre local.
CloudFront fait pareil : Une seule IP annoncée mondialement.

Avantages Techniques
  • StabilitĂ© : Pas de dĂ©pendance Ă  la propagation DNS (TTL).
  • Failover instantanĂ© : Si l'Edge de Madrid tombe, BGP route les paquets vers Barcelone en quelques millisecondes.
  • Anti-DDoS : L'attaque est "diluĂ©e" sur les 600 points de prĂ©sence au lieu de concentrer sur un seul serveur.
L'Arme SecrĂšte : Regional Edge Caches (REC)

Les 600+ Edge Locations (PoP) sont petits. Ils doivent souvent vider leur mémoire (Eviction). C'est là qu'interviennent les 13 Regional Edge Caches.

Edge Location (PoP)Regional Edge Cache (REC)
Le magasin de quartier L'entrepÎt régional
TrĂšs nombreux (+600).Peu nombreux (~13 majeurs).
Cache petit (SSD/RAM). Données "chaudes".Cache énorme (Disques durs). Données "froides".
Proche de l'utilisateur (10ms).Proche des Edges (20-40ms).
Avantage : Le REC est GRATUIT et automatique. Il agit comme un bouclier. Si un objet n'est plus dans l'Edge, CloudFront le cherche dans le REC avant de déranger votre Origine.
AWS Backbone : L'Autoroute Privée

Internet est un rĂ©seau "Best Effort". Vos paquets passent par des opĂ©rateurs tiers (ISP) qui peuvent ĂȘtre saturĂ©s.

DÚs qu'un paquet touche une Edge Location, il entre dans le Backbone AWS : un réseau mondial de fibre optique propriétaire.

Cold Potato Routing

AWS garde le paquet sur son réseau le plus longtemps possible et ne le relùche sur l'Internet public qu'au tout dernier moment (prÚs de l'utilisateur).

  • Moins de "Jitter" (variation de latence).
  • Pas de perte de paquets.
  • Bande passante massive garantie.
Optimisations TCP & Réseau (Sous le capot)

CloudFront applique des réglages noyau (Kernel) avancés pour booster la vitesse.

TechnologieEffet
TCP Fast OpenPermet d'envoyer des données dÚs le début du handshake TCP (avant qu'il ne soit fini). Réduit la latence de démarrage.
TLS 1.3 & 0-RTTReprise de session instantanée pour les utilisateurs qui reviennent (0 Round Trip Time).
TCP Window ScalingAgrandit la fenĂȘtre de rĂ©ception pour permettre des dĂ©bits plus Ă©levĂ©s sur les connexions Ă  haute latence (High Bandwidth-Delay Product).
HTTP/2 & HTTP/3 (QUIC)Multiplexing (plusieurs requĂȘtes en parallĂšle sur 1 seule connexion TCP/UDP). Élimine le "Head-of-line blocking".
3.2 Tuning : Cache Policies & Hit Ratio
La "Cache Key" : L'ADN de votre performance

La Cache Policy ne sert qu'à une chose : définir la Cache Key.
C'est la formule que CloudFront utilise pour savoir si deux requĂȘtes sont identiques ou diffĂ©rentes.

Formule Simplifiée
KEY = Domaine + URI + {QueryString?} + {Headers?} + {Cookies?}

Plus vous ajoutez d'éléments (variables) dans cette équation, plus vous fragmentez votre cache.

Exemple de fragmentation (Mauvais Hit Ratio)
  • Si vous incluez le Header User-Agent dans la clĂ© :
  • Un utilisateur sur Chrome 120 crĂ©e un cache.
  • Un utilisateur sur Chrome 121 crĂ©e un nouveau cache (Miss).
  • Un utilisateur sur Safari crĂ©e encore un autre cache.
  • RĂ©sultat : Votre Origin est inondĂ© de requĂȘtes identiques.
Ne réinventez pas la roue : AWS Managed Policies

AWS maintient des politiques optimisées. Utilisez-les dans 95% des cas.

Nom de la PolicyID (Approximatif)ConfigurationUsage Idéal
CachingOptimized
Standard
658327ea-...- Query Strings : None
- Headers : None
- Cookies : None
- Compression : Gzip + Brotli
Sites statiques, SPA (React/Vue), Images, CSS, JS.
Maximise le Hit Ratio.
CachingDisabled4135ea2d-...- TTL : 0 (Pas de cache)
- Forward tout vers l'origine.
API dynamiques, WebSockets, contenus temps réel.
Amplify2e54312a-...Optimisé pour les déploiements AWS Amplify.Apps hébergées via Amplify Console.
Le PiĂšge des Headers et Cookies

Si vous devez absolument varier le cache selon un paramĂštre (ex: langue, devise), soyez chirurgical.

À ne JAMAIS inclure
  • User-Agent : Trop de variations (millions).
  • Referer : Change Ă  chaque provenance.
  • Cookie: session_id : Rend le cache unique par utilisateur (donc inutile).
Acceptable (Whitelist)
  • Accept-Language : Si votre backend sert du HTML diffĂ©rent selon la langue.
  • Origin : Indispensable pour le CORS si votre API est sur un autre domaine.
  • Accept-Encoding : GĂ©rĂ© automatiquement par CloudFront (ne pas l'ajouter manuellement).
Astuce : Si vous avez besoin du Cookie de session pour savoir "qui" est connectĂ©, mais que la page est la mĂȘme pour tout le monde, utilisez une Origin Request Policy (transmet le cookie) et non une Cache Policy (cache le cookie).
Gérer les Query Strings (UTM & Tracking)

Les marketeurs adorent ajouter des ?utm_source=facebook&utm_campaign=summer. Si vous configurez mal votre Cache Policy, ces paramĂštres tuent votre cache.

StratégieComportementImpact Hit Ratio
None (Ignorer tout)/page?a=1 et /page?b=2 servent le mĂȘme fichier cache.Excellent (100%)
Whitelist (Recommandé)Je n'autorise que ?page= et ?sort=. CloudFront ignore les autres (UTM).TrÚs Bon
All (Tout inclure)Le moindre tracking ID crée une nouvelle entrée cache.Catastrophique
Compression : Gzip vs Brotli

La Cache Policy gÚre aussi la compression automatique. CloudFront compresse les fichiers à la volée entre l'Origin et l'Edge.

Comparatif
  • Gzip : Le standard historique. Rapide, compatible partout.
  • Brotli (br) : Algorithme Google. 20% Ă  30% plus efficace que Gzip sur le texte (HTML, CSS, JS, JSON).

Activez TOUJOURS Brotli + Gzip dans vos policies.

Comment ça marche ?
  1. Le navigateur envoie Accept-Encoding: gzip, br.
  2. CloudFront voit "br", compresse le fichier en Brotli, le met en cache et l'envoie.
  3. Le prochain client reçoit directement la version Brotli depuis l'Edge.
  4. Note : CloudFront ne compresse pas les images (déjà compressées) ni les fichiers > 10MB.
3.3 Use Case : Site Statique Sécurisé (S3 + CloudFront)
L'Architecture de Référence 2025

Oubliez la méthode "S3 Static Website Hosting" (bucket public). C'est obsolÚte, non sécurisé et sans HTTPS. Voici la méthode professionnelle :

Client (Browser) │ â–Œ [CloudFront (Edge)] ─── HTTPS (ACM Cert) │ │ │ └─ Cache (Performances) │ └─ WAF (SĂ©curitĂ©) │ â–Œ (Via Backbone AWS) [S3 Bucket (PrivĂ©)] ─── OAC (Origin Access Control) │ └─ index.html, style.css...
Pourquoi cette stack ?
  • SĂ©curitĂ© : Le bucket S3 est fermĂ© au monde entier ("Block Public Access"). Seul CloudFront peut y lire.
  • HTTPS : S3 seul ne supporte pas HTTPS personnalisĂ©. CloudFront le fait gratuitement.
  • CoĂ»t : Le trafic sortant de CloudFront est moins cher que celui de S3 direct.
  • SPA Friendly : Permet de gĂ©rer les routes React/Angular proprement (voir onglet 3).
Étape 1 : Verrouiller le Bucket (OAC)

OAC (Origin Access Control) est le remplaçant moderne de l'OAI. Il supporte le chiffrement KMS et toutes les régions.

CÎté CloudFront
  1. Créer une distribution.
  2. Origin Domain : Choisir le bucket S3.
  3. Origin Access : Sélectionner "Origin Access Control settings".
  4. Cliquer sur "Create control setting".
CÎté S3
  1. Aller dans "Permissions".
  2. Block Public Access : Tout cocher (ON).
  3. Bucket Policy : Copier la policy générée par CloudFront (voir ci-dessous).
La Bucket Policy (Copier-Coller)
                    {
                    "Version": "2012-10-17",
                    "Statement": {
                    "Sid": "AllowCloudFrontServicePrincipalReadOnly",
                    "Effect": "Allow",
                    "Principal": {
                    "Service": "cloudfront.amazonaws.com"
                    },
                    "Action": "s3:GetObject",
                    "Resource": "arn:aws:s3:::MON-BUCKET/*",
                    "Condition": {
                    "StringEquals": {
                    "AWS:SourceArn": "arn:aws:cloudfront::123456789012:distribution/E1XXXXXX"
                    }
                    }
                    }
                    }
Le problĂšme "404" des Single Page Apps

Le SymptĂŽme :

Vous allez sur monsite.com (ça marche). Vous cliquez sur "Contact" -> l'URL devient monsite.com/contact (ça marche).
VOUS RAFRAÎCHISSEZ LA PAGE (F5).
Boom : 404 Not Found ou 403 Forbidden.

Pourquoi ? CloudFront cherche un fichier nommé contact dans le dossier S3. Il n'existe pas (c'est une route virtuelle JS).

La Solution : Error Pages

Il faut dire à CloudFront : "Si tu ne trouves pas le fichier, renvoie index.html et laisse React se débrouiller".

Config "Error Pages"
  • HTTP Error Code : 403 (et 404)
  • Customize Error Response : Yes
  • Response Page Path : /index.html
  • HTTP Response Code : 200 (OK)
Déployer comme un Pro (AWS CLI)

Ne glissez-déposez pas vos fichiers à la main. Utilisez un script de déploiement.

Commande de Sync Optimisée
                    # 1. Uploader les assets (CSS/JS/Img) avec un cache LONG (1 an)
                    aws s3 sync ./build s3://mon-bucket \
                    --exclude "index.html" \
                    --cache-control "max-age=31536000,public"

                    # 2. Uploader index.html avec un cache COURT (0s)
                    aws s3 cp ./build/index.html s3://mon-bucket/index.html \
                    --cache-control "max-age=0,no-cache,no-store,must-revalidate"

                    # 3. Invalider le cache CloudFront (pour voir les changements de suite)
                    aws cloudfront create-invalidation \
                    --distribution-id E1XXXXXX \
                    --paths "/index.html"

Pourquoi ? Cette stratégie garantit que vos utilisateurs ont toujours la derniÚre version de l'app (index.html frais) tout en chargeant les images/scripts depuis le cache du navigateur (max perf).

Lier le Nom de Domaine (Route53)

DerniÚre étape : Brancher www.monsite.com.

ServiceAction
ACMCertificat SSL généré en us-east-1 (Obligatoire).
CloudFront1. Ajouter www.monsite.com dans "Alternate Domain Names (CNAMEs)".
2. Sélectionner le certificat ACM.
Route 53Créer un Record Type A.
Cocher "Alias" = Oui.
Choisir "Alias to CloudFront distribution".
Contrairement à un CNAME classique, l'Alias Route53 est gratuit et résout l'IP à la racine du domaine (Apex domain support).
4.1 Use Case : Accélérer & Sécuriser une API REST
Architecture : Le "Bouclier" d'API

MĂȘme si votre API est 100% dynamique (pas de cache), CloudFront apporte 3 avantages majeurs par rapport Ă  une exposition directe de l'ALB ou API Gateway.

Accélération TLS

Le "Handshake SSL" (coûteux) se fait à l'Edge Location (proche du client). Ensuite, CloudFront parle à l'ALB via une connexion Keep-Alive persistante sur le réseau AWS.
Gain : -30% de latence sur les appels API.

WAF & DDoS

Bloquez les injections SQL et les bots au niveau de CloudFront. Votre ALB ne reçoit que du trafic "propre". En cas de DDoS, c'est le réseau global AWS qui absorbe, pas votre petit Load Balancer.

Coût Data Transfer

Le Data Transfer Out depuis CloudFront est souvent moins cher que depuis un ALB/EC2 direct, surtout si vous avez du volume.

Intégration : Quelle source choisir ?
Scénario A : CloudFront + ALB (EC2/EKS)
  • Protocole Origin : HTTPS (RecommandĂ©).
  • Host Header : CloudFront doit transmettre le Header Host de la requĂȘte originale pour que l'ALB puisse faire son routing (Host-based routing).
  • Policy : Utiliser AllViewerExceptHostHeader ou une policy custom.
Scénario B : CloudFront + API Gateway
Astuce : N'utilisez PAS un API Gateway de type "Edge Optimized" si vous mettez CloudFront devant. Utilisez un API Gateway de type "Regional".
Sinon, vous avez deux CloudFront Ă  la suite (Double saut) = Latence inutile.
Le Cache sur une API : Risque ou Opportunité ?

Cacher une API peut ĂȘtre dĂ©sastreux (fuite de donnĂ©es utilisateur) ou gĂ©nial (sauve la DB). Tout est dans la nuance.

Type de RouteExempleStratégie Recommandée
Donnée UtilisateurGET /me/profile
GET /orders
CachingDisabled
Ne JAMAIS cacher. Risque que l'utilisateur A voie le profil de B.
Catalogue PublicGET /products
GET /categories
CachingOptimized
TTL court (ex: 60s). Réduit la charge DB de 90% lors des pics de trafic.
MutationsPOST, PUT, DELETEAuto (No Cache)
CloudFront ne cache jamais les méthodes non-idempotentes par défaut.
EmpĂȘcher le contournement (Bypass)

Si un attaquant trouve l'URL directe de votre ALB (ex: my-alb-123.aws.com), il peut attaquer votre serveur sans passer par le WAF CloudFront.

La technique du "Shared Secret Header"

1. CÎté CloudFront (Origin Settings)

Ajouter un Custom Header :

X-Origin-Secret: mon-mot-de-passe-secret-12345

2. CÎté ALB (Listener Rule)

Ajouter une rĂšgle prioritaire :

IF Header "X-Origin-Secret" != "mon-mot-de-passe..." THEN Return "403 Forbidden"

Résultat : Seul CloudFront (qui connaßt le secret) peut parler à l'ALB. Tout accÚs direct est rejeté.

Timeouts & Keep-Alive

Les problÚmes classiques en prod et comment les éviter.

ProblĂšmeSymptĂŽmeSolution
504 Gateway TimeoutL'API met plus de 30s à répondre (ex: gros export PDF).1. Augmenter le timeout CloudFront (max 60s).
2. Mieux : Passer en asynchrone (L'API répond "202 Accepted" et le client poll le statut).
502 Bad GatewayErreur de handshake TLS entre CloudFront et ALB.Vérifier que le certificat sur l'ALB est valide et correspond au domaine visé.
Latence IntermittenteConnexions TCP qui se ferment trop vite.Augmenter le Keep-Alive Timeout sur l'ALB pour qu'il soit supérieur à celui de CloudFront (60s).
4.2 Use Case : Streaming Vidéo à l'échelle (VOD)
Pourquoi on n'utilise plus de MP4 unique ?

Envoyer un fichier movie.mp4 de 4GB est inefficace. Si l'utilisateur a une mauvaise connexion, ça coupe (Buffering). La solution moderne est l'ABR (Adaptive Bitrate Streaming).

Les Protocoles Standards
  • HLS (HTTP Live Streaming) : Créé par Apple. Standard de fait. Utilise des playlists .m3u8 et des segments .ts.
  • MPEG-DASH : Standard ouvert. Utilise des manifestes .mpd et des segments .m4s.
Le principe de l'ABR
  1. La vidéo est encodée en plusieurs qualités (1080p, 720p, 360p).
  2. Chaque qualité est découpée en petits morceaux de 2 à 6 secondes (Segments).
  3. Le lecteur vidéo (Player) télécharge le "Manifeste" (la carte).
  4. Le Player mesure la bande passante et choisit le segment suivant dans la meilleure qualité possible.
Pipeline de VOD sur AWS

Comment passer d'un fichier brut (MOV/AVI) Ă  une diffusion mondiale Netflix-style.

ÉtapeService AWSAction
1. SourceS3 (Raw)Upload du fichier maßtre haute qualité (Mezzanine file).
2. TranscodageMediaConvertConvertit le fichier en HLS + DASH avec plusieurs "Renditions" (High, Med, Low). Découpe en segments.
3. StockageS3 (Public/Privé)Stocke les milliers de petits fichiers (.ts, .m3u8) générés.
4. DeliveryCloudFrontCache et distribue les segments mondialement. C'est le "Moteur" du streaming.
Configuration Cache : Manifest vs Segments

C'est l'erreur classique. On ne cache pas un fichier de menu (.m3u8) comme on cache un morceau de vidéo (.ts).

Fichiers Manifest (.m3u8 / .mpd)

C'est la "carte" de la vidéo. Pour du Live ou des mises à jour, elle change souvent.

  • TTL RecommandĂ© : Court (Quelques secondes pour le Live, quelques minutes pour la VOD).
  • StratĂ©gie : Doit ĂȘtre revalidĂ© souvent.
Fichiers Segments (.ts / .m4s)

Ce sont des blocs de données statiques. Un segment "vidéo_001.ts" ne changera JAMAIS.

  • TTL RecommandĂ© : TrĂšs Long (1 an).
  • StratĂ©gie : Cache-Control: max-age=31536000.
Optimisations Réseau
  • Activer CORS : Indispensable car le Player (JS) va faire des requĂȘtes XHR vers le domaine CDN. Headers : Access-Control-Allow-Origin: *.
  • Range Requests : CloudFront supporte les requĂȘtes partielles (Byte-Range) nativement. Vital pour permettre Ă  l'utilisateur d'avancer dans la vidĂ©o sans tout tĂ©lĂ©charger.
Protéger le Contenu (Anti-Piratage)

Comment empĂȘcher qu'on vole vos vidĂ©os ?

NiveauSolutionEfficacité
BasiqueReferer Check (WAF)Bloque si la vidéo n'est pas jouée sur monsite.com. Facilement contournable.
IntermédiaireSigned CookiesL'utilisateur s'authentifie, reçoit un Cookie. CloudFront valide le cookie pour chaque segment.
Mieux que Signed URL car on ne peut pas signer les 1000 liens du fichier .m3u8.
HollywoodDRM (Digital Rights Management)Chiffrement du fichier (AES-128). La clé de déchiffrement n'est délivrée que si l'utilisateur a une licence valide (Widevine, FairPlay).
Réduire la facture Streaming

La vidéo consomme énormément de bande passante (Data Transfer Out). Voici comment limiter la casse.

1. Origin Shield

Les fichiers vidĂ©o sont lourds. Si chaque Edge va les chercher dans S3, vous payez des requĂȘtes S3 et du transfert interne.
Origin Shield met en cache le fichier une seule fois pour le monde entier.

2. Compression & Bitrate

Utilisez des codecs modernes :
H.265 (HEVC) ou AV1 rĂ©duisent la taille de 30% Ă  50% par rapport au H.264 classique pour la mĂȘme qualitĂ© visuelle.

6. FinOps : MaĂźtriser la Facture CloudFront
Ce que vous payez réellement

Contrairement à un serveur classique, vous ne payez pas "à l'heure", mais au volume. La facture se compose de 3 étages :

1. Data Transfer Out (Le gros morceau)

Volume de données (GB) envoyées du CDN vers vos utilisateurs.
Prix : Dégressif. ~0.085$/GB (USA/EU).
Plus c'est loin (Amérique du Sud, Australie), plus c'est cher.

2. RequĂȘtes HTTP/HTTPS

Nombre de "hits" reçus par le CDN.
Prix : ~0.010$ pour 10 000 requĂȘtes.
Attention aux API trĂšs bavardes ou aux attaques DDoS (millions de hits).

3. Services Annexes

- Invalidations : Payant aprÚs 1000/mois. - Functions : 0.10$/million d'exécutions. - Lambda@Edge : 0.60$/million + temps de calcul (Cher !).

Bonne nouvelle : Le transfert de données ENTRANT (Origin S3 vers CloudFront) est toujours GRATUIT. Vous ne payez que la sortie vers le client.
Le Levier Puissant : Les "Price Classes"

Pourquoi payer des serveurs chers à Sydney si vos clients sont tous à Paris ? CloudFront permet de désactiver les régions coûteuses.

Price ClassRégions InclusesImpact Business
PriceClass_100
Le moins cher
USA, Canada, Europe, Israel.Idéal si votre cible est occidentale.
Un client au Japon pourra accéder au site, mais sera servi depuis les USA (Latence + élevée).
PriceClass_200
Intermédiaire
Class_100 + Asie (Singapour, Tokyo, Hong Kong...), Afrique du Sud, Moyen-Orient.Bon compromis pour une couverture mondiale standard.
PriceClass_All
Premium
Le monde entier (Inclus Amérique du Sud, Australie, Inde).Performance maximale partout. Coût le plus élevé.
# Exemple Terraform pour économiser de l'argent resource "aws_cloudfront_distribution" "example" { # ... price_class = "PriceClass_100" # ... }
Réductions & Offre Gratuite
1. AWS Free Tier (Toujours gratuit)

Depuis 2021, l'offre gratuite CloudFront est trÚs généreuse et s'applique tous les mois (pas juste la 1Úre année).

  • 1 TB (TĂ©raoctet) de Data Transfer Out / mois.
  • 10 Millions de requĂȘtes HTTP/HTTPS / mois.
  • 2 Millions d'invocations CloudFront Functions.

Suffisant pour 95% des sites personnels ou PME.

2. CloudFront Security Savings Bundle

Si vous dépassez le Free Tier, ne restez pas en "On-Demand".

  • Principe : Vous vous engagez Ă  dĂ©penser un montant minimum (ex: 10$/mois) pendant 1 an.
  • Gain : Jusqu'Ă  30% de rĂ©duction sur la facture CloudFront.
  • Bonus : AWS vous OFFRE le coĂ»t du WAF (Web Application Firewall) Ă  hauteur de 10% de votre engagement.
⚠ Attention aux CoĂ»ts CachĂ©s : Invalidations

Vider le cache manuellement coûte cher si on s'y prend mal.
Tarif : Les 1 000 premiers chemins par mois sont gratuits. Ensuite : 0,005 $ par chemin.

Mauvaise Pratique
aws cloudfront create-invalidation \ --paths "/images/img1.jpg" "/images/img2.jpg" ... (x2000 fichiers)

Ici, vous payez pour 2000 chemins individuels.
Coût : (2000 - 1000) * 0.005 = 5 USD juste pour ça.

Bonne Pratique
aws cloudfront create-invalidation \ --paths "/images/*"

L'utilisation du wildcard * compte pour 1 seul chemin.
Coût : 0 USD (inclus dans le quota gratuit).
InconvĂ©nient : Vous videz peut-ĂȘtre trop de choses.

Checklist d'Optimisation FinOps
ActionImpact FinOpsComplexité
Activer la Compression (Brotli/Gzip)Réduit le volume (GB) de 70% sur le texte/JS/CSS.Facile
Augmenter le TTL (Cache-Control)RĂ©duit le nombre de requĂȘtes vers l'Origine et les refetchs.Facile
Utiliser PriceClass_100Élimine les coĂ»ts Ă©levĂ©s des rĂ©gions "exotiques".Facile
Filtrer les Bots (WAF)EmpĂȘche les robots inutiles de consommer vos requĂȘtes/bande passante.Moyen
Passer de Lambda@Edge à CF FunctionsDivise le coût de calcul par 6.Difficile (Refonte code)
4. Optimisation : Stratégies de Cache Avancées
Séparer les Flux : La clé de la performance

Ne traitez pas une page HTML comme une image JPG. Utilisez des **Behaviors** différents pour appliquer des stratégies distinctes.

TypeExemplesStratégie CacheTTL Recommandé
Statique
(Immutable)
Images, CSS, JS, Fonts, Vidéos (.ts).Agressif.
Ignorer QueryStrings & Cookies.
Min: 1 an
Default: 1 an
Utiliser le versioning (logo-v2.png) pour mettre Ă  jour.
Semi-Dyn
(Mutable)
Page d'accueil (HTML), Catalogue produits (JSON).Modéré.
Varier sur Accept-Language ou Device type.
Default: 60s Ă  1h.
Utiliser "stale-while-revalidate" pour servir du vieux contenu pendant la mise Ă  jour.
Dynamique
(User Specific)
Panier, Profil utilisateur, API POST/PUT.Désactivé (Proxy).
Forward All Headers/Cookies.
TTL: 0s
Policy: CachingDisabled.
Réduire la taille des payloads
1. Algorithmes : Gzip vs Brotli
  • Gzip : Standard historique. Efficace.
  • Brotli (br) : Standard moderne (Google). 20 Ă  30% plus efficace que Gzip sur le texte (CSS/JS/HTML).
Action : Cochez TOUJOURS les deux cases dans votre Cache Policy. CloudFront choisira automatiquement le meilleur selon le navigateur du client.
2. Formats d'Image (AVIF / WebP)

CloudFront ne convertit pas les images nativement (sauf avec Lambda@Edge), mais il gÚre la Négociation de Contenu.

  • Le navigateur envoie : Accept: image/avif, image/webp.
  • Vous devez configurer CloudFront pour Forwarder ce Header Ă  l'origine (S3/Lambda).
  • L'origine renvoie l'image optimisĂ©e.
  • CloudFront met en cache cette version spĂ©cifique pour les clients compatibles.
Cache Policy : Définir la "Cache Key"

C'est ici qu'on décide de la granularité du cache. Plus la clé est précise, moins le hit ratio est élevé.

Composants de la Clé
  • Headers : Inclure Accept-Language si votre site change de langue sans changer d'URL. Sinon, None.
  • Cookies : GĂ©nĂ©ralement None pour du statique. Si vous cachez basĂ© sur un cookie de session, le cache devient inutile (1 utilisateur = 1 cache).
  • Query Strings : None pour les assets (ignorer ?fbclid=...). Whitelist pour les API (?page=1).
PiĂšge Classique

N'utilisez jamais Legacy Cache Settings. Utilisez les nouvelles Policies réutilisables.

Ne cochez pas "Forward All Headers" sauf si vous voulez tuer votre cache (car User-Agent change Ă  chaque mise Ă  jour de Chrome).

La Nuance Critique : Cache vs Origin Request

C'est la distinction la plus importante pour l'architecture CloudFront moderne.

Cache Policy (CP)VSOrigin Request Policy (ORP)
"Qu'est-ce qui modifie le fichier stocké ?""Quelles infos je donne à mon Backend ?"
Exemple : Je n'inclus PAS les cookies Google Analytics.
(Sinon je cache 1 version par visiteur).
Exemple : J'inclus TOUS les cookies Analytics.
(Le backend a besoin de logger la visite, mais CloudFront sert la mĂȘme page Ă  tous).
Impacte le Hit Ratio.Impacte la Logique Backend.
Use Case : Géolocalisation - Cache Policy : Whitelist Header "CloudFront-Viewer-Country". (On a 1 cache par pays). - Origin Request Policy : All Headers. (Le backend reçoit tout le contexte).
Sécurité & CORS (Sans toucher au Backend)

CloudFront peut injecter des en-tĂȘtes HTTP dans la rĂ©ponse aprĂšs qu'elle soit sortie de l'origine.

Headers de Sécurité (Best Practice)
  • HSTS : Strict-Transport-Security: max-age=63072000. Force HTTPS.
  • X-Frame-Options : DENY. Anti-Clickjacking.
  • X-Content-Type-Options : nosniff. Anti-MIME sniffing.
  • Referrer-Policy : strict-origin-when-cross-origin. Privacy.
Gestion du CORS (Cross-Origin)

Indispensable si votre API est sur api.site.com et votre front sur www.site.com.

Access-Control-Allow-Origin: https://www.site.com Access-Control-Allow-Methods: GET, POST, OPTIONS Access-Control-Allow-Credentials: true

Avantage : Vous gérez le CORS au niveau CDN, plus besoin de configurer Nginx/Apache/Express.js pour ça.