Bài viết

Cách chia sẻ tệp S3 mà không cần công khai bucket

Chia sẻ tệp S3 an toàn với bucket riêng tư: URL ký trước, URL ký của CloudFront hoặc liên kết chia sẻ có mật khẩu, thời hạn và giới hạn lượt tải xuống.

Bạn có thể chia sẻ tệp từ Amazon S3 mà không bao giờ phải công khai bucket. Hãy giữ nó ở chế độ riêng tư, để Block Public Access bật và cấp cho mọi người quyền truy cập có chữ ký vào các đối tượng cụ thể: một URL ký trước cho một tệp dùng một lần, URL ký của CloudFront khi bạn đã chạy CDN trước bucket, hoặc một liên kết chia sẻ có thêm mật khẩu, ngày hết hạn và giới hạn lượt tải xuống. Cả ba hoạt động giống nhau trên các nhà cung cấp tương thích S3 như Cloudflare R2, DigitalOcean Spaces, Wasabi và Backblaze B2 (CloudFront chỉ có trên AWS).

Tóm tắt các cách chia sẻ tệp S3 an toàn

Phương phápPhù hợp nhất choMật khẩuGiới hạn tải xuốngThu hồi từng liên kếtCả thư mụcCần viết mã
Đối tượng hoặc bucket công khaiTài nguyên thực sự công khai (một trang web)KhôngKhôngKhôngCóKhông
URL ký trướcMột tệp, một lần, từ CLI hoặc ứng dụng của bạnKhôngKhôngKhôngKhôngCLI hoặc SDK
URL ký của CloudFrontỨng dụng đã xác thực người dùngKhôngKhôngKhôngVới cookie kýCó
Liên kết chia sẻ của NubboChia sẻ thường xuyên với người bên ngoàiCóCóCóCó, với ZIPKhông

Tại sao không công khai tệp luôn

Cách nhanh nhất để chia sẻ một tệp từ S3 là công khai nó và gửi URL của đối tượng. Đó cũng là cách rủi ro nhất: mọi thứ công khai đều có thể bị bất kỳ ai tìm ra hoặc đoán được địa chỉ tải về, không có mật khẩu, không có thời hạn và không có ghi nhận ai đã lấy nó. Những bucket công khai bị bỏ quên là nguồn rò rỉ dữ liệu kinh điển, và chúng để lộ cả tên tệp lẫn nội dung.

AWS cho biết bucket, access point và đối tượng mới mặc định không cho phép truy cập công khai. Thêm vào đó, S3 Block Public Access có bốn cài đặt (BlockPublicAcls, IgnorePublicAcls, BlockPublicPolicy và RestrictPublicBuckets) ghi đè mọi policy hoặc ACL có thể mở bucket về sau. Chúng có thể được đặt cho từng bucket, từng tài khoản hoặc cho cả một AWS Organization, và S3 áp dụng tổ hợp hạn chế nhất. AWS khuyến nghị bật cả bốn ở cấp tài khoản trừ khi bạn thực sự lưu trữ nội dung công khai, như một trang web tĩnh.

Hãy để công tắc đó bật. Mọi thứ dưới đây đều hoạt động khi nó được bật.

Cách 1: URL ký trước

URL ký trước là một URL đối tượng có chữ ký trong chuỗi truy vấn. Nó cấp một thao tác (thường là tải xuống) trên một đối tượng cho tới khi hết hạn, và S3 kiểm tra chữ ký ở mỗi yêu cầu.

aws s3 presign s3://my-bucket/reports/q3.pdf --expires-in 86400

URL đó hoạt động trong 24 giờ. Mặc định của CLI là một giờ và tối đa là 604.800 giây (7 ngày) khi bạn ký bằng khóa người dùng IAM. Nếu bạn ký bằng thông tin đăng nhập tạm thời, như một role được assume, URL sẽ chết khi các thông tin đó hết hạn.

Những gì bạn có:

  • Không phải thay đổi bucket hay các policy của nó.
  • Kiểm soát chính xác: một đối tượng, một phương thức, một thời hạn.
  • Hoạt động trên mọi nhà cung cấp hỗ trợ ký trước SigV4.

Những gì bạn không có:

  • Không có mật khẩu. Ai có URL đều có thể dùng nó, bao nhiêu lần tùy thích, cho tới khi hết hạn.
  • Không giới hạn lượt tải xuống và không thu hồi theo từng liên kết. Bạn chỉ có thể vô hiệu hóa URL sớm bằng cách thu hồi khóa đã ký nó.
  • Không có thư mục. Bạn ký từng đối tượng một, nên chia sẻ một thư mục 300 tệp nghĩa là 300 URL.
  • Không giữ kín tên. URL hiển thị tên bucket, khóa đối tượng và access key ID của bạn.

Để hiểu sâu về cơ chế, bao gồm tải lên, từng tham số X-Amz-* và mã SDK, xem giải thích URL ký trước của S3.

