Lambda服务抛出错误执行角色没有权限在SQS上调用receiveMessage
Lambda service throws error execution role does not have permissions to call receiveMessage on SQS
我有一个 SQS 队列,我想在消息到达队列时触发 lambda 函数。我已经编写了 lambda 函数,当我单击 "Test" 按钮时它可以成功运行。当我转到 SQS 并尝试将其配置为 lambda 触发器时,我看到了下面的错误消息。
我使用相同的用户和角色创建了 SQS 队列和 lambda 函数,并且 lambda 函数对相同的角色具有执行权限。
我还添加了 SQS receiveMessage 权限,但它似乎没有什么区别,除非我在设置它时做错了什么。
可能导致问题的原因是什么?
感谢您的帮助
- 您好,据我所知,您的 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": "*"
}
]
}
虽然这个问题的解决方案现在可能已经实现了..但是由于这个线程是在顶部向我建议的..我会post其他用户的答案:
即使在向用户授予 SQS 完全访问权限后,我也遇到了同样的问题。问题在于 lambda 执行角色。创建 lambda 时,需要为其分配一个 lambda 执行角色。大多数用户在创建 lambda 时分配 auto-generated 执行角色。该执行角色没有 SQS 权限。
所以打开 lambda >> 单击权限选项卡 >> 在顶部编辑执行角色 >> 分配 SQS 权限 >> boom。
[编辑]现在位于配置 >> 权限下
您需要以下权限附加到该角色,您的 lambda 假设
- sqs:ReceiveMessage
- sqs:删除消息
- 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
....
}
我有一个 SQS 队列,我想在消息到达队列时触发 lambda 函数。我已经编写了 lambda 函数,当我单击 "Test" 按钮时它可以成功运行。当我转到 SQS 并尝试将其配置为 lambda 触发器时,我看到了下面的错误消息。
我使用相同的用户和角色创建了 SQS 队列和 lambda 函数,并且 lambda 函数对相同的角色具有执行权限。
我还添加了 SQS receiveMessage 权限,但它似乎没有什么区别,除非我在设置它时做错了什么。
可能导致问题的原因是什么?
感谢您的帮助
- 您好,据我所知,您的 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": "*" } ]
}
虽然这个问题的解决方案现在可能已经实现了..但是由于这个线程是在顶部向我建议的..我会post其他用户的答案:
即使在向用户授予 SQS 完全访问权限后,我也遇到了同样的问题。问题在于 lambda 执行角色。创建 lambda 时,需要为其分配一个 lambda 执行角色。大多数用户在创建 lambda 时分配 auto-generated 执行角色。该执行角色没有 SQS 权限。
所以打开 lambda >> 单击权限选项卡 >> 在顶部编辑执行角色 >> 分配 SQS 权限 >> boom。
[编辑]现在位于配置 >> 权限下
您需要以下权限附加到该角色,您的 lambda 假设
- sqs:ReceiveMessage
- sqs:删除消息
- 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
....
}