【问题标题】:How can I give a lambda function access to all SQS queues?如何让 lambda 函数访问所有 SQS 队列?
【发布时间】:2019-11-19 19:18:01
【问题描述】:

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

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

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-sqs


    【解决方案1】:

    编辑

    正如下面的评论中提到的,向所有内容开放 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 }}"
        }
      ]
    }
    

    【讨论】:

    • 让每个人都可以完全访问您的 SQS 队列似乎有点危险。我将为您的 lambda 创建一个 IAM 角色,并将 Resource 设置为对所有队列使用通配符:arn:aws:sqs:us-west-2:1234567890:*(根据需要替换区域和帐号)。然后让您的 lambda 在该角色下运行。
    • 你说得对,这是一种更安全的方法,我已经编辑了我的答案以使用你的建议,谢谢
    猜你喜欢
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    相关资源
    最近更新 更多