Amazon-Web-Services

通過 S3 對象 GET 觸發 AWS Lambda

  • April 19, 2020

我的問題

我有一個公共 S3 儲存桶,它用作我發送給同事和客戶的大文件 (GB) 的儲存解決方案。這些文件會在幾週後自動刪除。

此設置的問題是,如果有人啟動 DDOS 並大量下載我的連結之一,我可能會遭受巨額費用。我最終可能會支付巨額的出口網路費用,我想避免這種情況。

一種解決方案可能是每當有人下載對象時觸發 Lambda 函式,並為該對象增加一個 DynamoDB 計數器。如果計數器超過一個合理的門檻值(例如,50 次下載),Lambda 函式會將文件設為私有以避免進一步的費用。

我的問題

如何配置 Lambda 函式以在有人從特定 S3 儲存桶請求文件時觸發?

正如@MLu 提到的,您可以使用預簽名的 URL。你也可以這樣做:

  1. 使用這樣的項目創建一個快速站點(在 S3 上執行),允許使用者註冊和登錄
  2. 然後使用登錄中的 JWT 令牌呼叫 Lambda 函式。Lambda 函式將對使用者進行身份驗證,並為 S3 對像生成一個預簽名的 url。一個很好的例子可以在這裡找到。
  3. 使用者可以使用預簽名的 url 下載對象。

與其將它們公開供任何人下載,我會將它們設為私有,並且僅將預簽名的 URL分發給您的同事和客戶。

您可以創建一個簡單的門戶,您的客戶可以在其中登錄並獲得一個指向 S3 對象的預簽名連結,該連結會在一小時內到期。如果他們需要再次下載,他們可以隨時獲得新連結。這將使您可以完全控制和審計誰可以下載您的 S3 對象,而不會冒巨額出口費用的風險。

看看這個:https ://aws.nz/best-practice/s3-presigned-url/

希望有幫助:)

引用自:https://serverfault.com/questions/1012962