CloudFront
Amazon CloudFront
🎯 Sebab Apa Wujud
Wujud sebab kalau user di Jepun ambil gambar dari S3 bucket di Virginia, setiap request kena pergi balik separuh dunia → lambat + origin kena hentam beribu request sama. CloudFront letak salinan content (cache) di 600+ edge location dekat user → request dijawab dari edge terdekat (laju) dan origin kau bernafas (offload). Bonus: dia jadi pintu masuk selamat — boleh kunci content (signed URL/cookie, OAC), block ikut negara, dan jadi tempat WAF/Shield jaga.
Apa Dia
Menghantar content kepada pengguna melalui 600+ edge locations global dengan latency rendah. Cache content dekat dengan user, restrict access (signed URL/cookie, OAC, geo), dan offload origin.
Contoh Guna
Deliver images & videos untuk global users, static website laju, stream private paid media
Signed URL vs S3 Presigned URL
CloudFront Signed URL/Cookie → access private content MELALUI CloudFront (edge-cached, global low latency, boleh restrict by IP range + expiry, guna trusted key group). Untuk serve at scale via CDN.
S3 Presigned URL → direct access ke SATU S3 object, signed dengan IAM credentials orang yang generate (inherit permission dia), takde CDN caching. Untuk one-off upload/download terus ke S3.
Analogi Netflix — Signed URL vs Signed Cookie
Analogi Netflix: pelanggan langgan Netflix nak tengok 10 episod dalam satu folder S3 — guna Signed Cookie: satu cookie bagi akses SEMUA fail tanpa perlu jana URL baru tiap episod. Kalau setakat satu fail (cth muat turun satu installer), Signed URL dah cukup. Dua-dua untuk private content VIA CloudFront; OAC pula untuk kunci bucket S3 supaya kekal private.
CloudFront Signed URL vs S3 Presigned URL
| Aspect | CloudFront Signed URL/Cookie | S3 Presigned URL |
|---|---|---|
| Akses melalui | CloudFront (edge cache, global) | Direct ke S3 (tiada CDN) |
| Sign guna | Trusted key group (public/private key) | IAM creds orang yang generate |
| Permission | Independent dari IAM caller | Inherit permission si-pemberi |
| Skop | URL = 1 file; Cookie = banyak file | 1 object sahaja |
| Extra control | 🟢 Restrict by IP, expiry, geo, caching | Expiry sahaja |
| Best untuk | Serve private media AT SCALE via CDN | One-off upload/download terus ke S3 |
Ingat: Private content ramai user + low latency (paid video, downloads) → CloudFront signed URL/cookie. Bagi satu orang upload/download terus satu file → S3 presigned URL. Nak bucket kekal private tapi serve via CF → OAC + bucket policy (bukan signed URL).
⚡ Quick Sifir — hafal ni
- ▪CDN, cache di edge → laju untuk global user + offload origin
- ▪Private content VIA CloudFront → Signed URL (1 file) / Signed Cookie (banyak file)
- ▪Kunci S3 bucket supaya kekal private tapi serve via CF → OAC (ganti OAI; OAC support SSE-KMS)
- ▪CloudFront cert untuk HTTPS → MESTI di us-east-1
- ▪Block ikut negara → Geo Restriction. Jimat kos → Price Class (100 = paling murah)
- ▪Transform request di edge: ringkas/laju → CloudFront Functions; berat/panggil AWS → Lambda@Edge
💡 Exam Scenario
Serve private paid video globally dengan low latency → CloudFront signed URLs/cookies (cache kat edge + restrict access). BUKAN S3 presigned URL — presigned = direct S3, takde edge caching, takde IP restriction. Untuk serve private S3 objects → OAC + bucket policy (bucket kekal private).
🪤 Perangkap Soalan
Q: Aplikasi nak bagi pelanggan berbayar download SATU installer file secara selamat, expire selepas 1 jam, dan content perlu disampaikan laju ke user global. Pilih apa?
⚠ Umpan: S3 Presigned URL — sebab ia memang untuk bagi akses sementara ke satu S3 object dengan expiry. Nampak betul sebab "satu file + expiry".
✓ Betul: CloudFront Signed URL. Presigned URL pergi DIRECT ke S3 (tiada edge cache, tiada penyampaian global laju, tiada restrict IP). Keyword "laju ke global user / at scale via CDN + private" → CloudFront Signed URL. (Presigned URL betul cuma untuk one-off direct-to-S3 upload/download.)
Q: Nak serve objek S3 PRIVATE melalui CloudFront, dan bucket guna SSE-KMS encryption. Bucket mesti kekal block-public-access. Setup mana?
⚠ Umpan: Guna OAI (Origin Access Identity) + bucket policy bagi akses ke OAI. Nampak betul sebab OAI memang cara klasik kunci bucket untuk CloudFront.
✓ Betul: OAC (Origin Access Control) + bucket policy ke CloudFront service principal. OAI TAK support SSE-KMS — kena OAC. Keyword "S3 origin + SSE-KMS / private bucket via CloudFront" → OAC, bukan OAI.
🧠 Cara Mudah Ingat
- →OAC (Origin Access Control) = GANTI OAI. Wajib guna OAC untuk S3 origins yang guna SSE-KMS. OAI tidak support KMS. Update bucket policy grant s3:GetObject kepada CloudFront service principal.
- →"Serve private S3 objects via CloudFront securely" → OAC + bucket policy. Keep bucket block public access = ON.
- →Signed URL vs signed cookie (dua-dua CloudFront private content): Signed URL = restrict access ke SATU file individual, atau client yang tak support cookies. Signed cookie = restrict access ke BANYAK files (e.g. semua HLS video segments) tanpa tukar URL.
- →CloudFront signed URL vs S3 presigned URL: signed URL serve content via CDN (edge cache, IP restriction, trusted key group); S3 presigned = direct S3 object access guna creator IAM creds. Private content at scale → CloudFront. One-off direct S3 → presigned.
- →Caching / TTL: Minimum / Default / Maximum TTL kawal berapa lama object cached at edge. Origin Cache-Control / Expires headers set freshness; TTL boleh override. Invalidation = force-remove cached object sebelum expiry (berbayar lepas free tier).
- →Geo restriction (geo blocking): allowlist / denylist at COUNTRY level — block/allow user ikut negara. Native CloudFront feature (akurasi ~99.8%). Untuk granularity lebih halus (state/city) → guna third-party geolocation service.
- →Price Classes (cost lever): PriceClass_All (semua edge locations, perf terbaik, mahal), PriceClass_200 (exclude region paling mahal), PriceClass_100 (US/Canada/Europe sahaja, paling murah).
- →Lambda@Edge = run Lambda functions AT CloudFront edge nodes. 4 hooks: Viewer Request, Viewer Response, Origin Request, Origin Response. "Custom auth headers / transform request before origin" → Lambda@Edge
- →Lambda@Edge vs CloudFront Functions: CF Functions = ultra-fast, lightweight JS at viewer level. Lambda@Edge = full Node.js/Python, longer timeout, can call AWS services, runs at origin/viewer events.
Guna Bila
Deliver content laju via edge locations + serve private content securely