Table of Contents
- สำคัญมาก! อัพเดทล่าสุดครับ
- บทนำ (Introduction)
- Unauthorized Requests จากบุคคลภายนอกทำให้เกิดค่าใช้จ่ายขึ้นได้
- การกำหนด Permissions ที่ไม่รัดกุมอาจเพิ่มปัญหาให้ใหญ่ขึ้น
- ข้อแนะนำสำหรับการตั้งชื่อ S3 Bucket จากผม
สำคัญมาก! อัพเดทล่าสุดครับ
- ล่าสุด AWS ประกาศออกมาว่าจะไม่คิดเงินในกรณีที่มี unauthorized request เข้ามาที่ S3 bucket ของเรา
- ประกาศ: https://aws.amazon.com/about-aws/whats-new/2024/05/amazon-s3-no-charge-http-error-codes
- แต่ถ้าเป็น response 4xx errors ที่เกิดจากเราเอง อันนี้ยังคิดเงินเหมือนเดิม เช่น
- ถ้า request มาจาก account เรา หรือ
- อยู่ภายใน organization เดียวกัน
- ดังนั้นไม่ต้องกังวลใจไปสำหรับเรื่องนี้ครับ (ที่จริงมันก็เป็น rare case ด้วยแหละ)
- อย่างไรก็ตามผมคิดว่า practice สำหรับ S3 naming convention ที่ผมแนะนำในบทความนี้ยังคงมีประโยชน์ไม่ได้เปลี่ยนไป
บทนำ (Introduction)
พอดีผมไปเจอบทความหนึ่งบน Medium มา เขียนโดย Maciej Pocwierz ซึ่งผมรู้สึกว่าเป็นกรณีตัวอย่างที่ดีมากเลย ถ้าใครอยากได้รายละเอียดเพิ่มเติมแนะนำคลิกไปอ่านบทความต้นทางได้ครับ ส่วนบทความนี้ผมจะขอสรุปว่าทำไมเราถึงควรใส่ suffix ให้กับชื่อ S3 bucket และควรใส่ยังไงดี
Unauthorized Requests จากบุคคลภายนอกทำให้เกิดค่าใช้จ่ายขึ้นได้
- S3 bucket เปล่า ๆ แม้จะเป็น private ก็สามารถโดนค่าใช้จ่ายจำนวนมากได้นะ
- AWS คิดเงินเราแม้ว่า request ที่เข้ามาจะเป็น 4xx errors หรือ AccessDenied ก็ตาม
- ดังนั้นใครรู้ชื่อ bucket เรา ก็สามารถสร้างภาระทางการเงินให้เราได้
- แน่นอนว่าเราอาจสามารถขอ refund ได้ แต่ถ้าโชคไม่ดีก็อาจไม่ได้ในทุกกรณี ดังนั้นป้องกันไว้จึงดีกว่าแก้ไข
- Unauthorized requests พวกนี้เกิดจากทั้งความตั้งใจและไม่ตั้งใจ
- แบบตั้งใจ: บุคคลภายนอกตั้งใจเดาสุ่มชื่อ bucket เพื่อหาขโมยข้อมูลของเรา
- แบบไม่ตั้งใจ: จากบทความของ Maciej Pocwierz มี open source ตัวหนึ่งกำหนดค่า default ใน configuration โดยใช้ชื่อ bucket ทั่ว ๆ ไปเพื่อ backup ข้อมูล ซึ่งดันบังเอิญมาตรงกับชื่อ bucket ของเค้าพอดี คราวนี้ทั้ง requests และ backup data ก็แห่กันถาโถมเข้ามา
การกำหนด Permissions ที่ไม่รัดกุมอาจเพิ่มปัญหาให้ใหญ่ขึ้น
- ในบทความ Maciej Pocwierz เค้าลองเปิด public writes ดู แค่ครึ่งนาทีก็โดนเขียน data เข้ามาเกือบ 10 GB
- แสดงให้เห็นว่านอกจากตั้งชื่อ bucket ไม่ดีที่ทำให้โดนค่าใช้จ่ายได้แล้ว การกำหนด permissions ไม่ดีอีกแม้ครึ่งนาทีก็อาจเสียหายได้เยอะ
- ผมว่าภายในบริษัทกันเองก็เช่นกัน อาจจะเจอปัญหาการส่ง data ผิด application หรือ bucket ได้ (เชื่อสิ มี 😂)
ข้อแนะนำสำหรับการตั้งชื่อ S3 Bucket จากผม
- อย่าใช้ชื่อ bucket ที่มันเป็นชื่อทั่วไปและสั้น ๆ แม้มันจะไม่ซ้ำกับใคร เช่น
images
,image-bucket
,mybackups
,backup-files
,backup-bucket
,assets-bucket
,asset-files
หรือแม้จะเติมชื่อบริษัทเข้าไปแล้วก็ตาม - ชื่อ S3 bucket มีความยาวได้ถึง 63 ตัวอักษร ใช้ได้เฉพาะ lowercase (ตัวพิมพ์เล็ก), ตัวเลข และขีดกลาง (-)
- เพราะฉะนั้น อย่างน้อยจงใส่ suffix เป็น random string เข้าไปด้วยเสมอ เช่น
xxxxx-fj1x8m2v
- แต่จะดีกว่าถ้าเพิ่ม metadata เข้าไปด้วย เช่น
nopnithi-app1-assets-dev-fj1x8m2v
(33 ตัวอักษร)- จากตัวอย่าง metadata ก็เช่น ชื่อบริษัท, ชื่อ project หรือ app, ชื่อทีม, ชนิดของ data และ environment
- นอกจากมันช่วยป้องกันชื่อซ้ำได้เบ็ดเสร็จแล้ว ยังช่วยให้เราจัดการ buckets ได้ง่ายขึ้นด้วย