Skip to main content

CloudFront Signed URL / Cookies

An image

สมมติว่าคุณมี 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 → ใช้เข้าถึง ไฟล์เดียว ต่อ 1 URL

    • ถ้ามี 100 ไฟล์ → ต้องสร้าง 100 Signed URLs
  • Signed Cookie → ใช้เข้าถึง หลายไฟล์พร้อมกัน ได้ด้วย Cookie เดียว

    • เหมาะกับการให้สิทธิ์เข้าถึงหลาย ๆ ไฟล์ในครั้งเดียว

เลือกใช้งานตามบริบทของคุณ

วิธีการทำงานของ Signed URLs

  1. คุณมี CloudFront distribution ที่เชื่อมกับ S3 ผ่าน Origin Access Control (OAC) เพื่อความปลอดภัยสูงสุด → ไฟล์ใน S3 จะเข้าถึงไม่ได้โดยตรง ยกเว้นผ่าน CloudFront
  2. ลูกค้าจะ Login และ Authenticate ผ่าน แอปพลิเคชันของคุณ
  3. แอปพลิเคชันจะใช้ AWS SDK เพื่อสร้าง Signed URL จาก CloudFront
  4. Signed URL จะถูกส่งกลับให้ลูกค้า → ลูกค้าสามารถใช้ URL นั้นเข้าถึงไฟล์หรือข้อมูลผ่าน CloudFront ได้โดยตรง

กระบวนการนี้ใช้หลักการเดียวกันสำหรับ Signed Cookies

CloudFront Signed URL vs S3 Pre-Signed URL

คุณสมบัติCloudFront Signed URLS3 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 จะเหมาะกว่า

An image

สรุป

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