使用CloudFormation创建SQS FIFO队列执行amplify push报访问拒绝错误
问题根因
你收到的sqs:CreateQueue访问被拒绝错误,和你配置的SQS队列策略、QueueExecutionRole没有关系。这两个配置的作用是管控已创建完成的SQS队列的访问权限,而当前报错是你执行amplify push所用的IAM身份(Amplify后端部署默认使用的execution角色)本身没有创建SQS队列的权限,部署流程在第一步创建队列时就被拦截。
解决方案
1. 给Amplify部署角色添加SQS操作权限
找到Amplify项目对应环境的部署执行IAM角色,通常命名格式为amplify-<项目名>-<环境>-<随机串>-executionRole,给该角色附加以下权限策略,无需填写固定账号ID:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:CreateQueue", "sqs:GetQueueAttributes", "sqs:SetQueueAttributes", "sqs:TagQueue", "sqs:DeleteQueue" ], "Resource": "arn:aws:sqs:us-east-1:*:grouping-queue-*.fifo" } ] }
2. 修正CloudFormation模板中的错误配置
你当前模板中的QueueExecutionRole和SQSPolicy配置不符合使用逻辑:
- 将Principal设置为
sqs.amazonaws.com是无效配置,SQS本身作为消息队列服务不需要访问你的队列,该参数应该填写实际要调用SQS接口的业务主体(比如Lambda、ECS服务角色等) - 如果你希望同账号内的身份可以访问队列,不需要手动填写账号ID,直接使用CloudFormation内置伪参数
AWS::AccountId即可自动获取当前部署账号ID,参考配置如下:
"SQSPolicy": { "Type": "AWS::SQS::QueuePolicy", "Properties": { "Queues": [{"Ref":"groupingQueue"}], "PolicyDocument": { "Statement": [ { "Action": ["SQS:SendMessage","SQS:ReceiveMessage"], "Effect": "Allow", "Resource": {"Fn::GetAtt":["groupingQueue","Arn"]}, "Principal": {"AWS": "*"}, "Condition": { "StringEquals": { "aws:PrincipalAccount": {"Ref": "AWS::AccountId"} } } } ] } } }
- 如果你仅需要同账号有对应IAM权限的身份访问队列,可以直接删除
QueueExecutionRole和SQSPolicy两段冗余配置,SQS默认支持同账号身份通过IAM权限校验访问。
3. 重新执行部署
完成上述调整后,重新运行amplify push -y即可正常完成SQS FIFO队列的部署。
内容的提问来源于stack exchange,提问作者Waleed Ahmad
相关产品推荐
相关产品推荐

