我正在尝试从部署在AWS ElasticBeanStalk上的Node应用程序访问DynamoDB。我收到错误“用户无权执行:dynamodb:PutItem on resource”
它在本地运行得非常好,只有当我部署到AWS时才停止执行。
任何人都知道修复?提前谢谢!
答案 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"},
}