2010-10-27 27 views
5

Để tránh liên kết nóng, leeching băng thông S3, v.v. Tôi muốn đặt thùng của mình ở chế độ riêng tư và phân phối tệp thông qua ứng dụng Rails. Khái niệm âm thanh nói chung rất dễ, nhưng tôi không hoàn toàn chắc chắn cách tiếp cận nào là tốt nhất cho tình huống.Làm thế nào để các tập tin proxy từ S3 thông qua ứng dụng đường ray để tránh leeching?

Tôi đang sử dụng kẹp giấy để quản lý tài sản chung. Có cách nào tích hợp để đạt được loại proxy này không?

Nói chung tôi có thể dễ dàng phân tích cú pháp url từ kẹp giấy và trỏ chúng trở lại bộ điều khiển của riêng tôi. Điều gì sẽ xảy ra từ thời điểm này? Tôi có nên sử dụng Net :: HTTP để tải xuống hình ảnh và sau đó phân phối nó với send_data không? Ở giữa tôi muốn đăng nhập referer và thiết lập đúng tiêu đề Control-Cache, vì tôi có một reverse-proxy ở phía trước của ứng dụng. Là Net :: HTTP + send_data cách cộng hưởng trong trường hợp này?

Có thể toàn bộ ý tưởng thực sự tồi tệ vì một số lý do tôi không biết tại thời điểm này? Tôi chung tôi tin rằng reveling các liên kết trực tiếp đến S3 xô nào là nguy hiểm và năng suất trong một số vấn đề nghiêm trọng trong trường hợp leeching/hot-liên kết ...

Cập nhật:

Nếu bạn có bất kỳ ý tưởng khác mà có thể giảm hóa đơn S3 và ngăn chặn leeching liên kết nóng trong anyway xin vui lòng chia sẻ, ngay cả khi họ không liên quan trực tiếp đến Rails.

+0

Bạn hiện có vấn đề với leeching? Tôi sẽ không muốn làm điều gì đó sẽ làm chậm đáng kể ứng dụng của tôi, chỉ để giải quyết một vấn đề tôi có thể có trong tương lai. – mikerobi

+0

Nó không chỉ là vấn đề giải quyết một vấn đề tiềm năng. Tôi chỉ không muốn thức dậy một ngày với hóa đơn S3 áp đảo, rằng tôi không thể trả tiền ... Tôi không chắc chắn như vậy, nếu điều này sẽ làm chậm ứng dụng "đáng kể", khi tài sản sẽ được keept trong memcache/đảo ngược Ủy quyền. – mdrozdziel

Trả lời

1

Tôi có thể tránh làm điều này - ít nhất là cho đến khi tôi không còn lựa chọn nào khác.

Bạn cần phải tính đến việc bạn có thể cũng sẽ thêm vào hóa đơn băng thông nếu bạn tải xuống hình ảnh mỗi lần. Ngoài ra, bằng cách xử lý từng hình ảnh thông qua một kịch bản, bạn cũng sẽ cần nhiều CPU và RAM hơn để thực hiện việc này. Không phải là triển vọng lớn nhất - IMHO.

Tôi có lẽ sẽ là enable the access logs cho Amazon S3 và viết một công cụ nhỏ để phân tích việc sử dụng và thay đổi quyền trên thùng/đối tượng trong trường hợp sử dụng lên mái. Chạy điều này như một cronjob cứ 10 phút một lần và bạn sẽ được cứu?

Bạn cũng có thể sử dụng s3stat. Họ cũng cung cấp một kế hoạch miễn phí.

Chỉnh sửa: Theo đề xuất của tôi cho Varnish, tôi thêm liên kết vào a blog entry about preventing hotlinking using Varnish.

+1

Tôi biết những nhược điểm của khóa học, đó là lý do tại sao tôi yêu cầu một ý tưởng cho giải pháp. Nói chung nó không phải là tất cả những gì xấu. Hãy nhớ rằng, hình ảnh có thể được rút tiền mặt rộng rãi trong hầu hết các trường hợp. Trong khi làm một số reasearch tôi đã đến một conslusion, rằng cách hiệu quả nhất sẽ là một reverse-proxy ở phía trước của S3 thay vì ray ứng dụng. Tôi có thể làm mọi thứ ở đó - kiểm tra referer, làm một số phân tích log mở rộng. Kết thúc trước đó sẽ làm đỏ hóa đơn S3 một cách ấn tượng và hiệu suất không được thấp hơn vào cuối phiên. – mdrozdziel

+0

Vâng, nghe hay đấy - tôi khuyên bạn nên bôi trơn. :) Chỉ cần ghi nhớ rằng mặc dù các hình ảnh được lưu trữ, bạn cũng chạy một thiết lập _complicated_ hơn bằng cách thêm một dịch vụ khác. Và có thể cũng cần thêm sức mạnh xử lý (ví dụ: một cá thể hoặc ít nhất là tài nguyên) cho proxy. – Till

4

Sử dụng (thùng riêng tư | tệp riêng tư) và sử dụng URL đã ký cho các tệp được lưu trữ trên S3.

Chữ ký bao gồm thời gian hết hạn (ví dụ: 10 phút kể từ bây giờ, bất kỳ điều gì bạn muốn đặt), cũng như băm mật mã. S3 sẽ từ chối cung cấp các tệp nếu chữ ký không hợp lệ hoặc nếu hết thời hạn.

Điều này rất hữu ích vì chỉ bạn mới có thể tạo URL hợp lệ cho các tệp riêng tư của mình trong S3 và bạn có thể kiểm soát thời gian các URL vẫn hợp lệ. Điều này ngăn chặn leeching, bởi vì leechers không thể đăng nhập URL của riêng họ và nếu họ nhận được URL mà bạn đã đăng nhập, URL đó sẽ hết hạn rất sớm và sau đó không thể sử dụng được.

5

Vì không có hạt và bu lông trả lời ở trên, đây là mẫu mã nhỏ về cách phát trực tuyến tệp được lưu trữ trên S3.

render :text => proc { |response, output| 
    AWS::S3::S3Object.stream(path, bucket) do |segment| 
    output.write segment 
    output.flush # not sure if this is needed 
    end 
} 

Tùy thuộc vào máy chủ web của bạn có thể (mongrel) hoặc có thể không (webrick) hoạt động, vì vậy đừng quá thất vọng nếu nó không phát triển.

1

tiền ký URL Cung cấp tạm thời:

def show 
     redirect_to Aws::S3::Presigner.new.presigned_url(
     :get_object, 
     bucket: 'mybucket', 
     key: '/folder/file.pdf' 
     expires_in: 60) 
    end 

S3 vẫn phân phối các nội dung, do đó bạn giảm tải công việc từ Rails (đó là rất chậm vào nó), xử lý HTTP bộ nhớ đệm, hoạt động HEAD, và sử dụng Amazon CDN .

Các vấn đề liên quan