CloudFront Signed URL / Cookies

สมมติว่าคุณมี CloudFront distribution และต้องการทำให้เป็น private เพื่อควบคุมการเข้าถึง เช่น การให้สิทธิ์เฉพาะผู้ใช้ที่ชำระเงินเพื่อดู คอนเทนต์พรีเมียม ทั่วโลก และคุณยังต้องการ ติดตามว่าใครเข้าถึงไฟล์อะไร บน CloudFront ด้วย
สำหรับการใช้งานลักษณะนี้ คุณสามารถใช้ CloudFront Signed URL หรือ Signed Cookie ได้
เวลาเราสร้าง Signed URL หรือ Signed Cookie จะต้องแนบ Policy ไปด้วย ซึ่ง Policy จะระบุว่า:
- URL หรือ Cookie จะหมดอายุเมื่อไร
- ช่วง IP ไหนที่เข้าถึงได้
- Trusted Signers คือใคร (บัญชี AWS ไหนที่สามารถสร้าง Signed URL ให้ผู้ใช้งานได้)
ถ้าคุณรู้ IP ของลูกค้า ที่จะเข้าถึง ก็ควรใส่เงื่อนไขนั้นไว้ใน Policy เพื่อเพิ่มความปลอดภัย
อีกคำถามที่สำคัญคือ “URL ควรใช้งานได้นานแค่ไหน?”
- ถ้าเป็นไฟล์ หนังหรือเพลง ที่ต้องการแชร์สั้น ๆ → อาจให้ URL ใช้งานได้ไม่กี่นาที
- ถ้าเป็นไฟล์ ส่วนตัวของผู้ใช้ ที่ต้องเข้าถึงระยะยาว → อาจตั้งให้ Signed URL หรือ Cookie ใช้ได้เป็น ปี
ความแตกต่างระหว่าง Signed URL และ Signed Cookie
-
Signed URL → ใช้เข้าถึง ไฟล์เดียว ต่อ 1 URL
- ถ้ามี 100 ไฟล์ → ต้องสร้าง 100 Signed URLs
-
Signed Cookie → ใช้เข้าถึง หลายไฟล์พร้อมกัน ได้ด้วย Cookie เดียว
- เหมาะกับการให้สิทธิ์เข้าถึงหลาย ๆ ไฟล์ในครั้งเดียว
เลือกใช้งานตามบริบทของคุณ
วิธีการทำงานของ Signed URLs
- คุณมี CloudFront distribution ที่เชื่อมกับ S3 ผ่าน Origin Access Control (OAC) เพื่อความปลอดภัยสูงสุด → ไฟล์ใน S3 จะเข้าถึงไม่ได้โดยตรง ยกเว้นผ่าน CloudFront
- ลูกค้าจะ Login และ Authenticate ผ่าน แอปพลิเคชันของคุณ
- แอปพลิเคชันจะใช้ AWS SDK เพื่อสร้าง Signed URL จาก CloudFront
- Signed URL จะถูกส่งกลับให้ลูกค้า → ลูกค้าสามารถใช้ URL นั้นเข้าถึงไฟล์หรือข้อมูลผ่าน CloudFront ได้โดยตรง
กระบวนการนี้ใช้หลักการเดียวกันสำหรับ Signed Cookies
CloudFront Signed URL vs S3 Pre-Signed URL
| คุณสมบัติ | CloudFront Signed URL | S3 Pre-Signed URL |
|---|---|---|
| Origin | ใช้ได้กับ S3, HTTP backend หรือ ทุก origin | ใช้กับ S3 โดยตรง เท่านั้น |
| สิทธิ์การเข้าถึง | ใช้ Key Pair ของ Account (เฉพาะ Root Account จัดการได้) | สิทธิ์เหมือนกับ IAM ที่สร้าง URL |
| Policy | รองรับการกรองตาม IP, Path, วันหมดอายุ | จำกัดอายุการใช้งานของ URL |
| Caching | ใช้งานร่วมกับ CloudFront Cache ได้เต็มที่ | ไม่มี caching ของ CloudFront |
| การใช้งานเหมาะสม | ใช้เมื่อผู้ใช้เข้าถึง ผ่าน CloudFront | ใช้เมื่อผู้ใช้เข้าถึง S3 โดยตรง |
👉 ถ้า S3 ของคุณถูกตั้งค่าให้เข้าถึงได้เฉพาะ ผ่าน CloudFront (OAI/OAC) → ต้องใช้ CloudFront Signed URL 👉 ถ้าผู้ใช้เข้าถึง S3 โดยตรง → ใช้ S3 Pre-Signed URL จะเหมาะกว่า

สรุป
- CloudFront Signed URL / Signed Cookie → ใช้ควบคุมการเข้าถึง คอนเทนต์ส่วนตัวหรือพรีเมียม ทั่วโลก
- Signed URL → ใช้สำหรับ ไฟล์เดียว
- Signed Cookie → ใช้สำหรับ หลายไฟล์พร้อมกัน
- CloudFront Signed URL → เหมาะสำหรับใช้งานกับ CloudFront (รองรับหลาย origin, policy ละเอียด, caching)
- S3 Pre-Signed URL → เหมาะสำหรับการเข้าถึง S3 โดยตรง (ไม่ผ่าน CloudFront)