Nếu bạn đã phân phối bucket qua Amazon CloudFront, bạn có thể yêu cầu URL ký hoặc cookie ký trên một cache behavior. Bucket vẫn ở chế độ riêng tư sau origin access control (OAC), thứ AWS khuyến nghị thay cho origin access identity cũ hơn: một bucket policy chỉ cho phép distribution của bạn đọc các đối tượng. Bạn đăng ký khóa công khai trong một trusted key group và ký bằng khóa riêng tương ứng.

  • URL ký phù hợp với từng tệp riêng lẻ. Với một custom policy, bạn cũng có thể đặt thời điểm bắt đầu và dải IP, và dùng lại một policy cho nhiều tệp bằng ký tự đại diện. Chúng có thể tồn tại ngắn hoặc kéo dài nhiều năm.
  • Cookie ký phù hợp với nhiều tệp cùng lúc, như mọi phân đoạn của một video, mà không phải thay đổi URL.

Đây là công cụ phù hợp khi bạn chạy một ứng dụng đã xác thực người dùng và phân phối nội dung ở quy mô lớn. Để gửi vài tệp cho người ngoài nhóm, nó có nghĩa là phải thiết lập distribution, quản lý khóa và viết mã ký từng yêu cầu.

Giới hạn bucket policy theo một dải IP cố định là một lựa chọn gốc khác, nhưng nó chỉ hữu ích khi bạn biết mạng của người nhận, điều hiếm khi xảy ra với những người ngoài tổ chức của bạn.

Cách 3: liên kết chia sẻ với Nubbo

Nubbo kết nối với bucket của bạn và mang tới liên kết chia sẻ với những kiểm soát mà URL ký trước thiếu, không cần viết mã. Bên dưới, nó vẫn dùng URL ký trước: Nubbo kiểm tra các quy tắc của liên kết trước rồi mới cấp một URL có thời hạn ngắn, nên tệp đơn lẻ đi thẳng từ bucket của bạn tới trình duyệt của người nhận.

Bước 1: Kết nối bucket của bạn

Đăng ký miễn phí, xác minh email, rồi mở Bucket và nhấn Kết nối bucket. Trình hướng dẫn hỏi nhà cung cấp của bạn (Amazon S3, Cloudflare R2, DigitalOcean Spaces, Wasabi, Backblaze B2 hoặc một endpoint tương thích S3 tùy chỉnh), cách kết nối (thiết lập tự động với khóa có toàn quyền truy cập, hoặc khóa giới hạn cho một bucket), khóa và bucket của bạn. Nó kiểm tra khóa và bucket, rồi kết thúc bằng việc kiểm tra CORS với một lần tải lên thực từ trình duyệt của bạn. Bucket vẫn ở chế độ riêng tư và khóa của bạn được lưu ở dạng mã hóa AES-256-GCM. Gói Miễn phí bao gồm 2 kết nối.

Bước 2: Chọn tệp hoặc thư mục

Tìm mục đó trong trình khám phá và chọn Chia sẻ. Bạn cũng có thể vào trang Đã chia sẻ, nhấn Liên kết mới và chọn bucket cùng tệp hoặc thư mục ở đó.

Bước 3: Đặt lớp bảo vệ

Cả ba kiểm soát đều là tùy chọn và có trên mọi gói:

Kiểm soátCách hoạt động
Mật khẩuTừ 4 đến 50 ký tự. Sau 10 lần nhập sai, liên kết bị khóa trong 15 phút.
Ngày hết hạnTắt theo mặc định: liên kết vẫn hoạt động khi tệp hoặc thư mục còn trong bộ lưu trữ của bạn.
Số lượt tải xuống tối đaĐể trống nghĩa là không giới hạn. Khi đạt tới số lượt, liên kết ngừng phục vụ tệp.

Bước 4: Tạo và gửi liên kết

Nhấn Tạo liên kết, sao chép và gửi qua email, tin nhắn hay bất cứ công cụ nào bạn dùng. Người nhận mở một trang tải xuống gọn gàng và không cần tài khoản. Một liên kết thư mục cho phép họ duyệt thư mục, tải từng tệp hoặc lấy mọi thứ dưới dạng ZIP, được trình duyệt của họ tạo ra bằng cách tải từng tệp thẳng từ bucket của bạn.

Bước 5: Gửi mật khẩu riêng

Gửi mật khẩu trong cùng tin nhắn với liên kết thì mất hết ý nghĩa. Nếu liên kết có mật khẩu, Gửi mật khẩu qua email sẽ gửi nó dưới dạng liên kết hiển thị một lần: mật khẩu chỉ hiện một lần, liên kết hiển thị hết hạn sau 24 giờ, 3 ngày hoặc 7 ngày, và bạn có thể thêm một ghi chú ngắn. Bạn sẽ được thông báo khi nó được mở.

Bước 6: Theo dõi và thu hồi

Trang Đã chia sẻ liệt kê mọi liên kết cùng trạng thái và số lượt tải xuống. Bạn có thể chỉnh sửa mật khẩu, thời hạn hoặc giới hạn, vô hiệu hóa liên kết (nó ngừng cấp URL tải xuống mới ngay lập tức) và mở lại nó sau với cùng địa chỉ.

