【问题标题】:Lambda trigger doesn't replicate to SQS source across accountsLambda 触发器不会跨账户复制到 SQS 源
【发布时间】:2020-11-06 17:40:23
【问题描述】:

我正在尝试将 SQS 作为源/触发器添加到 lambda。如果两个组件都位于同一个帐户中,我可以做到这一点。当我将触发器添加到 lambda 时,lambda 触发器配置复制到 SQS 队列以将两者配对。

当我在我的 lambda 上尝试同样的事情时,当 SQS 在不同的账户中是远程的时,Lambda 触发器被建立,但是在查看远程 SQS 时它没有显示配置的触发器。当消息添加到队列时,这似乎导致触发器无法在 lambda 上工作。远程队列上的 SQS 策略也明确地向其他帐户授予权限。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    场景:

    • 账户 A 中的 Amazon SQS 队列
    • 账户-B 中的 AWS Lambda 函数
    • 目标:SQS 触发 Lambda 函数

    由于这涉及跨账户访问,您需要为 Lambda 函数使用的 IAM 角色授予访问 SQS 队列的权限。 (Lambda 从队列中拉出,而不是 SQS 推送到 Lambda。)

    步骤如下:

    • 在 SQS 队列中,编辑 访问策略 以包含 Lambda 函数使用的 IAM 角色的权限:
    {
      "Version": "2008-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::ACCOUNT-1:root"
          },
          "Action": "SQS:*",
          "Resource": "arn:aws:sqs:ap-southeast-2:ACCOUNT-1:queue-name"
        },
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::ACCOUNT-2:role/lambda-role-name"
          },
          "Action": [
            "SQS:ChangeMessageVisibility",
            "SQS:DeleteMessage",
            "SQS:ReceiveMessage",
            "SQS:GetQueueAttributes"
          ],
          "Resource": "arn:aws:sqs:ap-southeast-2:ACCOUNT-1:queue-name"
        }
      ]
    }
    

    此策略的第一部分由 SQS 自动创建,并允许拥有帐户使用队列。第二部分允许来自 Account-2 的 IAM 角色访问 Account-1 中的队列。当我创建队列并提供 IAM 角色的 ARN 时,该策略由 SQS 自动创建。但是,我必须添加 SQS:GetQueueAttributes,因为 Lambda 函数也会调用它。

    • 在Account-B的AWS Lambda函数中,点击+ Trigger,选择SQS,输入Account-A的SQS队列的ARN

    我尝试了所有这些,并且成功地将消息放入 Account-B 的 SQS 中,然后看到 Lambda 在 Account-B 中处理它。

    【讨论】:

    • 感谢您的回答。我尝试重新创建相同的配置,但在向我的 Lambda 添加触发器时出现以下错误:An error occurred when creating the trigger: The provided execution role does not have permissions to call ReceiveMessage on SQS (Service: AWSLambda; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: 880e49c6-8436-405a-a503-0d8a49d2b249; Proxy: null)
    • @DmitriyPopov 该消息似乎在说与 AWS Lambda 函数关联的 IAM 角色需要被授予 sqs:ReceiveMessage 权限,无论是对于所有队列还是至少对于它正在尝试的 SQS 队列连接。我注意到我上面的描述没有提到我授予 Lambda 角色的权限,所以对此表示歉意。
    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 2020-07-28
    • 2021-01-31
    • 2020-04-27
    相关资源
    最近更新 更多