AWS DVA-C02
Esc
↑↓เลื่อน↵เปิดescปิด28 ผลลัพธ์
11

Amazon S3 Security

เจาะลึก Encryption, CORS, MFA Delete, Pre-Signed URLs, Access Points และ Object Lambda สำหรับ DVA-C02

Storage 22 นาที 20 คำถาม

01ภาพรวม S3 Encryption (4 วิธี + Client-Side)

Amazon S3 รองรับการเข้ารหัส object ได้หลายวิธี โดยแบ่งเป็น Server-Side Encryption (SSE) ที่ S3 เข้ารหัสให้ฝั่ง server และ Client-Side Encryption ที่ client เข้ารหัสเองก่อนส่งขึ้น S3 จุดที่ต้องจำคือ ตั้งแต่เดือนมกราคม 2023 เป็นต้นมา S3 จะเข้ารหัส object ใหม่ทุกชิ้นด้วย SSE-S3 เป็นค่า default โดยอัตโนมัติ

  • SSE-S3 — S3-Managed Keys: S3 จัดการ key ให้เองด้วย AES-256 (ค่า default ปัจจุบัน)
  • SSE-KMS — AWS KMS-Managed Keys: ควบคุม key เองและ audit การใช้งานผ่าน CloudTrail
  • DSSE-KMS — Dual-layer Server-Side Encryption with KMS: เข้ารหัส 2 ชั้น
  • SSE-C — Customer-Provided Keys: ลูกค้าส่ง encryption key มาเองในแต่ละ request
  • Client-Side Encryption — เข้ารหัสฝั่ง client เองก่อน upload (ใช้ Amazon S3 Client-Side Encryption Library)
Tip ข้อสอบ
ถ้าโจทย์ถามว่า "วิธีไหนเป็น default encryption ของ S3" คำตอบคือ SSE-S3 (AES-256) ถ้าถามว่า "วิธีไหน audit ได้ว่าใครเรียกใช้ key เมื่อไหร่" คำตอบคือ SSE-KMS (เพราะมี CloudTrail trail การเรียก KMS)

02เจาะลึก SSE-S3, SSE-KMS, DSSE-KMS

SSE-S3 (Amazon S3-Managed Keys)
เข้ารหัสฝั่ง server ด้วย key ที่ Amazon S3 จัดการให้ทั้งหมด (AES-256) เป็นค่า default ของทุก bucket ระบุผ่าน header x-amz-server-side-encryption: AES256 ไม่ต้องดูแล key เอง แต่ก็ควบคุม/audit การใช้ key ไม่ได้
SSE-KMS (AWS KMS-Managed Keys)
เข้ารหัสด้วย AWS KMS key ทำให้ควบคุมสิทธิ์ผ่าน key policy และ audit ผ่าน CloudTrail ได้ ระบุ header aws:kms ข้อควรระวัง: ทุกครั้งที่ upload/download จะเรียก KMS API ซึ่งมี quota และอาจโดน throttling
S3 Bucket Key (ลดการเรียก KMS)
ฟีเจอร์ที่ให้ S3 สร้าง bucket-level key ไว้เข้ารหัส object ภายใน ลดจำนวนการเรียก KMS API ได้ถึง ~99% ช่วยลดค่าใช้จ่ายและปัญหา throttling เมื่อใช้ SSE-KMS กับ object จำนวนมาก
DSSE-KMS (Dual-layer)
Dual-layer server-side encryption ด้วย KMS — เข้ารหัสข้อมูลสองชั้นเพื่อให้ตรงตามข้อกำหนด compliance ที่เข้มงวด (เช่นงานภาครัฐ)
กับดักข้อสอบ
ถ้าโจทย์บอกว่า S3 application เจอ ThrottlingException หรือ 503 Slow Down เวลาเข้าถึง object ที่เข้ารหัสด้วย KMS จำนวนมาก อย่าเพิ่งตอบว่าให้เปลี่ยนเป็น SSE-S3 ทันที คำตอบที่ถูกต้องตามคอร์สคือ เปิด S3 Bucket Key เพื่อลดการเรียก KMS API หรือขอเพิ่ม KMS quota