Chia sẻ với những người cụ thể thay vì một liên kết

Một liên kết hoạt động với bất kỳ ai có nó. Khi bạn chỉ muốn những người được chỉ định truy cập, tính năng Chia sẻ với mọi người của Nubbo (trên gói Personal và Pro) gửi một tệp hoặc thư mục tới các địa chỉ email cụ thể với quyền xem hoặc tải xuống, thời hạn tùy chọn và giới hạn lượt tải xuống, đồng thời ghi lại mỗi lần truy cập. Người nhận cần có tài khoản Nubbo và tìm thấy mục đó trong Được chia sẻ với tôi. Personal cho phép 10 người mỗi mục và 50 lượt chia sẻ đang hoạt động; Pro cho phép 50 và 500.

Các gói trả phí cũng có liên kết mã hóa: trình duyệt tạo một bản sao được niêm phong của tệp và khóa chỉ nằm trong chính liên kết, nên Nubbo không thể đọc nó.

Bạn nên dùng cách nào?

  • Một tệp, một lần, và bạn đã cấu hình AWS CLI: URL ký trước là cách nhanh nhất.
  • Một ứng dụng đã cho người dùng đăng nhập và phân phối nhiều nội dung: URL hoặc cookie ký của CloudFront.
  • Chia sẻ thường xuyên với người ngoài nhóm, cả thư mục hoặc bất cứ thứ gì cần mật khẩu hay giới hạn: một liên kết chia sẻ giúp tiết kiệm thời gian và tránh sai sót.

Không chỉ một liên kết

Hai tính năng liên quan bao quát những trường hợp phổ biến khác. Yêu cầu tệp cho bạn một liên kết tải lên công khai để mọi người có thể gửi tệp vào bucket của bạn mà không thấy gì khác bên trong. Thư viện ảnh biến một thư mục ảnh hoặc video thành một trang có thể duyệt với bố cục, hình mờ và mật khẩu riêng. Với gói Miễn phí, bạn có 3 mỗi loại và liên kết chia sẻ không giới hạn; Personal và Pro bỏ các giới hạn đó. Một lưu ý thẳng thắn: ảnh thu nhỏ được tạo trên máy chủ của Nubbo và lưu trong chính bucket của bạn trong .nubbo-thumbs/.

Câu hỏi thường gặp

Làm thế nào để chia sẻ một tệp từ S3 mà không công khai nó?

Giữ bucket ở chế độ riêng tư và cấp quyền truy cập có chữ ký thay thế: một URL ký trước cho một đối tượng (từ AWS CLI hoặc SDK), một URL hoặc cookie ký của CloudFront nếu bạn đã phân phối bucket qua CloudFront, hoặc một liên kết chia sẻ từ công cụ như Nubbo, bổ sung mật khẩu, thời hạn và giới hạn lượt tải xuống trên nền URL ký trước.

Amazon S3 có an toàn để chia sẻ tệp không?

Có, miễn là bucket vẫn ở chế độ riêng tư. Bucket mới mặc định không cho phép truy cập công khai và S3 Block Public Access ngăn bất kỳ ai mở chúng về sau. Rủi ro đến từ việc công khai đối tượng hoặc làm lộ liên kết có chữ ký, vốn hoạt động với bất kỳ ai có chúng cho tới khi hết hạn.

Bucket S3 mới có mặc định ở chế độ riêng tư không?

Có. AWS cho biết bucket, access point và đối tượng mới mặc định không cho phép truy cập công khai, và bốn cài đặt Block Public Access ghi đè mọi policy hoặc ACL có thể mở chúng về sau.

Người nhận có cần tài khoản AWS hoặc Nubbo không?

Không. URL ký trước, URL ký của CloudFront và liên kết chia sẻ của Nubbo đều hoạt động trên mọi trình duyệt mà không cần tài khoản. Chỉ Chia sẻ với mọi người, tính năng gửi một mục tới những người cụ thể, mới yêu cầu họ có tài khoản Nubbo.

Một liên kết S3 được chia sẻ có thể kéo dài bao lâu?

Một URL ký trước kéo dài tối đa 7 ngày khi ký bằng khóa người dùng IAM, và ngắn hơn với thông tin đăng nhập tạm thời. URL ký của CloudFront kéo dài theo policy của bạn. Một liên kết chia sẻ của Nubbo không có thời hạn trừ khi bạn đặt, vì nó cấp một URL mới có thời hạn ngắn cho mỗi lượt tải xuống.

Tệp có đi qua Nubbo khi ai đó tải xuống từ liên kết chia sẻ không?

Không: trình duyệt tải từng tệp thẳng từ bucket của bạn bằng một URL ký trước. Tải xuống ZIP nhiều tệp được tạo ngay trong trình duyệt bằng cách tải từng tệp thẳng từ bucket của bạn: Nubbo không bao giờ thấy nội dung.

Nguồn

Giá và giới hạn lấy từ các trang chính thức bên dưới. Nhà cung cấp có thể thay đổi chúng, nên hãy kiểm tra trước khi quyết định.