簡體   English   中英

使用預先簽名的URL進行AWS S3身份驗證的用戶訪問?

[英]AWS S3 authenticated user access using presigned URLs?

我想將文件托管在私有AWS S3存儲桶中,該存儲桶只能由經過我的Web應用程序身份驗證的用戶訪問。 這些文件下載的鏈接必須是靜態的。

簡單的代理方法:

我知道可以使用代理服務來完成。 在這種情況下,靜態鏈接將指向該服務,並且該服務將處理驗證請求用戶的會話,如果有效,該服務將使用來自S3的文件內容進行響應。

預設URL代理方法:

但是,我沒有實現代理來控制對文件的訪問,而是想知道是否可以以某種方式使用預簽名的URL?

https://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html

在這種情況下,代理的作用只是向用戶返回一個預簽名的URL,而不是從S3返回文件的實際有效負載。 然后,最終用戶可以使用此預簽名URL直接從S3下載文件。 我尚不清楚的是如何在瀏覽器中管理此流程,我假設我需要將JavaScript編寫為以下內容:

  1. 從代理服務請求預簽名的URL
  2. 等待回應
  3. 使用響應中提供的預簽名URL(預簽名URL)下載實際文件

我在正確的軌道上嗎?

只需將307重定向從您的服務器返回到預先簽名的URL。 例如客戶要求:

GET /the/file HTTP/1.1

然后服務器生成一個預簽名的URL並響應:

HTTP/1.1 307 Temporary Redirect
Location: https://s3.aws..../the/file?...

這是一種有效的方法。

當心過期的憑據。 在用於簽名的URL到期或它們的到期時間(由您控制​​,在限制范圍內)發生之前,簽名的URL在較短的時間內會比較有用。 如果您已經在使用臨時憑證(這非常好!),則可能需要顯式使用AssumeRole來控制到期時間(您可以從角色中假設一個角色,以獲得具有新時間限制的新臨時憑證) 。

還有另一種選擇:Amazon Cognito。 這樣可以彌合用戶帳戶之間的鴻溝,然后直接向用戶的瀏覽器環境頒發每用戶的短期憑據。 然后,他們可以使用自己的憑據對S3進行API調用。 這有一些好處(您可以更好地在用戶個人資料中表達用戶權限,而不是在用戶生成URL之前先進行檢查)和一些復雜性(我可以使用用戶憑據來對您的帳戶進行操作,還是可以控制我可以調用的API?當IAM是您唯一的身份驗證層時,特權確實很重要。)另一方面,IAM呼叫是免費的,您無需為托管它們的服務器付費,因此,如果您使用聯合身份驗證,那么這聽起來很划算-用戶池,而不是許多。

暫無
暫無

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

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