调用 Scan 操作时如何解决(AccessDeniedException):用户:arn:aws:sts ...无权执行:dynamodb:对资源进行扫描..”?

Rôm*_*lho 2 python amazon-web-services amazon-dynamodb amazon-iam

我正在尝试使用 Elastic Beanstalk 和 Flask 将类似 Instagram 的应用程序部署到 AWS。使用eb deploy命令后,我可以访问应用程序主页,这不需要访问 DynamoDB 表。当我尝试登录时,应用程序应访问 DynamoDB 表来检索数据,例如图片中的点赞数,但它显示

500内部服务器错误

我的eb 日志返回此错误。

ClientError:调用 >Scan 操作时发生错误 (AccessDeniedException):用户:arn:aws:sts::013051511429:assumed-role/aws->elasticbeanstalk-ec2-role/i-049593eb550052c8f 无权执行 >perform: dynamodb :扫描资源:arn:aws:dynamodb:us-east->1:013051511429:table/cloudgram

我认为发生这种情况是因为IAM配置错误,它表示与我的 EC2 实例 (i-04959..) 对应的用户无权对我的 DynamoDB 表执行扫描。

我尝试过以下操作: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-api.html

这些是我附加到 aws-elasticbeanstalk-ec2-role 的策略:

  • 亚马逊RDS完全访问
  • AmazonS3完全访问
  • AWSLambdaDynamoDBExecutionRole
  • AWSElasticBeanstalkWebTier
  • AWSElasticBeanstalk多容器Docker
  • AWSElasticBeanstalkWorkerTier

我正在使用:Python 2.7 Flask 1.0.2

jar*_*mod 5

您提供的策略AWSLambdaDynamoDBExecutionRole是针对 DynamoDB 流的。它不允许访问表。

解决此问题的一种方法是添加AmazonDynamoDBFullAccess策略,但更好的方法是创建一个 IAM 策略,该策略仅允许所需的操作以及您需要的资源(DynamoDB 表)。这是这样做的一个例子。