首页 > 解决方案 > 如何让 lambda 函数访问所有 SQS 队列?

问题描述

我有一个会不断运行的 lambda 函数,以及一些将动态创建的 SQS 队列。我需要一种方法来允许 lambda 访问所有 SQS 队列,以便可以使用这些动态创建的队列 - 我该怎么做?

目前我正在使用一个执行角色,该角色具有一个带有单个队列 ARN 的 iam 策略,但似乎我无法创建多个执行角色。

标签: amazon-web-servicesaws-lambdaamazon-sqs

解决方案


编辑

正如下面的评论中所提到的,向所有内容开放 SQS 队列可能并不完全安全,因此我将保留我的初始解决方案以供感兴趣,但通常更好的解决方案是:

使用附加的 iAM 角色创建 lambda 函数,该角色可以访问所有 SQS 队列。这个政策看起来像

{
  "Version": "2012-10-17",
  "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "sqs:GetQueueUrl",
          "sqs:ChangeMessageVisibility",
          "sqs:ListDeadLetterSourceQueues",
          "sqs:SendMessageBatch",
          "sqs:PurgeQueue",
          "sqs:ReceiveMessage",
          "sqs:SendMessage",
          "sqs:GetQueueAttributes",
          "sqs:CreateQueue",
          "sqs:ListQueueTags",
          "sqs:ChangeMessageVisibilityBatch",
          "sqs:SetQueueAttributes"
        ],
        "Resource": "*"
      },
   ]
}


我最初设法通过创建附加权限的 SQS 队列来解决这个问题。创建 SQS 队列时,您可以为它们分配一个策略,您可以在其中指定权限和用户,例如以下策略允许所有用户的所有权限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "SQS:*",
      "Resource": "{{ queue_arn }}"
    }
  ]
}

推荐阅读