当前位置: 首页 > 知识库问答 >
问题:

Lambda服务抛出错误执行角色没有在SQS上调用receiveMessage的权限

严知
2023-03-14

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

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

我还添加了SQS receiveMessage权限,但这似乎没有什么区别,除非我在设置它时做错了什么。

是什么导致了这个问题?

谢谢你的帮助

共有3个答案

慕容俭
2023-03-14

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
  ....
}
司空宗清
2023-03-14

尽管到目前为止可能已经解决了这个问题。。但是既然这条线是在顶端向我建议的。。我将为其他用户发布答案:

即使在向用户提供SQS完全访问权限之后,我也面临同样的问题。问题在于lambda执行角色。创建lambda时,需要为其分配lambda执行角色。大多数用户在创建lambda时分配自动生成的执行角色。该执行角色没有SQS的权限。

所以打开lambda

韦智刚
2023-03-14
  • 您好,据我所知,您的lambda需要以下许可

>

  • 或者在sqs:上给它一个god模式,只是为了测试它。

    如果这是可行的,也许以后你可以只使用特定的方法。附加了lambda角色的策略如果需要调用此lambda的另一个lambda表单,则可能必须将account_number更改为account no

     {
     "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": "*"
         }
     ]
    

    }

  •  类似资料:
    • 我正在使用实现AWS SQS作业队列。正确处理作业(拉作业- PHP工匠队列:工作 但在Lambda环境中,使用相同的凭证,作业完成后不能删除。简而言之,拉作业- “errorType”:“Aws\Sqs\Exception\SQSExException”, “errorMessage”:“在上执行”DeleteMessage“时出错”https://sqs.ap-northeast-1.amaz

    • 我想调用一个AWS API网关endpoint,该endpoint的授权设置为AWS_。 我是否可以使用 Lambda 的当前执行角色对 API Gateway 的 HTTPS 请求进行签名? 编辑: 看看 http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html,我也许可以使用SD

    • 问题内容: 我只是通过nodejs.org上的软件包安装了node和npm,并且每当我尝试使用npm搜索或安装某些东西时,都会抛出以下错误,除非我对命令进行了sudo。我觉得这是权限问题?我已经是管理员。 问题答案: 这看起来像您的主目录中的权限问题。要回收 .npm 目录的所有权, 请 执行:

    • 我有HTTPS web服务。我可以使用wsimport生成java类,但当我调用该服务时,我收到以下异常: 调用服务的类如下所示: 有人能帮忙吗。提前谢谢你。

    • 我使用的是AWS SQS服务,很难定义SQS队列上的权限。在我的设置中,我使用的是AWS Lambda服务,当一个对象被推到S3存储桶上时会触发该服务。 然而,让我简短地提问,这是我想要实现的: 对象被推送到S3存储桶中 正如您可以从前面的用例中看到的,我希望我的AWS Lambda方法是唯一可以向SQS队列发送消息的应用程序。我试图设置一个原则和一个条件“sourceArn”。但是它们都不起作用

    • 我正在尝试将文件从一个账户(源账户)中的 S3 存储桶移动到另一个账户(目标账户)中的 S3 存储桶,我正在使用 sagemaker 笔记本,因此我有一个 sagemaker 角色。我在我的团队帐户中也有一个角色,它具有完全的s3访问权限和完全的管理员访问权限,并且在信任关系中,我为目标帐户角色arn和sagemaker角色arn提供了一个角色。目标帐户在其信任策略中还具有我的团队角色 arn 和