AWS DynamoDB权限 - 用户查询数据库时收到错误

时间:2017-01-12 16:18:49

标签: ios amazon-web-services amazon-dynamodb

我正在使用Amazon Web Services为我的用户提供访问DynamoDB表的权限。我正在使用Cognito登录,它似乎工作。我已经创建了数据库和查询我的数据库的策略。我在应用程序中有代码,我有一个用户组,我有数据库(写得很好),我已经写了政策。 AWS仍然给我一个访问错误。

enter image description here

知道我哪里错了吗?

3 个答案:

答案 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"虽然不可取,却允许我从表中读/写。

DynamoDB Table Permissions

"条件"当您选择"私人"时,会添加以下条款而不是" 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}"]
  }
}