You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:24:03