03SSE-C และ Client-Side Encryption

SSE-C (Customer-Provided Keys)
ลูกค้า ส่ง encryption key มาเองในทุก request (S3 ไม่เก็บ key) S3 ใช้ key เข้ารหัส/ถอดรหัสแล้วทิ้งทันที บังคับใช้ HTTPS และต้องแนบ key มากับทุกครั้งที่อ่าน/เขียน
Client-Side Encryption
เข้ารหัสข้อมูลที่ฝั่ง client ก่อนอัปโหลดขึ้น S3 (S3 เห็นเป็น ciphertext ล้วน) ลูกค้าจัดการ key และการเข้ารหัส/ถอดรหัสเองทั้งหมด
วิธีใครจัดการ KeyHeader / ตำแหน่งเข้ารหัสจุดเด่น
SSE-S3AWS (S3)x-amz-server-side-encryption: AES256default, ง่ายที่สุด
SSE-KMSลูกค้า + KMSaws:kmscontrol + audit ผ่าน CloudTrail
DSSE-KMSลูกค้า + KMSaws:kms:dsseเข้ารหัส 2 ชั้น (compliance)
SSE-Cลูกค้า (ส่งมาเอง)key ใน HTTP header ต้อง HTTPSS3 ไม่เก็บ key
Client-Sideลูกค้า (ฝั่ง client)เข้ารหัสก่อน uploadS3 ไม่เห็นข้อมูลจริง
Tip ข้อสอบ
คีย์เวิร์ดแยกข้อ: "S3 must not store the key" + "HTTPS required" + "key in every request" = SSE-C ส่วน "encrypt before sending / S3 never sees plaintext" = Client-Side Encryption

04Default Encryption & การบังคับเข้ารหัสด้วย Bucket Policy

เราสามารถตั้ง Default Encryption ที่ระดับ bucket ได้ ซึ่งจะเข้ารหัส object ใหม่อัตโนมัติ แต่ถ้าต้องการ บังคับ (enforce) ให้ทุก object ต้องเข้ารหัสด้วยวิธีที่กำหนด หรือป้องกันไม่ให้ upload object ที่ไม่เข้ารหัส ต้องใช้ Bucket Policy

  • ลำดับการประเมิน: Bucket Policy ถูกประเมิน ก่อน Default Encryption setting
  • ใช้ policy แบบ Deny PutObject ถ้า header การเข้ารหัสไม่ตรงเงื่อนไข
  • เงื่อนไขใช้ key เช่น s3:x-amz-server-side-encryption หรือ s3:x-amz-server-side-encryption-aws-kms-key-id
  • บังคับ SSE-C ได้ด้วยการเช็ค s3:x-amz-server-side-encryption-customer-algorithm
หมายเหตุ
ถ้าต้องการบังคับ SSE-S3 ให้เปลี่ยนค่าเงื่อนไขเป็น "AES256" หรือถ้าต้องการ deny request ที่ไม่ระบุ header เลย สามารถใช้ Null condition กับ key s3:x-amz-server-side-encryption ได้

05S3 CORS (Cross-Origin Resource Sharing)

CORS เป็นกลไกความปลอดภัยของ web browser ที่อนุญาตให้ request ไปยัง origin อื่นได้ตามที่กำหนด Origin ประกอบด้วย scheme (protocol) + host (domain) + port การร้องขอข้าม origin (cross-origin) จะถูก browser บล็อกเว้นแต่ origin ปลายทางจะอนุญาตผ่าน CORS headers

  • ถ้า web app ที่ origin หนึ่งเรียก file จาก S3 ที่อีก origin หนึ่ง ต้องตั้งค่า CORS ที่ S3 bucket ปลายทาง (cross-origin bucket)
  • Browser จะส่ง preflight OPTIONS request เพื่อถามก่อนว่า origin นี้ได้รับอนุญาตไหม
  • S3 ตอบกลับด้วย header เช่น Access-Control-Allow-Origin, Access-Control-Allow-Methods
  • ตั้งค่า CORS เป็น JSON (รูปแบบใหม่) หรือ XML (รูปแบบเดิม)
