คุณแชร์ไฟล์จาก Amazon S3 ได้โดยไม่ต้องเปิดบัคเก็ตเป็นสาธารณะเลย เก็บบัคเก็ตไว้เป็นแบบส่วนตัว เปิด Block Public Access ไว้ แล้วมอบการเข้าถึงแบบลงนามสำหรับออบเจกต์ที่ระบุแทน: URL แบบ presigned สำหรับไฟล์ที่แชร์ครั้งเดียว signed URL ของ CloudFront เมื่อคุณมี CDN อยู่หน้าบัคเก็ตแล้ว หรือลิงก์แชร์ที่เพิ่มรหัสผ่าน วันหมดอายุ และขีดจำกัดการดาวน์โหลด ทั้งสามวิธีทำงานเหมือนกันบนผู้ให้บริการที่รองรับ S3 เช่น Cloudflare R2, DigitalOcean Spaces, Wasabi และ Backblaze B2 (CloudFront ใช้ได้เฉพาะ AWS)
สรุปตัวเลือกการแชร์ไฟล์ S3 อย่างปลอดภัย
| วิธี | เหมาะสำหรับ | รหัสผ่าน | ขีดจำกัดการดาวน์โหลด | เพิกถอนทีละลิงก์ | ทั้งโฟลเดอร์ | ต้องเขียนโค้ด |
|---|---|---|---|---|---|---|
| ออบเจกต์หรือบัคเก็ตสาธารณะ | ไฟล์ที่เป็นสาธารณะจริง ๆ (เว็บไซต์) | ไม่ | ไม่ | ไม่ | ได้ | ไม่ |
| URL แบบ presigned | ไฟล์เดียว ครั้งเดียว จาก CLI หรือแอปของคุณ | ไม่ | ไม่ | ไม่ | ไม่ | CLI หรือ SDK |
| Signed URL ของ CloudFront | แอปที่ยืนยันตัวตนผู้ใช้อยู่แล้ว | ไม่ | ไม่ | ไม่ | ได้ด้วย signed cookie | ต้อง |
| ลิงก์แชร์ของ Nubbo | แชร์ซ้ำ ๆ กับผู้คนภายนอก | ได้ | ได้ | ได้ | ได้ พร้อม ZIP | ไม่ |
ทำไมไม่เปิดไฟล์เป็นสาธารณะไปเลย
วิธีที่เร็วที่สุดในการแชร์ไฟล์จาก S3 คือเปิดเป็นสาธารณะแล้วส่ง URL ของออบเจกต์ไป แต่ก็เป็นวิธีที่เสี่ยงที่สุด: สิ่งที่เป็นสาธารณะจะถูกดึงไปได้โดยทุกคนที่พบหรือเดาที่อยู่ได้ ไม่มีรหัสผ่าน ไม่มีวันหมดอายุ และไม่มีบันทึกว่าใครนำไป บัคเก็ตสาธารณะที่ถูกลืมทิ้งไว้เป็นต้นเหตุคลาสสิกของข้อมูลรั่วไหล และเปิดเผยทั้งชื่อไฟล์และเนื้อหา
AWS ระบุว่าบัคเก็ต access point และออบเจกต์ใหม่ไม่อนุญาตการเข้าถึงสาธารณะโดยค่าเริ่มต้น นอกจากนี้ S3 Block Public Access ยังมีการตั้งค่าสี่ข้อ (BlockPublicAcls, IgnorePublicAcls, BlockPublicPolicy และ RestrictPublicBuckets) ที่มีผลเหนือนโยบายหรือ ACL ใดก็ตามที่จะเปิดบัคเก็ตในภายหลัง ตั้งค่าได้ต่อบัคเก็ต ต่อบัญชี หรือสำหรับทั้ง AWS Organization และ S3 จะใช้ชุดที่เข้มงวดที่สุด AWS แนะนำให้เปิดทั้งสี่ข้อในระดับบัญชี เว้นแต่คุณจะโฮสต์เนื้อหาสาธารณะจริง ๆ เช่น เว็บไซต์แบบสแตติก
เปิดสวิตช์นั้นไว้ ทุกอย่างด้านล่างทำงานได้โดยที่ยังเปิดอยู่
ตัวเลือกที่ 1: URL แบบ presigned
URL แบบ presigned คือ URL ของออบเจกต์ที่มีลายเซ็นอยู่ใน query string ให้สิทธิ์การดำเนินการเดียว (โดยมากคือการดาวน์โหลด) กับออบเจกต์เดียวจนกว่าจะหมดอายุ และ S3 ตรวจสอบลายเซ็นทุกครั้งที่มีคำขอ
aws s3 presign s3://my-bucket/reports/q3.pdf --expires-in 86400
URL นี้ใช้ได้ 24 ชั่วโมง ค่าเริ่มต้นของ CLI คือหนึ่งชั่วโมง และสูงสุด 604,800 วินาที (7 วัน) เมื่อคุณลงนามด้วยคีย์ของผู้ใช้ IAM หากลงนามด้วยข้อมูลรับรองชั่วคราว เช่น role ที่ assume ไว้ URL จะหมดอายุเมื่อข้อมูลรับรองนั้นหมดอายุ
สิ่งที่คุณได้:
- ไม่ต้องเปลี่ยนบัคเก็ตหรือนโยบาย
- ควบคุมได้แม่นยำ: ออบเจกต์เดียว เมธอดเดียว อายุเดียว
- ใช้ได้กับผู้ให้บริการทุกรายที่รองรับการลงนามแบบ presigned ด้วย SigV4
สิ่งที่คุณไม่ได้:
- ไม่มีรหัสผ่าน ใครก็ตามที่มี URL จะใช้ได้กี่ครั้งก็ได้จนกว่าจะหมดอายุ
- ไม่มีขีดจำกัดการดาวน์โหลดและเพิกถอนทีละลิงก์ไม่ได้ คุณทำให้ URL หมดอายุก่อนกำหนดได้เพียงด้วยการเพิกถอนคีย์ที่ลงนาม
- ไม่รองรับโฟลเดอร์ คุณต้องลงนามทีละออบเจกต์ การแชร์โฟลเดอร์ที่มี 300 ไฟล์จึงหมายถึง 300 URL
- ความเป็นส่วนตัวของชื่อ URL แสดงชื่อบัคเก็ต คีย์ของออบเจกต์ และ access key ID ของคุณ
สำหรับกลไกโดยละเอียด รวมถึงการอัปโหลด พารามิเตอร์ X-Amz-* แต่ละตัว และโค้ด SDK ดู อธิบาย URL แบบ presigned ของ S3
ตัวเลือกที่ 2: signed URL และ signed cookie ของ CloudFront
หากคุณให้บริการบัคเก็ตผ่าน Amazon CloudFront อยู่แล้ว คุณกำหนดให้ cache behavior ต้องใช้ signed URL หรือ signed cookie ได้ บัคเก็ตยังคงเป็นแบบส่วนตัวหลัง origin access control (OAC) ซึ่ง AWS แนะนำมากกว่า origin access identity แบบเก่า: นโยบายบัคเก็ตอนุญาตให้เฉพาะ distribution ของคุณอ่านออบเจกต์ได้ คุณลงทะเบียน public key ใน trusted key group แล้วลงนามด้วย private key ที่ตรงกัน
- Signed URL เหมาะกับไฟล์แต่ละไฟล์ ด้วยนโยบายแบบกำหนดเอง คุณยังตั้งเวลาเริ่มต้นและช่วง IP ได้ และใช้นโยบายเดียวกับหลายไฟล์ด้วยไวลด์การ์ด มีอายุสั้นหรือยาวหลายปีก็ได้
- Signed cookie เหมาะกับไฟล์จำนวนมากในคราวเดียว เช่น ทุกเซกเมนต์ของวิดีโอ โดยไม่ต้องเปลี่ยน URL
นี่คือเครื่องมือที่เหมาะเมื่อคุณมีแอปพลิเคชันที่ยืนยันตัวตนผู้ใช้อยู่แล้วและให้บริการเนื้อหาในปริมาณมาก หากต้องการส่งไฟล์ไม่กี่ไฟล์ให้ผู้คนนอกทีม วิธีนี้หมายถึงการตั้งค่า distribution จัดการคีย์ และเขียนโค้ดที่ลงนามทุกคำขอ
การจำกัดนโยบายบัคเก็ตไว้ที่ช่วง IP คงที่เป็นอีกตัวเลือกหนึ่งในตัว แต่ช่วยได้เฉพาะเมื่อคุณรู้เครือข่ายของผู้รับ ซึ่งแทบไม่เคยเป็นเช่นนั้นกับผู้คนนอกองค์กรของคุณ
ตัวเลือกที่ 3: ลิงก์แชร์ด้วย Nubbo
Nubbo เชื่อมต่อกับบัคเก็ตของคุณและมอบลิงก์แชร์ที่มีการควบคุมซึ่ง URL แบบ presigned ไม่มี โดยไม่ต้องเขียนโค้ด เบื้องหลังยังใช้ URL แบบ presigned อยู่: Nubbo ตรวจสอบกฎของลิงก์ก่อน แล้วจึงออก URL อายุสั้น ไฟล์เดี่ยวจึงเดินทางตรงจากบัคเก็ตของคุณไปยังเบราว์เซอร์ของผู้รับ
ขั้นตอนที่ 1: เชื่อมต่อบัคเก็ตของคุณ
สมัครใช้งานฟรี ยืนยันอีเมล จากนั้นเปิด บัคเก็ต แล้วกด เชื่อมต่อบัคเก็ต ตัวช่วยจะถามผู้ให้บริการของคุณ (Amazon S3, Cloudflare R2, DigitalOcean Spaces, Wasabi, Backblaze B2 หรือ endpoint ที่รองรับ S3 แบบกำหนดเอง) วิธีเชื่อมต่อ (ตั้งค่าอัตโนมัติด้วยคีย์ที่มีสิทธิ์เข้าถึงแบบเต็ม หรือคีย์ที่จำกัดไว้เพียงบัคเก็ตเดียว) คีย์ และบัคเก็ตของคุณ ตัวช่วยจะตรวจสอบคีย์และบัคเก็ต และปิดท้ายด้วยการทดสอบ CORS ด้วยการอัปโหลดจริงจากเบราว์เซอร์ของคุณ บัคเก็ตยังคงเป็นแบบส่วนตัว และคีย์ของคุณถูกเก็บแบบเข้ารหัสด้วย AES-256-GCM แผนฟรีมีการเชื่อมต่อ 2 รายการ
ขั้นตอนที่ 2: เลือกไฟล์หรือโฟลเดอร์
ค้นหารายการใน ตัวสำรวจ แล้วเลือก แชร์ หรือไปที่หน้า แชร์แล้ว กด ลิงก์ใหม่ แล้วเลือกบัคเก็ตและไฟล์หรือโฟลเดอร์จากที่นั่น
ขั้นตอนที่ 3: ตั้งค่าการป้องกัน
การควบคุมทั้งสามอย่างเป็นตัวเลือกเสริมและใช้ได้ในทุกแผน:
| การควบคุม | วิธีการทำงาน |
|---|---|
| รหัสผ่าน | 4 ถึง 50 ตัวอักษร หากใส่ผิด 10 ครั้ง ลิงก์จะถูกล็อก 15 นาที |
| วันหมดอายุ | ปิดไว้โดยค่าเริ่มต้น: ลิงก์ยังใช้งานได้ตราบใดที่ไฟล์หรือโฟลเดอร์ยังอยู่ในพื้นที่เก็บข้อมูลของคุณ |
| จำนวนดาวน์โหลดสูงสุด | เว้นว่างหมายถึงไม่จำกัด เมื่อถึงจำนวนที่กำหนด ลิงก์จะหยุดให้บริการไฟล์ |
ขั้นตอนที่ 4: สร้างและส่งลิงก์
กด สร้างลิงก์ คัดลอกแล้วส่งทางอีเมล แชต หรือช่องทางใดก็ได้ที่คุณใช้ ผู้รับจะเปิดหน้าดาวน์โหลดที่เรียบร้อยและไม่ต้องมีบัญชี ลิงก์โฟลเดอร์ให้ผู้รับเรียกดูโฟลเดอร์ ดาวน์โหลดไฟล์เดี่ยว หรือดาวน์โหลดทั้งหมดเป็น ZIP ซึ่งเบราว์เซอร์ของผู้รับจะสร้างขึ้นโดยดาวน์โหลดแต่ละไฟล์ตรงจากบัคเก็ตของคุณ
ขั้นตอนที่ 5: ส่งรหัสผ่านแยกต่างหาก
การส่งรหัสผ่านในข้อความเดียวกับลิงก์ทำให้การป้องกันไม่มีความหมาย หากลิงก์มีรหัสผ่าน ส่งรหัสผ่านทางอีเมล จะส่งเป็นลิงก์เปิดดูครั้งเดียว: รหัสผ่านจะแสดงเพียงครั้งเดียว ลิงก์เปิดดูหมดอายุหลัง 24 ชั่วโมง 3 วัน หรือ 7 วัน และคุณเพิ่มข้อความสั้น ๆ ได้ คุณจะได้รับการแจ้งเตือนเมื่อมีการเปิด
ขั้นตอนที่ 6: ติดตามและเพิกถอน
หน้า แชร์แล้ว แสดงทุกลิงก์พร้อมสถานะและจำนวนการดาวน์โหลด คุณแก้ไขรหัสผ่าน วันหมดอายุ หรือขีดจำกัดได้ ปิดใช้งานลิงก์ได้ (ลิงก์จะหยุดออก URL ดาวน์โหลดใหม่ทันที) และเปิดอีกครั้งในภายหลังด้วยที่อยู่เดิมได้
แชร์กับบุคคลที่ระบุแทนการใช้ลิงก์
ลิงก์ใช้ได้กับทุกคนที่มีลิงก์ เมื่อคุณต้องการให้เฉพาะบุคคลที่ระบุชื่อเข้าถึงได้ ฟีเจอร์ แชร์กับผู้คน ของ Nubbo (ในแผน Personal และ Pro) จะส่งไฟล์หรือโฟลเดอร์ไปยังอีเมลที่ระบุ พร้อมสิทธิ์ดูหรือดาวน์โหลด วันหมดอายุตามต้องการ และเพดานการดาวน์โหลด และบันทึกการเข้าถึงทุกครั้ง ผู้รับต้องมีบัญชี Nubbo และจะพบรายการใน แชร์กับฉัน แผน Personal อนุญาต 10 คนต่อรายการและการแชร์ที่ใช้งานอยู่ 50 รายการ ส่วน Pro อนุญาต 50 และ 500
แผนแบบชำระเงินยังมีลิงก์ที่เข้ารหัส: เบราว์เซอร์จะสร้างสำเนาของไฟล์ที่ผนึกไว้ และกุญแจเดินทางไปกับลิงก์เท่านั้น Nubbo จึงอ่านไฟล์นั้นไม่ได้
ควรใช้ตัวเลือกไหน?
- ไฟล์เดียว ครั้งเดียว และคุณตั้งค่า AWS CLI ไว้แล้ว: URL แบบ presigned เป็นทางที่เร็วที่สุด
- แอปพลิเคชันที่ให้ผู้ใช้เข้าสู่ระบบอยู่แล้วและให้บริการเนื้อหาจำนวนมาก: signed URL หรือ cookie ของ CloudFront
- แชร์ซ้ำ ๆ กับผู้คนนอกทีม ทั้งโฟลเดอร์ หรือสิ่งใดก็ตามที่ต้องการรหัสผ่านหรือขีดจำกัด: ลิงก์แชร์ช่วยประหยัดเวลาและลดข้อผิดพลาด
มากกว่าลิงก์เดียว
ฟีเจอร์ที่เกี่ยวข้องอีกสองอย่างครอบคลุมกรณีที่พบบ่อยอื่น ๆ คำขอไฟล์ ให้ลิงก์อัปโหลดสาธารณะแก่คุณ เพื่อให้ผู้คนส่งไฟล์เข้าบัคเก็ตของคุณได้โดยไม่เห็นสิ่งอื่นในบัคเก็ต แกลเลอรี เปลี่ยนโฟลเดอร์รูปภาพหรือวิดีโอให้เป็นหน้าที่เรียกดูได้ พร้อมเลย์เอาต์ ลายน้ำ และรหัสผ่านของตัวเอง ในแผนฟรีคุณได้อย่างละ 3 รายการและลิงก์แชร์ไม่จำกัด ส่วน Personal และ Pro ไม่มีเพดานเหล่านั้น ข้อสังเกตตามตรงหนึ่งข้อ: ภาพย่อถูกสร้างบนเซิร์ฟเวอร์ของ Nubbo และจัดเก็บในบัคเก็ตของคุณเองใต้ .nubbo-thumbs/
คำถามที่พบบ่อย
จะแชร์ไฟล์จาก S3 โดยไม่เปิดเป็นสาธารณะได้อย่างไร?
เก็บบัคเก็ตไว้เป็นแบบส่วนตัวแล้วมอบการเข้าถึงแบบลงนามแทน: URL แบบ presigned สำหรับออบเจกต์หนึ่งรายการ (จาก AWS CLI หรือ SDK) signed URL หรือ cookie ของ CloudFront หากคุณให้บริการบัคเก็ตผ่าน CloudFront อยู่แล้ว หรือลิงก์แชร์จากเครื่องมืออย่าง Nubbo ที่เพิ่มรหัสผ่าน วันหมดอายุ และขีดจำกัดการดาวน์โหลดบน URL แบบ presigned
Amazon S3 ปลอดภัยสำหรับการแชร์ไฟล์ไหม?
ปลอดภัย ตราบใดที่บัคเก็ตยังเป็นแบบส่วนตัว บัคเก็ตใหม่ไม่อนุญาตการเข้าถึงสาธารณะโดยค่าเริ่มต้น และ S3 Block Public Access ป้องกันไม่ให้ใครเปิดเป็นสาธารณะในภายหลัง ความเสี่ยงมาจากการเปิดออบเจกต์เป็นสาธารณะ หรือจากลิงก์ที่ลงนามรั่วไหล ซึ่งใช้ได้กับทุกคนที่มีลิงก์จนกว่าจะหมดอายุ
บัคเก็ต S3 ใหม่เป็นแบบส่วนตัวโดยค่าเริ่มต้นไหม?
ใช่ AWS ระบุว่าบัคเก็ต access point และออบเจกต์ใหม่ไม่อนุญาตการเข้าถึงสาธารณะโดยค่าเริ่มต้น และการตั้งค่า Block Public Access ทั้งสี่ข้อจะมีผลเหนือนโยบายหรือ ACL ใดก็ตามที่จะเปิดในภายหลัง
ผู้รับต้องมีบัญชี AWS หรือ Nubbo ไหม?
ไม่ต้อง URL แบบ presigned, signed URL ของ CloudFront และลิงก์แชร์ของ Nubbo ใช้งานได้ในทุกเบราว์เซอร์โดยไม่ต้องมีบัญชี มีเพียง แชร์กับผู้คน ซึ่งส่งรายการไปยังบุคคลที่ระบุชื่อ ที่ผู้รับต้องมีบัญชี Nubbo
ลิงก์ S3 ที่แชร์มีอายุได้นานเท่าไร?
URL แบบ presigned มีอายุสูงสุด 7 วันเมื่อลงนามด้วยคีย์ของผู้ใช้ IAM และสั้นกว่านั้นเมื่อใช้ข้อมูลรับรองชั่วคราว signed URL ของ CloudFront มีอายุตามที่นโยบายของคุณกำหนด ลิงก์แชร์ของ Nubbo ไม่มีวันหมดอายุเว้นแต่คุณจะตั้งไว้ เพราะออก URL อายุสั้นใหม่ทุกครั้งที่มีการดาวน์โหลด
ไฟล์ผ่าน Nubbo ไหมเมื่อมีคนดาวน์โหลดจากลิงก์ที่แชร์?
ไม่ผ่าน เบราว์เซอร์ดาวน์โหลดไฟล์เดี่ยวตรงจากบัคเก็ตของคุณด้วย URL แบบ presigned ส่วนการดาวน์โหลดหลายไฟล์เป็น ZIP จะประกอบขึ้นในเบราว์เซอร์ ซึ่งดาวน์โหลดแต่ละไฟล์ตรงจากบัคเก็ตของคุณ: Nubbo ไม่เคยเห็นเนื้อหาเลย
แหล่งที่มา
ราคาและขีดจำกัดมาจากหน้าเว็บทางการด้านล่าง ผู้ให้บริการอาจเปลี่ยนแปลงได้ โปรดตรวจสอบก่อนตัดสินใจ
- Amazon S3: การบล็อกการเข้าถึงสาธารณะต่อพื้นที่เก็บข้อมูลของคุณ
- Amazon S3: ดาวน์โหลดและอัปโหลดออบเจกต์ด้วย URL แบบ presigned
- เอกสารอ้างอิง AWS CLI: s3 presign
- Amazon CloudFront: จำกัดการเข้าถึงต้นทาง Amazon S3 (OAC)
- Amazon CloudFront: ใช้ signed URL
- Amazon CloudFront: เลือกใช้ signed URL หรือ signed cookie