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

启用Amazon托管密钥加密SQS后EventBridge事件无法转发问题排查

解决EventBridge无法转发事件到启用Amazon托管密钥加密的SQS队列问题

我来帮你搞定这个问题——当你给SQS队列启用Amazon托管密钥(alias/aws/sqs)加密后,EventBridge突然停止转发事件,核心原因确实是权限配置遗漏,不过不是你现有的队列访问策略,而是KMS托管密钥的权限没给够!

问题根源

Amazon托管的alias/aws/sqs密钥虽然由AWS维护,但它的默认权限只允许队列的创建者使用它来加密和解密消息。EventBridge作为发送消息的服务主体,需要额外获得这个KMS密钥的两个关键权限:

  • kms:GenerateDataKey:用于生成加密消息所需的数据密钥
  • kms:Decrypt:确保服务能处理解密相关操作(可选但建议配置)

另外我注意到你现有队列访问策略里有个小细节:Queues字段引用的是createReceiptQueue,但你的目标队列是myQueue,这大概率是个笔误,会导致策略应用到错误的队列上,这也可能是问题的诱因之一。

解决方案

1. 修正SQS队列访问策略的队列引用

把队列策略里的Queues字段改成正确的队列引用:

createReceiptQueueAccessPolicy:
  Type: AWS::SQS::QueuePolicy
  DependsOn: [queueCreateInvoiceEvent, myQueue]
  Properties:
    Queues:
      - { Ref: myQueue }  # 这里改成myQueue,匹配你的目标队列
    PolicyDocument:
      Id: EventBridgeSqsAccessPolicy
      Version: "2012-10-17"
      Statement:
        - Sid: Allow-User-SendMessage
          Effect: Allow
          Principal:
            Service: "events.amazonaws.com"
          Action:
            - sqs:SendMessage
          Resource:
            - Fn::GetAtt: ["myQueue", "Arn"]
          Condition:
            ArnEquals:
              aws:SourceArn:
                - Fn::GetAtt: ["queueCreateInvoiceEvent", "Arn"]

2. 给Amazon托管SQS密钥添加EventBridge权限

你需要给alias/aws/sqs密钥添加权限,允许EventBridge服务执行必要的KMS操作。可以通过CloudFormation添加以下密钥策略资源:

SqsManagedKeyEventBridgePolicy:
  Type: AWS::KMS::KeyPolicy
  Properties:
    KeyId: alias/aws/sqs
    PolicyDocument:
      Version: "2012-10-17"
      Statement:
        - Sid: AllowEventBridgeToUseSqsManagedKey
          Effect: Allow
          Principal:
            Service: events.amazonaws.com
          Action:
            - kms:GenerateDataKey
            - kms:Decrypt
          Resource: "*"
          Condition:
            ArnEquals:
              aws:SourceArn: !GetAtt queueCreateInvoiceEvent.Arn

如果更倾向于控制台操作:

  • 打开KMS控制台,找到alias/aws/sqs密钥
  • 进入"密钥策略"标签页,点击"编辑"
  • 添加上述的权限语句,保存即可

验证

完成配置更新后,重新触发一次INVOICE_CREATED事件,检查SQS队列是否能收到消息。如果还是有问题,可以查看EventBridge的"规则"页面下的"目标状态",或者查看CloudWatch日志里的EventBridge错误信息,进一步排查。

内容的提问来源于stack exchange,提问作者florian norbert bepunkt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:02:31