SNS主题到SQS队列的KMS访问被拒绝异常

时间:2020-06-26 19:01:54

标签: amazon-sqs amazon-sns

背景:我正在尝试通过使用SQS队列作为触发器来执行lambda函数。一旦lambda函数执行完毕,我就试图通过SNS主题将响应发送到另一个SQS队列。

SQS队列-> Lambda-> SNS主题-> SQS队列

我最初尝试使用Destinations将Lambda的响应发送到SQS,但这仅适用于异步调用,并且SQS被视为同步调用。精细。因此,现在我触发一个SNS主题,该主题随后处理将消息添加到SQS队列中。这种集成工作正常。

问题:SNS主题始终以发布到SQS队列失败而告终。我可以看到,死信队列中始终有消息,而实际队列中没有消息。这是我在CloudWatch上发现的错误消息

{
    "delivery": {
        "providerResponse": "{\"ErrorCode\":\"KMS.AccessDeniedException\",\"ErrorMessage\":\"null (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException; Request ID: c)\",\"sqsRequestId\":\"Unrecoverable\"}",
        "dwellTimeMs": 51,
        "attempts": 1,
        "statusCode": 400
    },
    "status": "FAILURE"
}

我可以看到KMS拒绝访问某些内容。但是我不确定谁会被KMS拒绝。 SNS主题未设置加密。已禁用。我最初启用了它,但是在遇到问题之后,我禁用了它。但是问题仍然存在。

我尝试过什么:

  1. 我尝试在SNS主题设置上禁用和启用加密。
  2. 我尝试查看与SNS主题和SQS队列关联的IAM角色。创建的服务角色很少,而且都没有任何限制。

1 个答案:

答案 0 :(得分:1)

在我写这个问题,越过t并点我的时候,我偶然发现了解决问题的方法。

通过队列操作(在SQS AWS控制台上)->配置队列-> SSE部分配置SQS队列侧的加密。

enter image description here

在实际队列中,使用默认的SQS KMS密钥选择了SSE选项,而死信队列没有设置,因此可以正常工作。

要解决此问题,有两种可能的解决方案:

  1. 取消选中SSE部分以停止使用KMS密钥。根据您的用例,您可能需要加密。
  2. 创建一个单独的密钥,您可以在SNS和SQS之间共享它。默认情况下,不能共享两个服务使用的密钥。
相关问题