AWS DynamoDB问题:用户无权执行:dynamodb:PutItem在资源上

时间:2016-01-14 08:31:08

标签: node.js amazon-web-services amazon-dynamodb aws-sdk aws-cli

我正在尝试从部署在AWS ElasticBeanStalk上的Node应用程序访问DynamoDB。我收到错误“用户无权执行:dynamodb:PutItem on resource”

它在本地运行得非常好,只有当我部署到AWS时才停止执行。

任何人都知道修复?提前谢谢!

4 个答案:

答案 0 :(得分:19)

dynamoDB访问被拒绝通常是一个政策问题。检查您正在使用的IAM /角色策略。快速检查是添加

{{1}}
通过转到AWS控制台中的“权限”标签,

您的角色中的政策。如果它在此之后有效,则表示您需要创建正确的访问策略并将其附加到您的角色。

答案 1 :(得分:2)

在AWS上的Node应用中检查用于连接DynamoDB的访问密钥。此访问密钥属于在IAM中没有必要权限的用户。因此,找到IAM用户,创建或更新适当的策略,你应该做得很好。

对于Beanstalk,您需要在发布时设置用户策略。查看the official docs here

并查看the example from here too,由@Tirath Shah提供。

答案 2 :(得分:0)

就我而言(出于实验目的,我尝试通过SageMaker Notebook写入DynamoDB表),完整的错误如下所示:

ClientError: An error occurred (AccessDeniedException) when calling the UpdateItem operation: User: arn:aws:sts::728047644461:assumed-role/SageMakerExecutionRole/SageMaker is not authorized to perform: dynamodb:UpdateItem on resource: arn:aws:dynamodb:eu-west-1:728047644461:table/mytable

我需要转到AWS控制台-> IAM->角色-> SageMakerExecutionRole,并附加以下两个策略:

AmazonDynamoDBFullAccess
AWSLambdaInvocation-DynamoDB

在现实世界中,我建议遵循最小许可的原则,并应用允许通过put item方法的策略,以避免发生意外(例如,从表中删除记录)

答案 3 :(得分:-1)

已经给出了答案,但这是对您的AWS用户或角色使用策略的最佳实践。

仅从特定表获取对象

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "dynamodb:DescribeTable",
                "dynamodb:GetItem"
            ],
            "Resource": "arn:aws:dynamodb:us-west-2:<account_number>:table/dev-panels"
        }
    ]
}

要验证

aws dynamodb describe-table --table-name dev-panels

放置对象

 {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": [
                    "dynamodb:DescribeTable",
                    "dynamodb:PutItem"
                ],
                "Resource": "arn:aws:dynamodb:us-west-2:<account_number>:table/dev-panels"
            }
        ]
    }

允许对一张桌子执行所有操作。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllAPIActionsOnBooks",
            "Effect": "Allow",
            "Action": "dynamodb:*",
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/<youtable_name>"
        }
    ]
}

验证角色或用户

aws dynamodb put-item --table-name dev-panels --item file://user.json --return-consumed-capacity TOTAL

user.json

    {
        "Name": {"S": "adiii"},
    }