我正在尝试使用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未经授权>执行: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的策略:
我正在使用: Python 2.7 烧瓶1.0.2
答案 0 :(得分:0)
您提供的策略RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.domain\.co.uk$
RewriteCond %{HTTP_HOST} ^(\w+)\.domain\.co.uk$
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1
RewriteRule ^(.*)$ /%1 [QSA]
适用于DynamoDB流。它不允许访问表。
解决此问题的一种方法是添加AWSLambdaDynamoDBExecutionRole
策略,尽管更好的方法是创建一个IAM策略,该策略仅允许所需的那些操作和仅所需的那些资源(DynamoDB表)。这是这样做的example。