我在节点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}/*"
]
}
}
}
]
}
答案 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。
希望有帮助。