我正在尝试从部署在AWS ElasticBeanStalk上的Node应用程序中访问DynamoDB。但是我遇到了一个错误。
User is not authorized to perform: dynamodb:PutItem on resource
本地运行正常,但是当我部署到AWS后它就无法正常运行了。
我正在尝试从部署在AWS ElasticBeanStalk上的Node应用程序中访问DynamoDB。但是我遇到了一个错误。
User is not authorized to perform: dynamodb:PutItem on resource
本地运行正常,但是当我部署到AWS后它就无法正常运行了。
通常 DynamoDB 访问被拒绝是由于策略问题引起的。请检查您正在使用的 IAM/角色策略。一个快速的检查方法是添加
AmazonDynamoDBFullAccess
要在AWS控制台中为您的角色设置权限,请转到“权限”选项卡。如果此后可以正常工作,则表示您需要创建正确的访问策略并将其附加到您的角色。
AmazonDynamoDBFullAccess
应该可以使用,但最好只授予你期望调用的函数所需的权限,本例中是 dynamodb:PutItem
。这样可以避免意外的调用和后果。这里是可能权限的完整列表。 - Dan SaloAWSLambdaInvocation-DynamoDB
。 - JJ Roman使用AWS托管策略AmazonDynamoDBFullAccess授予完全的dynamodb访问权限不被推荐,也不是最佳实践。 尝试将您的表ARN添加到角色策略JSON中的资源键中。
"Resource": "arn:aws:dynamodb:<region>:<account_id>:table:/dynamodb_table_name"
PutItem
等策略权限。 - smcstewart登录到IAM > 角色,选择服务名称。确保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方法通过的策略,以避免意外情况(例如从您的表中删除记录)。