2012-01-17 201 views
4

我在使用GetSessionToken/GetFederationToken的Amazon S3中使用臨時會話,我計劃擁有超過10K個用戶,每個人都可以上傳到S3,因此初始時我想爲每個用戶使用一個存儲桶並設置寫入(上傳)每個用戶的每個桶的權限,但由於每個亞馬遜賬戶的桶數有限制,我已經放棄了這個想法。Amazon S3權限

如何設置允許公開閱讀的權限,以及僅當用戶想要上傳的對象的鍵的前綴時才上傳?

例如,如果用戶名X上傳文件,則密鑰必須與X_filename類似。

或者任何其他讓我有安全感的方式,這是一個移動應用程序,我不想在上傳文件時通過我們自己的服務器。

編輯:

我試着操作GetFederationToken與以下政策

"{ 
    "Statement":[{ 
     "Effect":"Allow", 
     "Action":["s3:PutObject","s3:GetObject","s3:GetObjectVersion", 
     "s3:DeleteObject",\"s3:DeleteObjectVersion"], 
     "Resource":"arn:aws:s3:::user.uploads/john/*" 
    } 
    ] 
}" 

我對S3桶user.uploads和文件夾約翰

但是任何上傳與會議證書來桶user.uploads與關鍵的約翰/文件名失敗,訪問被拒絕「

+0

這將工作,但你需要檢查一切。例如,政策可能是錯誤的。 - 爲內部測試做一個寬敞的測試,然後縮小它。此外,所有來自iOS的亞馬遜S3調用都需要使用您獲得的聯合令牌。 – 2012-01-17 21:46:12

回答

5

Amazon's Identity and Access Management (IAM)服務是什麼喲你需要。 documentation有許多例子,其中一些例子符合你的情況。

從文檔:

實施例5:允許一個夥伴文件拖放到的 企業桶

的特定部分在該示例中,我們創建了代表一個稱爲WidgetCo組 合作伙伴公司,然後爲需要訪問的合作伙伴公司創建特定人員(或 應用程序)的用戶,然後將 用戶加入該組。

然後,我們附加一個策略,使組織PutObject能夠訪問企業存儲桶中目錄後面的 : my_corporate_bucket/uploads/widgetco。

我們還希望防止WidgetCo組從桶做別的 ,所以我們添加拒絕權限上的 AWS賬戶的任何Amazon S3的資源除了PutObject任何 亞馬遜S3行動的聲明。只有在您的AWS賬戶的其他地方使用廣泛的政策 ,以便用戶能夠廣泛訪問Amazon S3時,才需要此操作。

{ 
    "Statement":[{ 
     "Effect":"Allow", 
     "Action":"s3:PutObject", 
     "Resource":"arn:aws:s3:::my_corporate_bucket/uploads/widgetco/*" 
    }, 
    { 
     "Effect":"Deny", 
     "NotAction":"s3:PutObject", 
     "Resource":["arn:aws:s3:::my_corporate_bucket/uploads/widgetco/*"] 
    }, 
    { 
     "Effect":"Deny", 
     "Action":"s3:*", 
     "NotResource": 」arn:aws:s3:::my_corporate_bucket/uploads/widgetco/*" 
    }] 
} 

你會爲每個用戶創建一個新的身份,並以此作爲需要控制訪問子文件夾(前綴)。

+0

是的,但即使不使用組,也不使用組,AWS用戶即時使用在AWS之外管理的聯合用戶\ – forcewill 2012-01-17 16:43:53

+0

聯合用戶可以使用與任何用戶相同的策略文檔。但政策文件需要很小 - 上面的例子可能適用於聯邦,我沒有嘗試過。所以你爲每個用戶制定一個定製的策略文檔。請注意,您應該使用官方AWS iOS sdk - 它支持會話令牌。 – 2012-01-17 21:36:20