2016-02-11 19 views
0

S3對象我想要一些指導如何去了解這一點:,只有我的一些用戶可以訪問

我想有通過訪問只有少數用戶(用戶從我的S3存儲一些對象我網絡應用程序)。我查看了AWS文檔,看起來好像我需要爲每個用戶提供AWS訪問密鑰(?)。

顯然我不想這樣做,所以有沒有辦法在我的應用程序鎖定一些用戶,讓其他人?我使用Node.JS和MySQL(用於存儲我的用戶),如果這有所作爲。

非常感謝您的幫助。

回答

1

對S3訪問/權限方案的簡單描述是...對S3的訪問,像大多數其他AWS資源一樣,基於以IAM爲中心的訪問控制。因此,您可以通過授予用戶訪問權限(在S3上設置它)或授予對用戶的S3訪問權限(在IAM中將其設置爲策略)來授予對您的S3存儲桶的訪問權限。因此,無論訪問S3的任何人或任何人都必須向AWS進行身份驗證。同樣,這是一個非常高級的描述,只是指出訪問基於用戶/角色認證。

現在,假設您的Web應用在AWS(EC2?)上運行,那麼您的EC2實例已經(希望)被分配了IAM角色。一旦該IAM角色被分配了權限,EC2實例上運行的應用程序現在可以通過該角色訪問任何AWS資源。

但是,你不希望所有你的web應用的用戶訪問S3,所以我的兩個想法:

1)檢查您的應用程序中的用戶憑據(假定用戶需要與你的應用程序以某種方式進行身份驗證),並根據用戶憑證確定是否調用S3。然後,您將使用分配給EC2實例的IAM角色(EC2實例只能分配1個IAM角色)並訪問S3。

這第二個想法是一個非常糟糕的,對我來說味道不好。我只是把它指出來作爲一種可能性,並強調如何使用IAM用戶/角色。

2)此建議不會利用分配給EC2實例的IAM角色,儘管我總是主張將角色分配給實例,但始終可以鎖定該角色並拒絕對所有AWS資源的訪問,但您無法在啓動後向實例添加角色。

有兩個IAM用戶(S3Granted和S3Denied,其中每個用戶明顯具有訪問S3的適當策略)。您的web應用程序的每個用戶(例如Hillary Clinton,Donald Trump,Bernie Sanders和Ted Cruz)都會根據他們是否應該訪問S3映射到兩個IAM用戶之一。這將是你的MySQL數據庫中的一個字段。您不必費心檢查憑證(因爲您只需執行選項#1,並可繼續進行S3調用,而不管用戶如何,S3將基於IAM用戶帳戶授予或拒絕訪問您的Web應用程序用戶與相關的技術,您就不需要S3Denied用戶(你可能只是沒有用戶),但我想這將是清潔指定IAM用戶

例如:。

WebAppUser/Bernie Sanders --> IAMUser/S3Granted 
WebAppUser/Hillary Clinton --> IAMUser/S3Denied 
WebAppUser/Ted Cruz --> IAMUser/S3Granted 
WebAppUser/Donald Trump --> IAMUser/S3Denied 

對於選項#2,那麼您需要將IAM用戶m(S3Granted和S3Denied)的Access密鑰存儲在某個地方,以便您可以正確進行身份驗證。

此外,您需要做一些異常處理,以便您可以正確通知用戶他們已被拒絕訪問。

總的來說,#2只是一個壞主意。如果你只是在你的MySQL數據庫中有一個字段,指定他們是否可以訪問S3,並通過IAM角色進行S3調用或拒絕在你的Web應用程序中這樣做,那將會更加簡潔。不要讓它給S3來授予或拒絕訪問。

+0

感謝您的真棒迴應!假設我使用選項1,我是否會將所有S3對象設爲私有,然後通過AWS API爲經過身份驗證的用戶提取它們?如果是這樣,那麼做到這一點的最佳方式(您知道的性能方式)如何?我將在我的應用中大量使用視頻,因此速度非常重要(或者我認爲從AWS API獲取私有對象的性能與公共S3 URL相同或更好的性能是正確的)。再次感謝! – wyzkid207

+1

好吧,這有點難以回答,對於某個人來說,這可能是一個不同的,更深思熟慮的問題來回答。我認爲蘋果到蘋果,公共URL會更快,因爲通過API,它需要下載到服務器(快速增加),然後通過標準的HTTP(或者你使用的任何協議)提供服務)與直接從S3直接通過HTTP(或您使用的任何協議)提供服務。然而,可能會出現操縱你可以做服務器端(例如壓縮),使用戶下載更小/更快。 – Brooks

+0

對不起,我不是故意要超出這個問題的範圍:)感謝您的幫助!這是我想我必須做的。但現在我有一條前進的道路! – wyzkid207

相關問題