我正在使用Amazon Web Services为我的用户提供访问DynamoDB表的权限。我正在使用Cognito登录,它似乎工作。我已经创建了数据库和查询我的数据库的策略。我在应用程序中有代码,我有一个用户组,我有数据库(写得很好),我已经写了政策。 AWS仍然给我一个访问错误。
知道我哪里错了吗?
答案 0 :(得分:0)
您需要转到IAM控制台并附加适当的策略,以便在您的表上执行getItem等操作。您需要为Cognito Identity Pool创建的unauth / auth角色附加策略。对于类似的工作应用程序,您可以使用AWS Mobile Hub,它将为您创建策略并提供示例应用程序,演示如何使用表格上的查询。
谢谢, 罗汉
答案 1 :(得分:0)
以下是我建议您解决问题的方法:
首先在DynamoDB表的Overview
标签中,复制Amazon Resource Name (ARN)
它应该类似于:
arn:aws:dynamodb:us-west-2:227509******:table/TableName
然后转到您的IAM控制台并点击左侧的Roles
。进入角色部分后,单击与您的表关联的应用的UnAuth_Role。应该是这样的:
Cognito_AppNameUnauth_Role
在此处,单击“创建角色策略” - 然后选择“自定义策略” - 然后单击“选择”。
复制此代码,但使用您的ARN进行编辑:
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:Scan",
"dynamodb:Query",
],
"Resource": [
"arn:aws:dynamodb:us-west-2:227509******:table/TableName",
"arn:aws:dynamodb:us-west-2:227509******:table/TableName/index/*"
]
}
]
}
如果您需要,请添加更多权限:
"dynamodb:DeleteItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:BatchWriteItem"
我无法保证可以解决问题。但这是朝着正确方向迈出的一步。
答案 2 :(得分:0)
我一直在努力解决同样的问题。我已成功通过Cognito UserPool进行身份验证,已设置验证的策略,如上所述遇到错误代码6。发现如果我从" Private"更改了用户表权限to" Public"虽然不可取,却允许我从表中读/写。
"条件"当您选择"私人"时,会添加以下条款而不是" Public"通过控制台。我无法找到明确的文件,说明这意味着什么/如何满足它所要求的条件。 (如果有人理解,请随时帮助编辑此回复!)
"Effect":"Allow",
"Action": [
"dynamodb:BatchGetItem",
"dynamodb:DescribeTable",
"dynamodb:GetItem",
"dynamodb:ListTables",
"dynamodb:Query"
],
"Resource": [
"arn:aws:dynamodb:...:table/...",
...
],
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:LeadingKeys": ["${cognito-identity.amazonaws.com:sub}"]
}
}