【问题标题】:KMS Access Denied exception on SNS Topic to SQS queueSNS 主题到 SQS 队列的 KMS 访问被拒绝异常
【发布时间】:2020-06-26 19:01:54
【问题描述】:

背景:我正在尝试使用 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 角色。创建的服务角色很少,而且没有任何限制。

【问题讨论】:

    标签: amazon-sqs amazon-sns


    【解决方案1】:

    当我在写这个问题并穿过我的 t 并点缀我的 i 时,我偶然发现了我的问题的解决方案。

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

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

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

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

    【讨论】:

    猜你喜欢
    • 2021-01-31
    • 2020-06-11
    • 2012-05-19
    • 2014-11-19
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    相关资源
    最近更新 更多