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

EventBridge无法向SQS发送消息,权限配置是否正确?

解决建议

核心问题定位

你遇到的问题本质是SQS队列缺少允许EventBridge发送消息的资源级权限策略,而非EventBridge的服务角色配置问题。AWS控制台添加目标时会自动给SQS追加权限策略,但CloudFormation不会自动做这件事,这就是控制台规则正常、CloudFormation规则失效的根本原因。

而添加第二个目标后恢复正常的现象,是因为控制台添加目标时自动给SQS加上了权限策略,此时原CloudFormation创建的规则也满足权限条件;移除第二个目标后,若SQS的权限策略被误删(或仅针对第二个规则配置),原规则就会再次失去权限。


具体修复步骤

1. 给SQS队列添加权限策略(关键)

通过CloudFormation为目标SQS配置AWS::SQS::QueuePolicy,明确允许EventBridge服务主体向其发送消息。以下是最小权限的示例配置:

MySQSPermissionPolicy:
  Type: AWS::SQS::QueuePolicy
  Properties:
    Queues:
      - !Ref YourTargetSQSQueue  # 替换为你的SQS队列逻辑ID
    PolicyDocument:
      Version: '2012-10-17'
      Statement:
        - Effect: Allow
          Principal:
            Service: events.amazonaws.com
          Action: sqs:SendMessage
          Resource: !GetAtt YourTargetSQSQueue.Arn
          # 限制仅指定的EventBridge规则可以发送消息(最小权限原则)
          Condition:
            ArnEquals:
              aws:SourceArn: !Ref YourEventBridgeRule  # 替换为你的EventBridge规则逻辑ID

如果多个EventBridge规则都需要向该SQS发送消息,可以将Condition改为匹配EventBus下的所有规则:

Condition:
  ArnLike:
    aws:SourceArn: !Sub arn:aws:events:${AWS::Region}:${AWS::AccountId}:rule/YourEventBusName/*

2. 移除不必要的EventBridge服务角色

你之前创建的EventBridgeServiceRole在同账户场景下完全不需要——EventBridge向同账户SQS发送消息,依赖的是SQS的资源权限策略,而非EventBridge自身的服务角色。保留该角色反而可能引入权限混淆,建议删除或不关联到EventBridge规则。

3. 验证配置正确性

  • 检查SQS控制台的「权限」标签,确认已存在允许events.amazonaws.com执行sqs:SendMessage的策略
  • 查看EventBridge规则的「监控」标签,或CloudWatch日志中EventBridge的日志组,确认是否存在AccessDenied类的错误信息
  • 确保EventBridge规则的目标配置中未指定不必要的RoleArn(同账户下无需配置)

内容的提问来源于stack exchange,提问作者perage

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:24:51