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
相关产品推荐
相关产品推荐

