学习AWS - 使用S3访问IAM角色

问题描述 投票:0回答:1

目前我正在研究一个用例,我需要使用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
1个回答
1
投票

我最近遇到了这个问题。此$ {cognito-identity.amazonaws.com:sub}值不是您的cognito用户池中的任何值。它是您从cognto身份获得的身份ID。

例如:us-east-1:aaaaaaa-bbbb-1111-ccccccccc11f

你可以使用get_id方法在javascript sdk中为cognito获取此id

© www.soinside.com 2019 - 2024. All rights reserved.