2013-11-25 189 views
1

我有一個應用程序,可以讓用戶發佈和共享文件,目前它是我服務器提供這些文件,但隨着數據的增長,所以我正在研究使用Amazon S3。然而,我使用動態規則來確定某些用戶之間是什麼是公有的和什麼是私有的,所以服務器是唯一可能的仲裁者,即不能在應用/客戶端上決定權限。隱私在亞馬遜S3

簡單地說,我想我可以讓我的服務器從S3獲取數據,然後將它們發回給應用程序。但顯然,我支付了兩次帶寬,更不用說讓我的服務器做不必要的工作。

這似乎是一個相當普遍的問題,所以我想知道人們通常如何解決這個問題? (就像我讀過Dropbox將其數據存儲在S3上一樣)。

回答

2

我們有一個幾乎具有相同要求的應用程序,並且有一個非常好的解決方案。 S3支持已簽名的過期S3 URL來訪問對象。如果您有一個私人的S3對象,但您不能訪問其他人,則可以創建這樣一個URL。如果您將該URL提供給其他人,他或她可以使用它來獲取他們通常無法訪問的對象。

因此,對於您的使用案例的解決辦法是:

  1. 用戶做一個GET中的URL你的網站
  2. 你的代碼驗證的用戶應該能夠看到物體(通過您的應用程序自定義動態規則)
  3. 該網站返回一個重定向響應,該響應將在5分鐘後過期,例如在5分鐘內過期
  4. 用戶的Web瀏覽器對該已簽名的S3 URL執行GET操作。由於它已正確簽名且尚未過期,S3將對象的內容直接返回給用戶的瀏覽器。

數據從S3傳遞給用戶,而無需通過您的網站返回。只有您的應用程序已授權的用戶才能獲取數據。而且,如果用戶書籤或共享URL,則在到期時間過後,它將不起作用。

+0

謝謝。這個重定向是處理事情的好方法。如果我希望某些資源對其他用戶來說基本上是永久性的,那麼我可以選擇將過期時間設置爲10年或更長時間,對嗎? – Victor

+0

是的,你可以在將來很快到期。 –