2016-11-04 26 views
1

給那裏的所有SaaS工程師/開發人員...在Amazon S3上安全存儲/訪問SaaS客戶數據的最佳做法是什麼?

我正在構建一個SaaS產品,它將在S3上存儲客戶數據。我想知道關於安全的最佳方法是什麼?

  • 讓一個IAM用戶使用桶策略。這很簡單,但數據安全性純粹由SaaS應用程序處理。如果出現故障,其他用戶可以訪問受限材料。
  • 如何爲每個新客戶帳戶創建一個IAM用戶(通過IAM REST API),併爲每個存儲對象擁有對象特定的ACL?更復雜但它在S3中也增加了一層安全性。
  • 還有其他方法嗎?

另外,通過SaaS應用程序提供對材料的訪問。我計劃將每個對象的'可讀名'替換爲一個GUID,以便它不容易被猜出,並使用帶有時間限制的預先簽名的URL來查看和下載它們。這是最佳做法嗎?什麼時間限制被認爲是安全和用戶友好的?

感謝

回答

1

你永遠不應該產生AWS IAM用戶對您的應用程序(選項2)的「最終用戶」。 IAM授予調用AWS API的權限,應用程序的最終用戶絕不需要調用API。

Amazon S3存儲信息應該通過標準方法您的SaaS應用程序:

  • 創建IAM角色爲您的應用
  • 選擇時推出亞馬遜EC2實例的IAM角色運行您的應用程序
  • 使用AWS開發工具包在Amazon EC2實例上運行的任何代碼都知道如何通過t自動獲取訪問憑證他EC2 instance metadata service

如果您希望爲來自Amazon S3的內容直接嚮應用程序的用戶,產生Amazon S3 pre-signed URLs,提供對存儲在S3存儲桶對象有時間限制的訪問。 15分鐘的失效時間可能是安全性與暫停接聽電話的用戶之間的良好折衷,但該時間取決於您。

您的S3存儲桶不應該有存儲桶策略,因爲所有訪問都將通過授予IAM角色的權限或通過預先簽名的URL進行。

使用隨機GUID作爲文件名是不相關,因爲您將具有適當的安全性而不是混淆。

+0

謝謝John!我在Heroku上託管,所以我只需要S3存儲。 API訪問的好處。但是,我不會將IAM用戶與客戶分享。這應該是內部的應用程序。關於桶政策,我有點困惑的答案。我需要授予對IAM用戶的存取權限。如果我授予他對存儲桶的訪問權限,他將能夠提供對象併爲客戶提供預先簽署的訪問權限。這樣,我不需要爲對象創建更多的ACL。最後,我猜想我錯誤地認爲預先提供了對所有對象的有限訪問權限。 – Whyves

+0

Amazon S3存儲桶策略通常用於爲**所有用戶**授予訪問權限。如果您希望授予特定用戶的訪問權限,請將策略放在IAM用戶本身(而不是S3存儲桶)上。 –