Amazon S3
Object Storage หลักของ AWS: Buckets, Security, Versioning, Replication และ Storage Classes สำหรับสอบ DVA-C02
01S3 Overview: Buckets และ Objects
Amazon S3 (Simple Storage Service) เป็นบริการ object storage ที่ออกแบบให้เก็บข้อมูลได้แบบไม่จำกัด (infinitely scaling) เป็นหนึ่งใน building block หลักของ AWS ใช้ทำ backup, disaster recovery, data lake, static website, media hosting และอื่นๆ
Buckets
- ข้อมูลถูกเก็บใน buckets (เปรียบเสมือน top-level directory)
- ชื่อ bucket ต้อง globally unique (ไม่ซ้ำกับใครในทุก account ทุก region ทั่วโลก)
- Bucket ถูกสร้างที่ระดับ region (region-level) แม้ชื่อจะ global
- กฎการตั้งชื่อ: ไม่มีตัวพิมพ์ใหญ่, ไม่มี underscore, ยาว 3-63 ตัวอักษร, ไม่ใช่ IP, ขึ้นต้นด้วยตัวอักษรพิมพ์เล็กหรือตัวเลข
Objects และ Keys
- Objects (ไฟล์) มี key ซึ่งก็คือ FULL path เช่น s3://my-bucket/folder1/file.txt โดย key = folder1/file.txt
- key ประกอบด้วย prefix (folder1/) + object name (file.txt)
- S3 ไม่มี directory จริง เป็น flat structure เพียงแต่ UI ทำให้ดูเหมือนมี folder
- object value คือ content ของไฟล์ ขนาดสูงสุด 5TB (5,000GB)
- ถ้าไฟล์ > 5GB ต้องใช้ multipart upload (single PUT รองรับได้สูงสุด 5GB)
- มี metadata, tags และ version id (ถ้าเปิด versioning)
02S3 Security: IAM, Bucket Policy และ Block Public Access
S3 ควบคุมการเข้าถึงได้หลายระดับ ทั้งระดับ user (IAM-based) และระดับ resource (resource-based) การเข้าใจความแตกต่างเป็นหัวใจของข้อสอบ DVA-C02
ประเภทของ Security
- User-based (IAM Policies): กำหนดว่า IAM user/role ทำ API call อะไรได้บ้าง
- Resource-based (Bucket Policy): กฎระดับ bucket เขียนเป็น JSON ใช้ทำ cross-account และ public access
- Object ACL / Bucket ACL: การควบคุมระดับ object/bucket (ปัจจุบันมักปิดใช้งาน)
หลักการประเมินสิทธิ์: IAM principal เข้าถึง object ได้ ถ้า IAM policy อนุญาต หรือ resource policy อนุญาต และ ไม่มี explicit DENY
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}| ประเด็น | IAM Policy | Bucket Policy |
|---|---|---|
| ประเภท | Identity-based | Resource-based |
| แนบกับ | user / group / role | bucket |
| ระบุ Principal | ไม่ระบุ (เป็นของ identity นั้น) | ต้องระบุ Principal |
| Cross-account | ทำได้ยุ่งยาก | เหมาะที่สุด (ระบุ ARN account อื่น) |
| Public/anonymous | ทำไม่ได้ | ทำได้ (Principal: *) |
03S3 Static Website Hosting
S3 สามารถ host static website (HTML/CSS/JS รูปภาพ) และเข้าถึงผ่าน HTTP ได้โดยตรง โดยไม่ต้องมี server
- เปิด feature Static Website Hosting และระบุ index document (เช่น index.html) และ error document
- Website endpoint จะอยู่ในรูปแบบ (ขึ้นกับ region) เช่น: bucket-name.s3-website-region.amazonaws.com หรือ bucket-name.s3-website.region.amazonaws.com
- ต้องตั้งค่า bucket ให้ public read ผ่าน Bucket Policy (s3:GetObject) มิฉะนั้นจะได้ 403 Forbidden
- ต้องปิด Block Public Access ด้วย
04S3 Versioning
Versioning ช่วยเก็บหลายเวอร์ชันของ object เดียวกันใน bucket ป้องกันการลบโดยไม่ตั้งใจและการเขียนทับ (overwrite)
- เปิดที่ระดับ bucket (bucket-level setting)
- object เดียวกันที่อัปโหลดทับจะได้ version id ใหม่ ส่วนตัวเก่ายังอยู่
- ป้องกัน accidental delete: การลบจะสร้าง delete marker ไม่ลบจริง สามารถกู้คืนได้
- ไฟล์ที่มีอยู่ก่อนเปิด versioning จะมี version id เป็น null
- สามารถ suspend versioning ได้ โดย version เดิมที่มีอยู่จะไม่ถูกลบ
# เปิด versioning
aws s3api put-bucket-versioning \
--bucket my-bucket \
--versioning-configuration Status=Enabled
# แสดงทุก version ของ object
aws s3api list-object-versions --bucket my-bucket
# ลบถาวรเฉพาะ version (permanent delete)
aws s3api delete-object \
--bucket my-bucket --key file.txt \
--version-id <VERSION_ID>05S3 Replication: CRR และ SRR
S3 Replication คัดลอก object ระหว่าง bucket โดยอัตโนมัติแบบ asynchronous มีสองแบบตาม region
ข้อกำหนดและพฤติกรรมสำคัญ
- ต้องเปิด Versioning ทั้ง source และ destination bucket
- ต้องให้สิทธิ์ IAM permissions แก่ S3 ในการ replicate (proper IAM role)
- Replication เป็นแบบ asynchronous
- หลังเปิด replication จะ replicate เฉพาะ object ใหม่ ที่เขียนเข้ามา (object เก่าต้องใช้ S3 Batch Replication เพื่อ replicate ย้อนหลัง)
- ไม่มี chaining: ถ้า bucket1 -> bucket2 และ bucket2 -> bucket3 object จาก bucket1 จะ ไม่ถูก replicate ต่อ ไป bucket3
06S3 Storage Classes ทั้งหมด
S3 มี storage class หลายแบบเพื่อ balance ระหว่างราคาและการเข้าถึง ทุก class มี durability เท่ากันที่ 99.999999999% (11 nines) ต่างกันที่ availability, ราคา, minimum duration และ retrieval time
| Storage Class | Availability | Min Duration | Retrieval |
|---|---|---|---|
| Standard | 99.99% | - | ทันที (ms) |
| Standard-IA | 99.9% | 30 วัน | ทันที (ms) |
| One Zone-IA | 99.5% | 30 วัน | ทันที (ms) |
| Glacier Instant Retrieval | 99.9% | 90 วัน | ทันที (ms) |
| Glacier Flexible | 99.99% | 90 วัน | 1 นาที - 12 ชม. |
| Glacier Deep Archive | 99.99% | 180 วัน | 12 - 48 ชม. |
| Intelligent-Tiering | 99.9% | - | auto / ขึ้นกับ tier |
คำถามทบทวน
ทดสอบความเข้าใจหัวข้อ Amazon S3
20 ข้อ · เลือกคำตอบเพื่อดูเฉลยและคำอธิบาย
1.ชื่อ bucket ใน S3 มีข้อจำกัดเรื่องความ unique ระดับใด?
2.object ใน S3 มีขนาดสูงสุดเท่าใด และเมื่อใดที่ต้องใช้ multipart upload?
3.ทีมต้องการให้ object ทั้งหมดใน bucket อ่านได้แบบ public สำหรับเว็บไซต์ วิธีที่เหมาะสมที่สุดคืออะไร?
4.แม้ตั้ง Bucket Policy เป็น public แล้ว แต่ object ยังเข้าไม่ได้ สาเหตุที่เป็นไปได้มากที่สุดคือ?
5.เมื่อเปิด Versioning บน bucket แล้วทำการลบ object ด้วยคำสั่ง delete ปกติ จะเกิดอะไรขึ้น?
6.ข้อใดถูกต้องเกี่ยวกับการ suspend versioning?
7.ข้อกำหนดสำคัญสำหรับการตั้งค่า S3 Replication (CRR/SRR) คืออะไร?
8.S3 Replication ทำงานแบบ chain ได้หรือไม่ (bucket1 -> bucket2 -> bucket3)?
9.Storage class ใดมี availability ต่ำที่สุดและเหมาะกับข้อมูลที่สร้างใหม่ได้ (re-creatable)?
10.object durability ของ S3 ทุก storage class คือเท่าใด?
11.ลูกค้าต้องการเก็บ archive ที่เข้าถึงน้อยมากและต้องการต้นทุนต่ำที่สุด ยอมรับเวลา retrieval หลายชั่วโมงได้ ควรใช้ storage class ใด?
12.Glacier class ใดให้ retrieval แบบ millisecond ทันที เหมาะกับข้อมูล archive ที่ต้องเข้าถึงเป็นบางครั้งแบบเร็ว?
13.S3 Intelligent-Tiering เหมาะกับสถานการณ์ใดมากที่สุด?
14.การให้สิทธิ์ข้าม account (cross-account access) ให้ account อื่นอ่าน object ใน bucket ทำได้โดยวิธีใด?
15.สำหรับ S3 Static Website Hosting URL ของเว็บไซต์จะอยู่ในรูปแบบใดและต้องการอะไร?
16.การ replicate delete marker ใน S3 Replication มีลักษณะอย่างไร?
17.object ที่เก็บใน Standard-IA และ One Zone-IA มีข้อกำหนดเรื่องระยะเวลาเก็บขั้นต่ำ (minimum storage duration) อย่างไร?
18.object key ใน S3 หมายถึงอะไร?
19.กรณีใช้ทั้ง IAM policy และ Bucket Policy การประเมินสิทธิ์เป็นอย่างไร (ภายใน account เดียว)?
20.ต้องการ replicate ข้อมูลไปยัง bucket ในภูมิภาคอื่นเพื่อลด latency ให้ผู้ใช้ปลายทางและ compliance ควรใช้ feature ใด?