簡體   English   中英

用於提供私有文件​​的AWS S3實現

[英]AWS S3 implementation for serving private files

使用案例:我們正在開發一個Web應用程序,客戶端已要求我們使用AWS S3來存儲圖像。 在應用程序中,Everyone將擁有自己的帳戶並將上傳自己的圖像,一些上傳的圖像將公開。

根據我的理解,我們可以通過使用預先編寫的URL來上傳圖像。 但我面臨的問題是,如何限制對其他用戶的圖像訪問。

使用Amazon S3有兩種基本方法:

  • 僅將其用作存儲介質,僅可由您的應用程序訪問,或
  • 使用它直接向最終用戶提供內容

在第一種情況下,只有您的應用程序可以訪問存儲在S3中的數據/文件。 它必須檢索內容並將其提供給用戶。 這是Web服務器的傳統方法。

在第二種情況下,您可以生成包含對存儲在S3中的文件的引用的HTML頁面。 例如,如果圖像出現在網頁中,則src=參數將指向Amazon S3 URL。 然后從S3提供該文件,而無需通過您的Web服務器。

這可以通過使用預簽名URL來增強,這些URL是時間限制的URL,可以訪問存儲在Amazon S3中的私有內容。 它的工作原理如下:

  • 這些文件存儲在S3中並保持私有(意味着不允許訪問)
  • 您的應用程序完全負責確定哪些用戶可以訪問哪些文件
  • 當應用程序希望授予用戶訪問權限時(例如,他們可能希望查看自己的照片),它會生成一個預簽名URL並將其包含在HTML頁面中
  • 當用戶的Web瀏覽器使用預簽名URL訪問內容時
  • Amazon S3接收請求,驗證預簽名URL上的簽名和時間戳,如果獲得批准,則提供文件以響應請求

預簽名URL包括:

  • 對所請求對象的引用
  • 與具有訪問對象權限的IAM(身份和訪問管理)實體關聯的訪問密鑰 - 例如,您可以創建具有必要權限的IAM用戶,然后將這些訪問憑據提供給您的應用程序
  • 到期時間戳 ,預簽名URL有效
  • 加密計算的簽名 ,用於驗證預簽名URL是否由擁有訪問密鑰的實體創建(實際上,它驗證密碼並散列上述信息)

預簽名URL只需幾行代碼即可創建,無需調用AWS API。

底線:保持所有圖像的私密性。 您的應用程序確認每個用戶即時訪問圖像的權限,然后生成URL以授予限時訪問權限。

您可以使用簽名網址和簽名Cookie來提供私人內容。 如果您無法更改應用程序,使用私人鏈接可能不可行,簽名的cookie可以幫助那里。 此外,CloudFront還提供了進一步的安全性和效率改進,請查看http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html上的文檔。

如果您計划實施細粒度的訪問控制,您可以遵循多種方法。 作為第一步,您需要為每個用戶提供唯一的空間來上傳內容。 這可以是存儲桶中的存儲桶或路徑前綴(您將其視為目錄)。

通常,我建議使用每個用戶的路徑前綴對用戶空間進行分區,這樣您就可以使用IAM角色或創建具有所需細粒度訪問控制的預簽名URL,以便特定用戶可以訪問自己的空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM