用户通过cognito身份验证后,如何通过用户凭据访问s3存储桶?

时间:2019-02-28 20:53:00

标签: javascript amazon-web-services amazon-s3

我在节点env中使用javascript sdk,希望能够为每个用户分配一个“密钥” /文件夹。我可以进行身份​​验证并使用cognito获得令牌。但是,设置以下规则后,我的访问被拒绝。我实际上该如何传递凭据来访问users对象?

IAM中的政策如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*",
                "s3:Put*"
            ],
            "Resource": [
                "arn:aws:s3:::myBucket",
                "arn:aws:s3:::myBucket/*"
            ],
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "${aws:username}/*"
                    ]
                }
            }
        }
    ]
}

1 个答案:

答案 0 :(得分:1)

您的政策有误。

以下是解决方法: 在AWS控制台中设置了Cognito设置后,您将获得两个角色,auth cognito角色和unauth。转到IAM和资源中的auth角色,看起来像这样...

“资源”:[                 “ arn:aws:s3 ::: mybucket / Users / $ {cognito-identity.amazonaws.com:sub}”,]

认知身份:子部分是将文件夹与经过身份验证的用户相关联的部分。

然后在节点中,当您放置或获取时仅使用相同的密钥,但是在这里-$ {cognito-identity.amazonaws.com:sub传递用户的身份ID。我不确定如何从AWS控制台获取identityID,但是您绝对可以使用cli获取它。只需查看cognito api部分,以了解如何获取identityID。

希望有帮助。