đ 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.
Concept : CDN Global & Edge
CloudFront est un CDN mondial, avec des Edge Locations proches des utilisateurs pour réduire la latence.
CDN EdgeConcept : Origins & Behaviors
Association des chemins dâURL aux origines (S3, ALB, API, Custom) via les Cache Behaviors.
Origins BehaviorsConcept : Cache & TTL
Durée de vie du contenu, prise en compte des headers, cookies et query strings.
TTL Cache PolicySécurité : HTTPS & TLS
Certificats ACM, redirection HTTPâHTTPS, politiques TLS modernes.
ACM TLS 1.2+Sécurité : Contenu Privé
Signed URLs & Signed Cookies pour restreindre lâaccĂšs Ă certains fichiers (VOD, documents payants).
Private Content Signed URLSécurité : WAF & Shield
Protection DDoS (Shield) et filtrage applicatif (WAF, rÚgles gérées & IP sets).
AWS WAF ShieldPerf : Edge & Latence
Anycast, réseau AWS, Regional Edge Caches et impact sur le TTFB.
Anycast LatencyPerf : Policies de Cache
Gestion fine des cookies, headers et query strings pour booster le cache hit ratio.
Cache Policy Hit RatioUse Case : Site statique S3
Architecture simple : S3 privé + Origin Access Control + CloudFront + Route53.
S3 Static WebsiteUse Case : API REST
CloudFront devant API Gateway ou ALB pour gérer cache, WAF et TLS globale.
API Gateway ALBUse Case : Streaming Vidéo
Distribution HLS/DASH, segmentation, et multi-régions pour une VOD performante.
HLS VODTarification CloudFront
Data Transfer, nombre de requĂȘtes, invalidations et bonnes pratiques FinOps.
Billing FinOpsLe 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
| Type d'API Gateway | Comportement | Verdict avec CloudFront |
|---|---|---|
| Edge-Optimized | Utilise déjà une distribution CloudFront gérée par AWS (invisible). | Mauvais Double saut (CloudFront -> CloudFront AWS -> API). Latence ajoutée. |
| Regional | Dé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
GETcoû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.
- CloudFront : Ajouter un header origine
X-Origin-Secret: s3cr3t-k3y. - 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.
| Service | RÎle | Intégration CloudFront |
|---|---|---|
| MediaConvert | Transcodage VOD (MP4 -> HLS/DASH). | Dépose les segments (.ts) dans S3. CloudFront les lit depuis S3. |
| MediaPackage | Packaging "Just-in-Time" (JITP) et DRM. | Agit comme une Origine HTTP pour CloudFront. CloudFront cache les segments générés dynamiquement. |
| MediaStore | Stockage 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.
- Intercepte la requĂȘte.
- Vérifie le cookie/header JWT.
- Valide le token auprÚs de Cognito (clé publique).
- 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é.
La Documentation de Référence
Les liens indispensables Ă garder en favoris.
| Ressource | Description | Lien |
|---|---|---|
| Developer Guide La Bible | Le manuel complet. Tout y est : Architecture, Config, Sécurité. Si vous ne devez en lire qu'un, c'est celui-là . | Ouvrir |
| API Reference Backend | Pour les développeurs qui automatisent via Boto3 (Python) ou SDK JS. Liste toutes les méthodes (CreateDistribution, etc.). | Ouvrir |
| CloudFormation Ref DevOps | La syntaxe YAML/JSON pour déployer CloudFront. Indispensable pour comprendre les champs CacheBehavior. | Ouvrir |
đ„ En cas d'urgence : Knowledge Center
AWS maintient des articles spécifiques pour résoudre les erreurs les plus courantes.
Erreur 403 Forbidden
Le classique "Access Denied" sur S3 ou WAF.
- Vérifier OAC/OAI.
- Vérifier WAF Block.
- Vérifier Geo-Blocking.
Erreur 504 Gateway Timeout
L'origine (ALB/EC2) met trop de temps à répondre.
- Vérifier Firewall (Security Group).
- Vérifier Keep-Alive Timeout.
- Application lente.
Erreur 502 Bad Gateway
Ăchec de la connexion SSL entre CloudFront et l'Origine.
Guide SSL/TLS HandshakeAWS re:Post (Forum)
Posez votre question à la communauté et aux ingénieurs AWS.
Accéder au Forum CloudFrontOutils Tiers & Sécurité
Des outils indispensables pour auditer votre distribution.
| Outil | Usage | Lien |
|---|---|---|
| IP Ranges AWS | La liste JSON officielle des IPs CloudFront. Indispensable pour configurer vos Security Groups si vous voulez whitelister CloudFront. | JSON File |
| Security Headers Check | Analysez si votre site envoie bien HSTS, X-Frame-Options, etc. (Note A+). | securityheaders.com |
| SSL Labs | Vérifiez la qualité de votre certificat TLS et de la config CloudFront (Protocoles, Ciphers). | SSLLabs Test |
| KeyCDN Performance Test | Mesurez le TTFB (Latence) de votre site depuis 10 endroits dans le monde. | Speed Test |
Templates & Exemples de Code
Ne partez pas de zéro. Copiez les configs validées par la communauté.
- AWS CDK Lib :
Documentation officielle CDK. - Terraform Registry :
Module aws_cloudfront_distribution. - CloudFormation Templates :
GitHub AWS Labs.
Apprendre par la pratique
đ AWS Workshops
Des ateliers "pas Ă pas" officiels Ă faire dans votre console.
Amazon CloudFront Workshopđș YouTube : AWS Support
ChaĂźne officielle avec des tutos courts ("How to configure OAC", "How to setup WAF").
AWS ChannelBlogs Techniques (Deep Dive)
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éristique | CloudFront Functions (CFF) | Lambda@Edge (L@E) |
|---|---|---|
| Use Case | Manipulations légÚres : Headers, Rewrite URL, Redirections, validation JWT basique. | Logique lourde : AccÚs réseau (API externe), manipulation du Body, Redimensionnement d'image. |
| Runtime | JavaScript (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Ă»t | TrĂšs faible 0.10$ / million. | ĂlevĂ© 0.60$ / million + CoĂ»t durĂ©e (GB-secondes). |
| Triggers | Viewer 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.
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.
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éthode | Complexité | Description |
|---|---|---|
| Signed URLs / Cookies | Moyenne | Standard AWS. Le backend signe, CloudFront vérifie (RSA). TrÚs rapide, pas de code à l'Edge. |
| Lambda Authorizer | Haute | La 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). |
đ 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 ?
- Le client envoie une requĂȘte (ex:
GET /admin). - La requĂȘte arrive Ă l'Edge Location (le point d'entrĂ©e AWS le plus proche).
- 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).
- Si le WAF dit NON (Block), le client reçoit une erreur
403 ForbiddeninstantanĂ©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.
đ ïž 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égorie | Exemples | Action Recommandée |
|---|---|---|
| Verified Bots | Googlebot, Bingbot, Pinterest. | ALLOW (Laisser passer). Ils référencent votre site. |
| Common Bots | Outils SEO (Ahrefs, Semrush), Curl, Wget. | BLOCK ou RATE LIMIT si vous ne voulez pas qu'ils analysent votre site. |
| Bad Bots | Scripts 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
đĄïž 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.
| Shield Standard (Gratuit) |
|
| Shield Advanced (Payant) |
|
đ”ïž 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 ?
La méthode d'investigation via Athena (SQL)
Si vous avez activé les logs WAF (vers S3), voici comment trouver le coupable :
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.
đĄ 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.
| Ătape | Action | DĂ©tail Technique |
|---|---|---|
| 1 | DNS Resolution | L'utilisateur demande www.site.com. Route53 renvoie l'IP de l'Edge Location la plus proche (via Latency-based routing). |
| 2 | Connect & TLS | Le navigateur établit une connexion TCP + TLS avec l'Edge. Gain : Pas de round-trip traversant l'océan. |
| 3 | Cache Check | CloudFront regarde sa clé de cache (URL + QueryString + Headers choisis). HIT : Renvoi immédiat. Fin. MISS : Passage à l'étape 4. |
| 4 | Origin Fetch | CloudFront contacte l'origine (S3/ALB) via le Backbone AWS (réseau privé optimisé, pas l'internet public). |
| 5 | Save & Response | CloudFront 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) seul | S3 + CloudFront (Recommandé) |
|---|---|---|
| HTTPS / SSL | NON (HTTP uniquement ou URL moche s3-website) | OUI (Certificat Custom ACM) |
| Performance | Dé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). |
| Personnalisation | Aucune 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.
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'Origin | Usage Recommandé | Spécificité |
|---|---|---|
| S3 Bucket | Site statique, Images, Vidéos. | Utiliser OAC (voir onglet 4). Haute performance I/O. |
| ALB / EC2 | API, 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 / MediaPackage | Streaming 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.
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 Pattern | Origin | Cache Policy | Explication |
|---|---|---|---|---|
| 0 | /api/payments/* | Secure-ALB | CachingDisabled | Pas de cache pour les paiements. On passe tout (Headers, Cookies, QueryString). |
| 1 | /images/*.jpg | S3-Assets | CachingOptimized | Cache agressif (1 an). Ignore les cookies pour maximiser le Hit Ratio. |
| Default | * | S3-Frontend | CachingOptimized | Le "Catch-all". Sert l'index.html de l'application React/Vue. |
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).
ObsolĂšte (Legacy).
Ne supporte pas : SSE-KMS (chiffrement), requĂȘtes POST/PUT vers S3, ni les rĂ©gions opt-in.
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.
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.
| Phase | Sans 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ĂȘte | Voyage sur l'Internet public (alĂ©atoire). | Voyage sur le rĂ©seau privĂ© AWS (optimisĂ©). |
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.
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.
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.
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
| Type | Format Endpoint | Détails Techniques |
|---|---|---|
| S3 Bucket | bucket.s3.region.amazonaws.com | Mode "REST". Supporte OAC (Sécurité privée). Idéal pour assets statiques. |
| ALB (Load Balancer) | my-alb-123...amazonaws.com | CloudFront 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 / Elemental | Endpoint spécifique vidéo. | Optimisé pour les écritures haute fréquence (Live Streaming). |
| Custom Origin | IP 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.
| Priorité | Path Pattern | Origin | Scénario |
|---|---|---|---|
| 0 | /images/secret/* | S3-Secure | Contenu privĂ©. Auth requise (Signed URL). Si je demande /images/secret/a.jpg, je m'arrĂȘte ici. |
| 1 | /images/* | S3-Public | Contenu public. Cache agressif. Si je demande /images/logo.png, je matche ici (car la rĂšgle 0 ne matche pas). |
| 2 | *.php | EC2-Legacy | Vieux scripts PHP non cachés. |
| Default | * | S3-Frontend | Obligatoire. 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
- Créer un "Origin Group" contenant [Origin A, Origin B].
- Définir les "Failover Criteria" (ex: 500, 502, 503, 504).
- 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 Endpoint | Format | Fonctionnalités | Verdict |
|---|---|---|---|
| REST API Endpoint | bucket.s3.amazonaws.com | Supporte OAC (Bucket Privé) Supporte HTTPS vers l'origine | Recommandé C'est le standard de sécurité. |
| Website Endpoint | bucket.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. |
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) | 24h | CloudFront applique sa valeur par défaut. |
max-age=3600 (1h) | Min=0, Max=1an | 1h | CloudFront respecte l'Origin car c'est dans les bornes. |
max-age=10 (10s) | Min TTL = 60s | 60s | CloudFront force le cache Ă durer plus longtemps que l'Origin ne le voulait (Overrule). |
no-store | N/A | 0s | L'objet n'est jamais écrit sur le disque. |
MaĂźtriser les Headers HTTP
C'est le langage universel du cache web. Voici les directives que CloudFront comprend.
Directive "max-age"
Standard. Dit au navigateur ET au CDN de garder l'objet 1 heure.
Directive "s-maxage" (CDN Only)
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"
Interdiction stricte d'écrire sur le disque. Pour les données bancaires ou personnelles.
Directive "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. |
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
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.
| Politique | Détail | Usage |
|---|---|---|
| TLSv1.2_2021 | Désactive TLS 1.0 et 1.1 (obsolÚtes). | Recommandé (Standard) |
| TLSv1 | Supporte 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éthode | Cas d'usage idéal |
|---|---|
| Signed URL | AccÚs à un seul fichier (ex: lien de téléchargement envoyé par email). |
| Signed Cookie | AccÚs à tout un site ou un dossier (ex: zone membre premium, streaming HLS segmenté). |
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.
- Dans CloudFront (Origin Settings), ajoutez un header custom :
X-Origin-Secret: mon-mot-de-passe-tres-long-12345 - Sur l'ALB (Listener Rule), créez une rÚgle :
IF Header 'X-Origin-Secret' != 'mon-mot-de-passe...' THEN Return 403.
Informer le Navigateur (Response Headers Policy)
CloudFront peut injecter des en-tĂȘtes HTTP pour durcir la sĂ©curitĂ© cĂŽtĂ© client (navigateur).
| Header | Fonction | Pourquoi l'activer ? |
|---|---|---|
| Strict-Transport-Security (HSTS) | Force le navigateur Ă utiliser HTTPS. | ProtĂšge contre le "SSL Stripping" (attaque Man-in-the-Middle). |
| X-Frame-Options | DENY ou SAMEORIGIN. | EmpĂȘche votre site d'ĂȘtre affichĂ© dans une iframe (Anti-Clickjacking). |
| X-Content-Type-Options | nosniff. | 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.
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.
| # | Action | Détail Technique |
|---|---|---|
| 1 | Certificat | Demander un certificat public dans AWS ACM (Gratuit). Voir onglet 2 pour la région. |
| 2 | Alternate Domain | Dans CloudFront (General Settings), ajouter www.monsite.com dans le champ CNAMEs. |
| 3 | Attacher Cert | Sélectionner "Custom SSL Certificate" et choisir le cert ACM créé à l'étape 1. |
| 4 | Route 53 | Créer un enregistrement A (Alias) pointant vers la distribution CloudFront. |
| 5 | Forcer HTTPS | Dans 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.
| Option | Technique | Coût | Verdict |
|---|---|---|---|
| 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. | Gratuit | Standard 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 / distribution | Danger 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.
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
- L'utilisateur se logue sur votre app (ex: Django/Node).
- Votre backend vérifie qu'il a payé.
- Votre backend génÚre une URL Signée (avec une clé privée RSA).
- Le backend renvoie l'URL au navigateur :
https://cdn.site.com/doc.pdf?Signature=... - L'utilisateur clique. CloudFront vérifie la signature avec la Clé Publique.
- 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
La méthode moderne (2024+) :
- Générer une paire RSA (Local) :
openssl genrsa -out private_key.pem 2048openssl rsa -pubout -in private_key.pem -out public_key.pem - Uploader la Clé Publique :
Dans la console CloudFront > Public keys. - Créer un Key Group :
Grouper une ou plusieurs clés publiques (pour permettre la rotation de clés sans downtime). - 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.
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
Le piÚge : Si vous dites à CloudFront de "Tout forwarder" (Query Strings, Headers), la moindre variation crée une nouvelle clé.
/page?user=Avs/page?user=Bâ 2 caches diffĂ©rents (MISS).User-Agent: iPhonevsUser-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 Policy | Comportement | Usage Recommandé |
|---|---|---|
| CachingOptimized | Active la compression Brotli/Gzip. Ignore QueryStrings & Cookies. TTL Long. | Pour 90% des assets statiques (Images, CSS, JS). |
| CachingDisabled | Pas 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-MediaPackage | Optimisé 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éristique | CloudFront Functions (CFF) | Lambda@Edge |
|---|---|---|
| Coût | TrÚs faible (1/6 du prix de Lambda). | Standard Lambda + surcoût. |
| Latence | Sub-milliseconde (Immédiat). | Quelques ms à 100ms (Cold starts possibles). |
| Limites | JS pur, pas d'accÚs réseau/AWS, pas de body. | AccÚs complet (S3, DynamoDB, Réseau), accÚs au Body. |
| Use Case | Normalisation 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).
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éristique | Standard Logs (S3) | Real-Time Logs (Kinesis) |
|---|---|---|
| Délai | Lent (livré toutes les 10 à 30 min). | Immédiat (quelques secondes). |
| Coût | Gratuit (juste le stockage S3). | Payant (Coût Kinesis + Stockage). |
| Champs | Tous les champs disponibles. | Configurable (on choisit les champs). |
| Usage | Audit, Analyse post-mortem, Facturation. | Monitoring live, Blocage d'IP dynamique. |
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étrique | Seuil recommandé | Signification |
|---|---|---|
| 5xxErrorRate | > 1% pendant 5 min | CRITIQUE. L'origine plante ou timeout. |
| 4xxErrorRate | > 5% pendant 5 min | Liens 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.
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 !).
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 Class | Régions Incluses | Impact 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é. |
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
Ici, vous payez pour 2000 chemins individuels.
Coût : (2000 - 1000) * 0.005 = 5 USD juste pour ça.
Bonne Pratique
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
| Action | Impact FinOps | Complexité |
|---|---|---|
| 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 Functions | Divise le coût de calcul par 6. | Difficile (Refonte code) |
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)
| Action | Internet Public | Via CloudFront |
|---|---|---|
| Distance Physique | ~6 000 km | ~10 km (Edge local) |
| Ping (RTT) | 80 ms | 2 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). |
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.
| Technologie | Effet |
|---|---|
| TCP Fast Open | Permet 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-RTT | Reprise de session instantanée pour les utilisateurs qui reviennent (0 Round Trip Time). |
| TCP Window Scaling | Agrandit 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". |
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
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-Agentdans 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 Policy | ID (Approximatif) | Configuration | Usage 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. |
| CachingDisabled | 4135ea2d-... | - TTL : 0 (Pas de cache) - Forward tout vers l'origine. | API dynamiques, WebSockets, contenus temps réel. |
| Amplify | 2e54312a-... | 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).
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égie | Comportement | Impact 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 ?
- Le navigateur envoie
Accept-Encoding: gzip, br. - CloudFront voit "br", compresse le fichier en Brotli, le met en cache et l'envoie.
- Le prochain client reçoit directement la version Brotli depuis l'Edge.
- Note : CloudFront ne compresse pas les images (déjà compressées) ni les fichiers > 10MB.
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 :
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
- Créer une distribution.
- Origin Domain : Choisir le bucket S3.
- Origin Access : Sélectionner "Origin Access Control settings".
- Cliquer sur "Create control setting".
CÎté S3
- Aller dans "Permissions".
- Block Public Access : Tout cocher (ON).
- 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.
| Service | Action |
|---|---|
| ACM | Certificat SSL généré en us-east-1 (Obligatoire). |
| CloudFront | 1. Ajouter www.monsite.com dans "Alternate Domain Names (CNAMEs)". 2. Sélectionner le certificat ACM. |
| Route 53 | Créer un Record Type A. Cocher "Alias" = Oui. Choisir "Alias to CloudFront distribution". |
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
Hostde la requĂȘte originale pour que l'ALB puisse faire son routing (Host-based routing). - Policy : Utiliser
AllViewerExceptHostHeaderou une policy custom.
Scénario B : CloudFront + API Gateway
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 Route | Exemple | Stratégie Recommandée |
|---|---|---|
| Donnée Utilisateur | GET /me/profileGET /orders | CachingDisabled Ne JAMAIS cacher. Risque que l'utilisateur A voie le profil de B. |
| Catalogue Public | GET /productsGET /categories | CachingOptimized TTL court (ex: 60s). Réduit la charge DB de 90% lors des pics de trafic. |
| Mutations | POST, PUT, DELETE | Auto (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 :
2. CÎté ALB (Listener Rule)
Ajouter une rĂšgle prioritaire :
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Ăšme | SymptĂŽme | Solution |
|---|---|---|
| 504 Gateway Timeout | L'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 Gateway | Erreur de handshake TLS entre CloudFront et ALB. | Vérifier que le certificat sur l'ALB est valide et correspond au domaine visé. |
| Latence Intermittente | Connexions TCP qui se ferment trop vite. | Augmenter le Keep-Alive Timeout sur l'ALB pour qu'il soit supérieur à celui de CloudFront (60s). |
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
.m3u8et des segments.ts. - MPEG-DASH : Standard ouvert. Utilise des manifestes
.mpdet des segments.m4s.
Le principe de l'ABR
- La vidéo est encodée en plusieurs qualités (1080p, 720p, 360p).
- Chaque qualité est découpée en petits morceaux de 2 à 6 secondes (Segments).
- Le lecteur vidéo (Player) télécharge le "Manifeste" (la carte).
- 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.
| Ătape | Service AWS | Action |
|---|---|---|
| 1. Source | S3 (Raw) | Upload du fichier maßtre haute qualité (Mezzanine file). |
| 2. Transcodage | MediaConvert | Convertit le fichier en HLS + DASH avec plusieurs "Renditions" (High, Med, Low). Découpe en segments. |
| 3. Stockage | S3 (Public/Privé) | Stocke les milliers de petits fichiers (.ts, .m3u8) générés. |
| 4. Delivery | CloudFront | Cache 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 ?
| Niveau | Solution | Efficacité |
|---|---|---|
| Basique | Referer Check (WAF) | Bloque si la vidéo n'est pas jouée sur monsite.com. Facilement contournable. |
| Intermédiaire | Signed Cookies | L'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. |
| Hollywood | DRM (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.
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 !).
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 Class | Régions Incluses | Impact 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é. |
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
Ici, vous payez pour 2000 chemins individuels.
Coût : (2000 - 1000) * 0.005 = 5 USD juste pour ça.
Bonne Pratique
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
| Action | Impact FinOps | Complexité |
|---|---|---|
| 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 Functions | Divise le coût de calcul par 6. | Difficile (Refonte code) |
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.
| Type | Exemples | Stratégie Cache | TTL 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).
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-Languagesi 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) | VS | Origin 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. |
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.
Avantage : Vous gérez le CORS au niveau CDN, plus besoin de configurer Nginx/Apache/Express.js pour ça.
