OSS Bucket: สร้าง อัปโหลด และแชร์ไฟล์ด้วย Signed URL
คำตอบสั้น ๆ: สร้าง OSS Bucket บน Alibaba Cloud แบบ Private เลือก Region และ Storage Class อัปโหลดด้วย ossutil แชร์ไฟล์ด้วย Signed URL และตั้ง Lifecycle ลดค่าเก็บ
คู่มือนี้อธิบาย OSS Bucket ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
OSS Bucket คือที่เก็บไฟล์ระดับบนสุดใน Alibaba Cloud Object Storage Service (OSS) ไฟล์ทุกไฟล์ (เรียกว่า object) ต้องอยู่ในบัคเก็ตใดบัคเก็ตหนึ่ง และบัคเก็ตเป็นตัวกำหนด Region, Storage Class และสิทธิ์การเข้าถึงเริ่มต้นของไฟล์ข้างใน เหมาะกับไฟล์สำรอง เอกสาร รูปภาพ วิดีโอ และไฟล์ log ที่ต้องเก็บนาน
คู่มือนี้พาสร้างบัคเก็ตแบบ Private ใน Region ที่ใกล้ผู้ใช้ อัปโหลดไฟล์ทั้งผ่านคอนโซลและเครื่องมือ ossutil แชร์ไฟล์ให้คนภายนอกด้วย Signed URL ที่หมดอายุเอง และตั้ง Lifecycle Rule ให้ระบบย้ายหรือลบไฟล์เก่าอัตโนมัติ เมื่อทำครบ คุณจะมีที่เก็บไฟล์ที่ไม่เปิดสาธารณะโดยไม่ตั้งใจ และค่าเก็บไม่โตไปเรื่อย ๆ
บัคเก็ต Private เป็นจุดเริ่ม การแชร์ใช้ลิงก์ที่หมดอายุเอง และ Lifecycle คุมค่าเก็บระยะยาว
สิ่งที่ต้องเตรียม
- บัญชี Alibaba Cloud ที่เปิดบริการ OSS แล้ว (ดูการเปิดใช้ Alibaba Cloud กับ THAI DATA CLOUD)
- RAM User ที่มีสิทธิ์ OSS เฉพาะงานที่ทำ และ AccessKey สำหรับ ossutil ห้ามใช้คีย์ของบัญชีหลัก
- เครื่อง Linux, macOS หรือ Windows สำหรับติดตั้ง ossutil 2.0
- คำตอบว่าไฟล์จะถูกอ่านบ่อยแค่ไหนและต้องเก็บนานเท่าไร เพื่อเลือก Storage Class และ Lifecycle
ถ้ายังไม่แน่ใจว่างานของคุณควรใช้ Object Storage หรือ File/Block Storage อ่านเปรียบเทียบได้ที่ Object vs File vs Block Storage
ขั้นตอนที่ 1: เลือก Region, Storage Class และ Redundancy Type
สามค่านี้ต้องตัดสินใจตอนสร้าง OSS Bucket และบางค่าเปลี่ยนภายหลังไม่ได้ ให้เลือกตามนี้
- Region: เลือกใกล้ผู้ใช้หรือใกล้เซิร์ฟเวอร์ที่อ่านไฟล์ เช่น Thailand (Bangkok) รหัส
ap-southeast-7 ถ้าข้อมูลต้องอยู่ในประเทศตามนโยบายองค์กร ย้าย Region ของ OSS Bucket ภายหลังไม่ได้ ต้องสร้างใหม่แล้วคัดลอกข้อมูล
- Storage Class: Standard (ค่าเริ่มต้น) สำหรับไฟล์ที่อ่านบ่อย, Infrequent Access (IA) สำหรับไฟล์ที่อ่านนาน ๆ ครั้ง, Archive, Cold Archive และ Deep Cold Archive สำหรับเก็บยาว คลาสที่ถูกกว่ามีค่าเรียกคืนข้อมูล มีระยะเวลาจัดเก็บขั้นต่ำ และคลาสกลุ่ม Archive ต้องสั่ง Restore ก่อนอ่าน
- Redundancy Type: ZRS เก็บข้อมูลข้ามหลาย Zone เหมาะกับงานจริง LRS เหมาะกับข้อมูลทดสอบ อัปเกรดจาก LRS เป็น ZRS ได้แต่ลดกลับไม่ได้ และ ZRS ไม่ได้มีทุก Region
ขั้นตอนที่ 2: สร้าง OSS Bucket แบบ Private
เปิด OSS console ที่เมนูซ้ายเลือก Buckets แล้วคลิก Create Bucket กรอก Bucket Name ซึ่งต้องไม่ซ้ำกับใครใน Alibaba Cloud ทั้งระบบ ใช้ได้เฉพาะตัวพิมพ์เล็ก ตัวเลข และขีดกลาง ยาว 3–63 ตัว และขึ้นต้นกับลงท้ายด้วยตัวอักษรหรือตัวเลข เช่น example-backup-2026
เลือก Region, Storage Class และ Redundancy Type ตามขั้นตอนที่ 1 สังเกตว่า Block Public Access เปิดไว้เป็นค่าเริ่มต้น คอนโซลจึงให้สร้างได้เฉพาะ OSS Bucket ที่ ACL แบบ Private ซึ่งเป็นค่าที่ถูกต้องสำหรับงานเกือบทั้งหมด แนะนำให้เปิดการเข้ารหัสฝั่งเซิร์ฟเวอร์ (OSS-Managed) และพิจารณาเปิด Versioning ถ้าไฟล์สำคัญอาจถูกเขียนทับ จากนั้นคลิก Create
ตั้งชื่อไม่ซ้ำ เลือก Region และปล่อย Block Public Access เปิดไว้ แล้วคลิก Create (ภาพจำลอง)
ขั้นตอนที่ 3: เข้าใจ ACL และอย่าเปิดสาธารณะโดยไม่จำเป็น
ACL ของ OSS Bucket มี 3 ระดับ คือ Private, Public Read และ Public Read/Write ถ้าต้องการให้คนนอกดาวน์โหลดไฟล์บางไฟล์ ให้ใช้ Signed URL ในขั้นตอนที่ 6 แทนการเปิด Public Read ทั้งบัคเก็ต เพราะ Public Read ทำให้ทุกคนที่เดาชื่อไฟล์ได้เปิดอ่านได้ทันทีและคุณเป็นผู้จ่ายค่าทราฟฟิกขาออก
ถ้าจำเป็นต้องเปิดสาธารณะจริง เช่น ไฟล์รูปของเว็บไซต์ ต้องปิด Block Public Access ก่อนที่หน้าบัคเก็ต Permissions > Block Public Access แล้วจึงตั้งค่าที่แท็บ ACL ห้ามใช้ Public Read/Write ในทุกกรณี เพราะใครก็อัปโหลดหรือเขียนทับไฟล์ในบัคเก็ตของคุณได้
งานเกือบทั้งหมดใช้ Private คู่กับ Signed URL ส่วน Public Read/Write ไม่ควรใช้เลย
ขั้นตอนที่ 4: อัปโหลดไฟล์ผ่านคอนโซล
คลิกชื่อ OSS Bucket เลือกเมนู Objects แล้วคลิก Upload Object เลือกโฟลเดอร์ปลายทาง (OSS ใช้ชื่อขึ้นต้นแบบ reports/ แทนโฟลเดอร์) ปล่อย ACL ของไฟล์ให้สืบทอดจากบัคเก็ต แล้วลากไฟล์ใส่และยืนยันการอัปโหลด วิธีนี้เหมาะกับไฟล์ไม่กี่ไฟล์ ถ้ามีไฟล์จำนวนมากหรืออยากตั้งเวลาอัตโนมัติให้ใช้ ossutil
ขั้นตอนที่ 5: ตั้งค่า ossutil และอัปโหลดจากเครื่อง
ดาวน์โหลด ossutil 2.0 ตามระบบปฏิบัติการจากเอกสารของ Alibaba Cloud แตกไฟล์ ให้สิทธิ์รัน แล้วย้ายไปไว้ใน PATH จากนั้นรัน ossutil config ระบบจะถาม Access Key ID, Access Key Secret, Region และ Endpoint ให้ใส่คีย์ของ RAM User และพิมพ์ Region ให้ชัดเจน เช่น ap-southeast-7 ส่วน Endpoint กด Enter เพื่อใช้ค่าสาธารณะตาม Region
ossutil config
ossutil ls oss://example-backup-2026
ossutil cp -r ./reports/ oss://example-backup-2026/reports/
ค่าที่ตั้งจะถูกเก็บในไฟล์ ~/.ossutilconfig ซึ่งมีคีย์อยู่ข้างใน ให้จำกัดสิทธิ์อ่านไฟล์นี้เฉพาะเจ้าของ ถ้าเครื่องที่อัปโหลดเป็น ECS ใน Region เดียวกัน ให้ระบุ Endpoint แบบ internal เช่น https://oss-ap-southeast-7-internal.aliyuncs.com เพื่อส่งข้อมูลผ่านเครือข่ายภายใน
ขั้นตอนที่ 6: แชร์ไฟล์ด้วย Signed URL ที่หมดอายุเอง
Signed URL คือลิงก์ที่แนบลายเซ็นและเวลาหมดอายุไว้ ผู้รับเปิดได้โดยไม่ต้องมีบัญชี และลิงก์ใช้ไม่ได้เองเมื่อครบเวลา สร้างด้วยคำสั่ง presign ซึ่งตั้งอายุได้ตั้งแต่ 1 วินาทีถึง 1 สัปดาห์ ค่าเริ่มต้นคือ 15 นาที
ossutil presign oss://example-backup-2026/reports/q3.pdf --expires-duration 24h
ในคอนโซลทำได้เช่นกันโดยคลิกชื่อไฟล์ (หรือ View Details) ตั้งเวลาหมดอายุ แล้วคัดลอก URL ข้อควรระวังคือถ้าสร้างลิงก์ด้วย STS token ชั่วคราว ลิงก์จะหมดอายุเมื่อ token หมดอายุ แม้จะตั้งเวลาไว้นานกว่านั้น
ไฟล์ที่ไม่มีลายเซ็นได้ 403 ส่วน Signed URL ได้ 200 จนกว่าจะหมดอายุ
ขั้นตอนที่ 7: ตั้ง Lifecycle Rule ย้ายหรือลบไฟล์เก่า
ในหน้า OSS Bucket เลือก Data Management > Lifecycle คลิก Create Rule ตั้ง Status เป็นเปิด ที่ Applied To เลือกเฉพาะไฟล์ที่มี Prefix เช่น logs/ แล้วกำหนดใน Lifecycle-based Rules เช่น ย้ายไป IA หลัง 30 วัน และลบหลัง 365 วัน ส่วน Part Lifecycle ให้ตั้งลบชิ้นส่วนอัปโหลดที่ค้าง (multipart) เพื่อไม่ให้เสียค่าเก็บโดยไม่รู้ตัว
กฎใหม่จะถูกโหลดภายใน 24 ชั่วโมงและทำงานวันละครั้ง ระวังการลบหรือย้ายไฟล์คลาส IA หรือ Archive ก่อนครบระยะเวลาจัดเก็บขั้นต่ำ เพราะจะมีค่าธรรมเนียม และกฎลบไฟล์ไม่มีถังขยะให้กู้คืน ให้ตรวจ Prefix ให้ดีก่อนบันทึก
ตรวจสอบว่า OSS Bucket ทำงานถูกต้อง
เปิด URL ปกติของไฟล์ (ไม่มีลายเซ็น) ในหน้าต่างไม่ระบุตัวตน ต้องได้ AccessDenied แปลว่าบัคเก็ตเป็น Private จริง จากนั้นเปิด Signed URL ต้องดาวน์โหลดได้ และเมื่อครบเวลาต้องเปิดไม่ได้อีก สุดท้ายรัน ossutil ls เพื่อดูว่าไฟล์อยู่ครบและ Storage Class ถูกต้อง
ปัญหาที่พบบ่อยเกี่ยวกับ OSS Bucket
เปิดลิงก์ไฟล์แล้วขึ้น AccessDenied ต้องทำอย่างไร?
ถ้า OSS Bucket เป็น Private นี่คือพฤติกรรมที่ถูกต้อง ให้ส่ง Signed URL แทน ถ้าเป็น Signed URL แล้วยังขึ้นข้อความ ให้ตรวจว่าลิงก์ยังไม่หมดอายุ ไม่ได้ถูกตัดตอนคัดลอก และ RAM User ที่ใช้สร้างลิงก์มีสิทธิ์ oss:GetObject กับไฟล์นั้น
ทำไมตั้ง ACL เป็น Public Read ไม่ได้?
เพราะ Block Public Access เปิดอยู่ ซึ่งเป็นค่าเริ่มต้นเพื่อกันข้อมูลรั่ว ต้องปิดที่ Permissions > Block Public Access ก่อน แต่ควรถามตัวเองก่อนว่า Signed URL หรือ CDN ที่ดึงจากบัคเก็ต Private ตอบโจทย์ได้หรือไม่
ossutil แจ้ง region must be set in sign version 4 แก้อย่างไร?
ossutil 2.0 ใช้ลายเซ็นเวอร์ชัน 4 ซึ่งต้องรู้ Region เสมอ รัน ossutil config ใหม่แล้วใส่ Region ให้ตรงกับ OSS Bucket หรือระบุด้วยตัวเลือก --region ในคำสั่ง
ตั้ง Lifecycle แล้วไฟล์เก่ายังไม่ถูกลบ เป็นเพราะอะไร?
กฎใช้เวลาโหลดได้ถึง 24 ชั่วโมงและทำงานรอบละวัน ถ้าผ่านไปหลายวันแล้ว ให้ตรวจว่า Prefix ตรงกับชื่อไฟล์จริง เช่น logs/ กับ Logs/ ถือเป็นคนละ Prefix และวันที่นับจากเวลาแก้ไขล่าสุดของไฟล์ ไม่ใช่วันที่สร้างกฎ
ถ้าต้องการให้ช่วยวางโครงสร้างบัคเก็ต สิทธิ์ และค่าใช้จ่ายของ OSS หรือย้ายไฟล์จากที่อื่นขึ้นคลาวด์ ติดต่อทีมงาน THAI DATA CLOUD ดูทางเลือกได้ที่ Object Storage Service (OSS) และรายละเอียดเพิ่มเติมจากเอกสาร Create a bucket ของ Alibaba Cloud
อ่านเพิ่มเติมเกี่ยวกับ OSS Bucket