S3 Security และ Versioning
เปิดเว็บ ป้องกันโดนลบ และล็อกไฟล์
ฟีเจอร์ Versioning (ระบบเก็บเวอร์ชัน) เหมือนการมีเครื่องถ่ายเอกสารทิ้งร่างเก่าไว้ทุกครั้งที่ใครเซฟทับหรือลบ ถ้าโดนลบผิดไฟล์ คุณก็แค่รื้อถังขยะหยิบร่างเก่าขึ้นมา ส่วน Bucket Policies เหมือนล็อกกุญแจโกดังที่ควบคุมได้ละเอียดมากว่าจะเปิดให้เฉพาะแผนกไหนเข้า
S3 มีเครื่องมือด้านความปลอดภัยที่หลากหลายเพื่อช่วยปกป้องข้อมูลไม่ให้หลุด หรือถูกลบโดยไม่ตั้งใจ
- Block Public Access — ค่าเริ่มต้นของ S3 คือ ปิดล็อก (Private) และกันอินเทอร์เน็ต 100% เพื่อป้องกันคนเผลอเปิดสาธารณะ
- Bucket Policies (นโยบายถัง) — เป็นเอกสาร JSON แนบกับ Bucket (เช่น อนุญาตให้เฉพาะพนักงานกลุ่มนี้โหลด หรือเปิด Public เฉพาะไฟล์ในโฟลเดอร์ภาพ)
- Versioning (เก็บหลายเวอร์ชัน) — ถ้าเปิดแล้ว เวลาโดนใครแก้ไขหรือลบ มันจะจำประวัติทั้งหมดเอาไว้ กู้กลับมา (Restore) ได้ตลอด
- S3 Object Lock — ฟีเจอร์ "ล็อกห้ามลบ" แบบ WORM (Write-Once-Read-Many) แม้แต่แอดมินหรือ Root เข้ามาก็ลบไม่ได้ (ใช้สำหรับการเก็บหลักฐานกฎหมาย)
- Static Website Hosting — คุณสามารถทำให้ถัง S3 ของคุณทำหน้าที่ตัวเผยแพร่เว็บไซต์แบบ Static (เช่น ไฟล์ HTML, React, Angular) สู่โลกอินเทอร์เน็ตได้โดยไม่ต้องรันเซิร์ฟเวอร์เลย (แต่ต้องไปเปิดสิทธิ์ Public)
สรุป Key Takeaways
- ค่า default ของ S3 ปิดกั้นสาธารณะ (Block Public Access) เสมอ
- Versioning กู้กลับจากการถูกลบผิด / Object Lock กุญแจห้ามลบระดับกฎหมาย
- ใช้ S3 host website นิ่ง ๆ (static web) ได้ในราคาถูกมาก
คำถามที่พบบ่อย
เปิด Versioning แล้วค่าเก็บข้อมูลเพิ่มไหม
เพิ่ม เพราะทุกเวอร์ชันของไฟล์ถูกเก็บและคิดเงินทั้งหมด วิธีคุมคือตั้ง Lifecycle Policy ให้ย้ายเวอร์ชันเก่า (noncurrent versions) ไป class ถูกๆ หรือลบทิ้งหลังครบกำหนด เช่น เก็บย้อนหลังแค่ 30 วัน
ลบไฟล์ใน bucket ที่เปิด Versioning แล้วไฟล์หายจริงไหม
ยังไม่หาย — S3 จะวาง delete marker ทับไว้เฉยๆ ทำให้มองไม่เห็นไฟล์ แต่เวอร์ชันเดิมยังอยู่ครบ กู้คืนได้ด้วยการลบ delete marker ออก ไฟล์จะหายถาวรก็ต่อเมื่อสั่งลบโดยระบุ version id ตรงๆ
Bucket Policy กับ IAM Policy ใช้ตัวไหนคุมสิทธิ์ S3 ดี
ใช้ร่วมกันได้ — IAM Policy ผูกกับ "คน/role" (user นี้ทำอะไรได้บ้าง) ส่วน Bucket Policy ผูกกับ "ถัง" (ใครเข้าถังนี้ได้บ้าง) เหมาะกับการเปิด cross-account access หรือบังคับเงื่อนไข เช่น ต้องมาจาก HTTPS เท่านั้น สิทธิ์สุดท้ายคือผลรวมของทั้งคู่ โดย explicit Deny ชนะเสมอ
Presigned URL คืออะไร ใช้ตอนไหน
คือ URL ชั่วคราวที่แนบลายเซ็นสิทธิ์ของเราไว้ ให้คนอื่นดาวน์โหลดหรืออัปโหลดไฟล์ private ได้ภายในเวลาที่กำหนด (เช่น 15 นาที) โดยไม่ต้องเปิด bucket เป็น public — เป็นคำตอบมาตรฐานของโจทย์ "ให้ลูกค้าโหลดไฟล์ส่วนตัวชั่วคราว"
ลองทำ Quiz ท้ายบท
คำถามแนวข้อสอบของโมดูลนี้ 5 ข้อ · เฉลยทันที

