【发布时间】:2019-07-08 10:27:54
【问题描述】:
目前我正在处理一个用例,我需要使用 AWS Cognito 对 Web 应用程序用户进行身份验证,并提供对 S3 存储桶中用户特定文件夹的访问权限。为此,我在浏览器端使用 JavaScript 并能够对用户进行身份验证。
我创建了一个 IAM 策略,我试图将 S3 对用户特定文件夹的访问限制为经过身份验证的用户。不知何故,这项政策不起作用。
我在这里尝试的政策如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"cognito-identity:*",
"mobileanalytics:PutEvents",
"cognito-sync:*"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::mycognitobuckettest",
"Condition": {
"StringLike": {
"s3:prefix": [
"cognito/mycognitobuckettest/${cognito-identity.amazonaws.com:sub}/",
"cognito/mycognitobuckettest/${cognito-identity.amazonaws.com:sub}/*"
],
"s3:delimiter": [
"/"
]
}
}
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::mycognitobuckettest/cognito/mycognitobuckettest/${cognito-identity.amazonaws.com:sub}/*"
}
]}`
如果我从资源路径中删除 ${cognito-identity.amazonaws.com:sub},我就可以访问 S3 存储桶。但是,如果我将它放入资源路径和条件键中,我会收到拒绝访问错误。
据我了解,${cognito-identity.amazonaws.com:sub} 的值是区域 ID 和 uuid,您可以像这样获得 var identityID = AWS.config.credentials.identityId
我正在尝试列出资源路径中的对象,下面是我用来列出对象的 JavaScript 代码
var listObjectParms = {Bucket: bucketName, Delimiter: '/', Prefix: bucketPrefix};
s3.listObjects(listObjectParms, function(err, data) {
if(err) {
console.log("Error", err);
} else {
console.log("LIST OBJECT successful", data);
}
});
${cognito-identity.amazonaws.com:sub} 的确切值是多少?
我已根据收到的身份 ID 在 S3 存储桶中创建了文件夹。
我现在被困在这一点上。 欢迎大家提供有关解决此问题的任何帮助。
谢谢,
阿维纳什
【问题讨论】:
标签: javascript amazon-web-services amazon-s3 amazon-cognito