กับดักข้อสอบ
เมื่อโจทย์บอกว่า web app บน bucket A เรียก asset จาก bucket B แล้วเจอ error "CORS" ในเบราว์เซอร์ คำตอบที่ถูกคือ ไปตั้งค่า CORS ที่ bucket B (bucket ปลายทาง) ไม่ใช่ bucket A และค่า AllowedOrigins ต้องตรงกับ origin ของ bucket A (รวม scheme/protocol ด้วย เช่น https:// ต้องตรง)

06S3 MFA Delete & S3 Access Logs

S3 MFA Delete
บังคับใส่รหัส MFA เมื่อจะ ลบ object version ถาวร หรือปิด versioning เพื่อกันการลบโดยไม่ตั้งใจ/ประสงค์ร้าย ต้องเปิด versioning ก่อน และเปิด/ปิดได้เฉพาะ root account ผ่าน CLI เท่านั้น
S3 Access Logs
บันทึก log ทุก request ที่เข้าถึง bucket ไปเก็บใน bucket ปลายทางอีกใบ (ห้ามชี้กลับ bucket เดิมเพราะจะเกิด loop) ใช้สำหรับ audit และวิเคราะห์การเข้าถึง
กับดักข้อสอบ
MFA Delete ตั้งค่าได้ผ่าน CLI เท่านั้น และ เฉพาะ root user ถ้าโจทย์บอกว่า IAM admin ใช้ Console เปิด MFA Delete ไม่ได้ นั่นคือพฤติกรรมปกติ ไม่ใช่ bug และอย่าลืมว่าต้อง เปิด Versioning ก่อน

07S3 Pre-Signed URLs

Pre-Signed URL คือ URL ชั่วคราวที่สร้างขึ้นเพื่อให้ผู้รับ download หรือ upload object ได้โดย สืบทอดสิทธิ์ (permissions) ของผู้สร้าง URL มีอายุจำกัด (expiration) ใช้สำหรับให้สิทธิ์ชั่วคราวแก่ผู้ที่ไม่มี AWS credentials

  • ผู้ที่ได้ pre-signed URL จะมี สิทธิ์เท่ากับ IAM principal ที่สร้าง URL สำหรับ GET หรือ PUT นั้น
  • กำหนด expiration ได้: ผ่าน S3 Console = 1 นาที ถึง 12 ชั่วโมง, ผ่าน CLI/SDK = สูงสุด 168 ชั่วโมง (7 วัน)
  • Use case: ให้เฉพาะ user ที่ login แล้วดาวน์โหลดไฟล์จาก bucket ที่ private, ให้ user อัปโหลดไฟล์ไปยัง path ที่กำหนด, ให้ดาวน์โหลด premium content ชั่วคราว
  • สร้างได้ด้วย AWS SDK หรือ CLI
Tip ข้อสอบ
เมื่อโจทย์ต้องการให้ผู้ใช้ที่ไม่มี AWS account ดาวน์โหลด/อัปโหลด object แบบ private ชั่วคราว และให้ใช้สิทธิ์ของ application/user ที่สร้าง URL คำตอบคือ Pre-Signed URL จำตัวเลขสำคัญ: CLI/SDK สร้างได้ยาวสุด 7 วัน (168 ชม.)

08S3 Access Points

S3 Access Points ช่วยให้จัดการ access control ของ bucket ขนาดใหญ่ที่มีหลาย use case ได้ง่ายขึ้น แทนที่จะมี bucket policy เดียวที่ซับซ้อนมาก เราสร้าง access point แยกตาม use case โดยแต่ละ access point มี DNS name และ policy ของตัวเอง

  • แต่ละ access point มี own access point policy (คล้าย bucket policy) จัดการง่ายในระดับขนาดใหญ่
  • ตัวอย่าง: access point หนึ่งให้สิทธิ์ R/W ที่ prefix /finance อีกอันให้ R/W ที่ /sales
  • มี DNS name เฉพาะ (Internet origin หรือ VPC origin)
  • VPC Origin: จำกัดให้เข้าถึง access point ได้จากภายใน VPC เท่านั้น ต้องสร้าง VPC Endpoint เพื่อเข้าถึง และ VPC Endpoint Policy ต้องอนุญาตการเข้าถึง target bucket + access point
หมายเหตุ
Access Point ช่วยให้ security policy เรียบง่ายขึ้น เราย้าย logic การให้สิทธิ์ที่ซับซ้อนจาก bucket policy เดียวไปยัง access point policy หลายๆ ตัว แต่ละตัวดูแล use case ของตัวเอง

09S3 Object Lambda

S3 Object Lambda ใช้ AWS Lambda function เพื่อ แปลงข้อมูลของ object ตอนที่ถูกเรียก (GET/HEAD/LIST) ก่อนส่งกลับไปยัง application โดยใช้ข้อมูลจริงเพียงชุดเดียวใน S3 แต่ให้แต่ละ application เห็นมุมมองข้อมูลที่ต่างกันได้ ทำงานร่วมกับ S3 Access Point เสมอ

  • ต้องสร้าง S3 Access Point ก่อน แล้วสร้าง Object Lambda Access Point ที่ชี้ไปยัง access point นั้น
  • Use case: redact ข้อมูลส่วนบุคคล (PII) สำหรับ analytics, convert รูปแบบไฟล์ (XML→JSON), resize/watermark รูปภาพแบบ on-the-fly, เติมข้อมูลจากฐานข้อมูลอื่น
  • ข้อดี: ไม่ต้องเก็บข้อมูลหลายชุด (single source of truth) ลดการทำ derivative copies
Tip ข้อสอบ
ถ้าโจทย์บอกว่า "ต้องการให้ analytics app เห็นข้อมูลที่ลบ PII ออก แต่ marketing app เห็นข้อมูลเต็ม โดยใช้ object เดียวกัน ไม่อยากทำสำเนาหลายชุด" คำตอบคือ S3 Object Lambda (ใช้ Lambda redact ตอน GET) อย่าสับสนกับ Access Point ธรรมดา ซึ่งแค่จัดการ access ไม่ได้แปลงข้อมูล

10สรุปประเด็นออกสอบ (Exam Cram)

Keywords ที่ต้องจำเพื่อแยกคำตอบ

  • Default + ง่ายสุด = SSE-S3 (AES256)
  • ต้องการ audit ใครใช้ key / control key = SSE-KMS
  • KMS throttling / 503 SlowDown = เปิด S3 Bucket Key
  • compliance double encryption = DSSE-KMS
  • ลูกค้าส่ง key เองทุก request + HTTPS = SSE-C
  • ให้สิทธิ์ชั่วคราว download/upload ใช้ permission ผู้สร้าง = Pre-Signed URL (CLI/SDK ได้สูงสุด 7 วัน)
  • Browser cross-origin error เรียกไฟล์จากอีก bucket = ตั้ง CORS ที่ bucket ปลายทาง
  • ป้องกันลบถาวร + ปิด versioning = MFA Delete (root + CLI เท่านั้น, ต้องเปิด versioning ก่อน)
  • จัดการ access หลาย use case บน bucket ใหญ่ + VPC only = S3 Access Points
  • แปลง/redact/resize ข้อมูลตอน GET = S3 Object Lambda
กับดักที่เจอบ่อย
อย่าสับสน: bucket policy ถูกประเมินก่อน default encryption; CORS ตั้งที่ bucket ปลายทาง (ไม่ใช่ต้นทาง); MFA Delete ใช้ root + CLI เท่านั้น; SSE-C บังคับ HTTPS และทำผ่าน Console ไม่ได้; Object Lambda ต้องมี Access Point เสมอ

คำถามทบทวน

ทดสอบความเข้าใจหัวข้อ Amazon S3 Security

20 ข้อ · เลือกคำตอบเพื่อดูเฉลยและคำอธิบาย

ทำแล้ว 0/20คะแนน 0
  1. 1.บริษัทต้องการตรวจสอบ (audit) ได้ว่าใครเรียกใช้ encryption key เพื่อถอดรหัส object ใน S3 เมื่อไหร่ และต้องการควบคุม key rotation เอง ควรใช้วิธีเข้ารหัสแบบใด

  2. 2.Application เก็บ object เข้ารหัสด้วย SSE-KMS และมี traffic การ GET/PUT สูงมาก เริ่มเจอ error ThrottlingException จาก KMS ควรแก้ไขอย่างไรให้กระทบน้อยที่สุด

  3. 3.ลูกค้าต้องการให้ S3 ไม่จัดเก็บ encryption key เลย และจะส่ง key มาเองในทุก request ข้อใดถูกต้องเกี่ยวกับ SSE-C

  4. 4.Web application ที่ host บน https://app.example.com พยายามโหลดไฟล์ JavaScript จาก S3 bucket อีกตัว แต่ browser แสดง CORS error ควรแก้ไขที่ใด

  5. 5.ต้องการบังคับให้ทุก object ที่ upload เข้า bucket ต้องเข้ารหัสด้วย SSE-KMS เท่านั้น ถ้าไม่ระบุให้ปฏิเสธ ควรทำอย่างไร

  6. 6.ต้องการให้ผู้ใช้ที่ไม่มี AWS credentials สามารถ download ไฟล์ private จาก S3 ได้ชั่วคราวเป็นเวลา 2 ชั่วโมง โดยใช้สิทธิ์ของ application ควรใช้สิ่งใด

  7. 7.ระยะเวลาหมดอายุสูงสุดของ S3 Pre-Signed URL ที่สร้างผ่าน AWS SDK/CLI คือเท่าใด

  8. 8.ข้อใดเป็นข้อกำหนดของการเปิดใช้งาน S3 MFA Delete

  9. 9.องค์กรต้องการให้ analytics team เห็นข้อมูลที่ถูกลบ PII ออก ขณะที่ team อื่นเห็นข้อมูลเต็ม โดยใช้ object เดียวกันใน S3 และไม่ต้องการเก็บสำเนาหลายชุด ควรใช้บริการใด

  10. 10.Bucket ขนาดใหญ่มีหลาย use case (finance, sales) ต้องการให้แต่ละทีมมี policy การเข้าถึงเฉพาะ prefix ของตน และบางทีมเข้าถึงได้จาก VPC เท่านั้น ควรใช้สิ่งใด

  11. 11.header ใดที่ต้องระบุเมื่อต้องการ upload object โดยใช้ SSE-S3 อย่างชัดเจน

  12. 12.บริษัทมีข้อกำหนด compliance ที่ต้องการเข้ารหัสข้อมูลแบบสองชั้น (double-layer) โดยใช้ KMS ควรใช้วิธีใด

  13. 13.เมื่อตั้งค่า S3 Access Logs ควรตั้ง target bucket (bucket ที่เก็บ log) อย่างไร

  14. 14.ข้อใดอธิบาย Client-Side Encryption ได้ถูกต้องที่สุด

  15. 15.Pre-Signed URL ที่สร้างโดย IAM user ที่มีสิทธิ์ GetObject จะให้ผู้รับ URL ทำอะไรได้

  16. 16.เมื่อต้องการเข้าถึง S3 Access Point ที่ตั้งค่าเป็น VPC origin จาก resource ภายใน VPC ต้องมีสิ่งใด

  17. 17.ลำดับการประเมินระหว่าง Bucket Policy และ Default Encryption setting เป็นอย่างไรเมื่อ object ถูก upload

  18. 18.ตั้งแต่เดือนมกราคม 2023 S3 เข้ารหัส object ใหม่ทุกชิ้นด้วยวิธีใดเป็นค่า default

  19. 19.browser ส่ง request แบบใดก่อนทำ cross-origin request จริงเพื่อตรวจว่า origin ได้รับอนุญาตหรือไม่

  20. 20.use case ใดเหมาะสมที่สุดสำหรับ S3 Object Lambda