我創建了一個IAM策略以允許Cognito用戶寫入我的S3存儲桶,但我想根據他們的Cognito ID將它們限制爲文件夾。我跟着亞馬遜的指示here並創建了一個政策,看起來像這樣:基於Cognito ID的S3文件夾訪問的IAM策略
{
"Effect": "Allow",
"Action": ["s3:PutObject","s3:GetObject"],
"Resource": [
"arn:aws:s3:::mybucket/myappfolder/${cognito-identity.amazonaws.com:sub}*"
]
}
但是當我嘗試使用AWS的iOS SDK的V2上傳我得到一個拒絕訪問錯誤。
如果我修改了資源的最後一個路徑組件與明確identityId
值我從SDK的AWSCognitoCredentialsProvider
它的作品越來越更換${cognito-identity.amazonaws.com:sub}
。
{
"Effect": "Allow",
"Action": ["s3:PutObject","s3:GetObject"],
"Resource": [
"arn:aws:s3:::mybucket/myappfolder/us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx*"
]
}
我的理解是這些應該等同於相同的東西。我是否在我的策略中遺漏了某些內容,或者是否應該在我的上傳請求中使用不同的路徑?
** 更新 **
我本來在iOS的這一問題,所以今晚我想這樣做在node.js的同樣的事情,結果是相同的。這裏是我使用節點的簡單代碼:
var s3 = new AWS.S3();
AWS.config.region = 'us-east-1';
AWS.config.credentials = new AWS.CognitoIdentityCredentials(AWSParams);
AWS.config.credentials.get(function (err) {
if (!err) {
console.log("Cognito Identity Id: " + AWS.config.credentials.identityId);
var bucketName = 'ch123_test_bucket';
var keyName = AWS.config.credentials.identityId + '.txt';
var params = {Bucket: bucketName, Key: keyName, Body: 'Hello World!'};
s3.putObject(params, function (err, data) {
if (err)
console.log(err)
else
console.log("Successfully uploaded data to " + bucketName + "/" + keyName);
});
}
而且,我感到我與iOS得到相同的結果:除非我在IAM策略提供一個明確的cognito ID的API與403
響應我已將我的IAM政策剝離到最低限度。這不起作用:
{
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:PutObject","s3:GetObject"],
"Resource": [
"arn:aws:s3:::ch123_test_bucket/${cognito-identity.amazonaws.com:sub}*"
]
}
]
}
這並不:
{
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:PutObject","s3:GetObject"],
"Resource": [
"arn:aws:s3:::ch123_test_bucket/us-east-1:68a5dc49-6cc7-4289-8257-d3d5636f7034*"
]
}
]
}
我不明白我在這裏失蹤......我已經能夠隨時找到的唯一的文檔顯示相同的示例我一直在使用的資源值。
要清楚,您包含的第一個策略與第二個策略不匹配。你確定他們是一樣的嗎?你可以包含你在你的應用中使用的代碼嗎?您是否使用轉帳管理員? – 2014-09-07 01:37:29
@BobKinney我已經更新了我的問題以顯示一個簡單的node.js示例來說明問題。 – ChrisH 2014-09-09 05:41:50
@ChrisH,謝謝你的詳細問題。我只是有一個評論和一個問題。我的評論:這行'var s3 =新的AWS。S3();'應該在設置證書之後(在第三行),否則會發生錯誤。問題是:你寫的是未認證的用戶,你如何爲認證的用戶做同樣的事情?謝謝! – securecurve 2015-09-02 13:45:17