【问题标题】:Lambda service throws error execution role does not have permissions to call receiveMessage on SQSLambda 服务抛出错误执行角色没有权限在 SQS 上调用 receiveMessage
【发布时间】:2019-08-23 16:10:42
【问题描述】:

我有一个 SQS 队列,我想在消息到达队列时触发 lambda 函数。我已经编写了 lambda 函数,当我单击“测试”按钮时它可以成功运行。当我转到 SQS 并尝试将其配置为 lambda 触发器时,我看到下面的错误消息。

我使用相同的用户和角色创建了 SQS 队列和 lambda 函数,并且 lambda 函数对同一角色具有执行权限。

我还添加了 SQS 的 receiveMessage 权限,但它似乎并没有什么不同,除非我在设置它时做错了什么。

什么可能导致问题?

感谢您的帮助

【问题讨论】:

  • 您还需要检查 SQS 本身的权限。

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


【解决方案1】:
  • 嗨,据我了解,您的 lambda 需要以下权限aws docs
  • 希望它不在 VPC 中。

  • 或者可以在sqs:*上给它一个上帝模式只是为了测试它。

  • 如果以后可能可行,那么您可以只使用特定的方法。附加了一个 lambda 角色的策略,如果您需要从这个 lambda 调用另一个 lambda,您可能必须将 account_number 更改为您的帐户号

     {
     "Version": "2012-10-17",
     "Statement": [
         {
             "Sid": "",
             "Effect": "Allow",
             "Action": "lambda:InvokeFunction",
             "Resource": "arn:aws:lambda:eu-west-2:account_number:function:*"
         },
         {
             "Sid": "",
             "Effect": "Allow",
             "Action": [
                 "logs:PutLogEvents",
                 "logs:CreateLogStream",
                 "logs:CreateLogGroup"
             ],
             "Resource": "*"
         },
         {
             "Sid": "",
             "Effect": "Allow",
             "Action": [
                 "sqs:*"
             ],
             "Resource": "*"
         }
     ]
    

    }

【讨论】:

    【解决方案2】:

    虽然这个问题的解决方案现在可能已经实现了..但是由于这个线程是在顶部向我建议的..我会为其他用户发布答案:

    即使在向用户授予 SQS 完全访问权限后,我也遇到了同样的问题。问题在于 lambda 执行角色。创建 lambda 时,需要为其分配一个 lambda 执行角色。大多数用户在创建 lambda 时分配自动生成的执行角色。该执行角色没有 SQS 的权限。

    所以打开 lambda >> 点击权限选项卡 >> 编辑顶部的执行角色 >> 分配 SQS 权限 >> 繁荣。

    【讨论】:

    • 感谢百万兄弟的魅力
    【解决方案3】:

    您需要附加到角色的以下权限,您的 lambda 假定

    • sqs:ReceiveMessage
    • sqs:DeleteMessage
    • sqs:GetQueueAttributes

    如果您使用的是 Terraform:

    data "aws_iam_policy_document" "YOUR_DOCUMENT" {
      statement {
        sid       = "some_id"
        actions   = [
          "sqs:ReceiveMessage",
          "sqs:DeleteMessage",
          "sqs:GetQueueAttributes"
        ]
        resources = [
          aws_sqs_queue.YOUR_QUEUE.arn
        ]
      }
    }
    
    resource "aws_iam_policy" "YOUR_POLICY" {
      name   = "your_policy"
      policy = data.aws_iam_policy_document.YOUR_DOCUMENT.json
    }
    
    resource "aws_iam_role_policy_attachment" "POLICY_ATTACHMENT" {
      role       = aws_iam_role.YOUR_LAMBDA_ROLE.name
      policy_arn = aws_iam_policy.YOUR_POLICY.arn
    }
    
    resource "aws_lambda_function" "YOUR_LAMBDA" {
      ....
      role = aws_iam_role.YOUR_LAMBDA_ROLE.arn
      ....
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-08
      • 2021-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-01
      • 1970-01-01
      相关资源
      最近更新 更多