【发布时间】:2019-11-19 19:18:01
【问题描述】:
我有一个持续运行的 lambda 函数,以及一些动态创建的 SQS 队列。我需要一种方法来允许 lambda 访问所有 SQS 队列,以便可以使用这些动态创建的队列 - 我该怎么做?
目前我正在使用一个执行角色,该角色具有一个带有单个队列 ARN 的 iam 策略,但我似乎无法创建多个执行角色。
【问题讨论】:
标签: amazon-web-services aws-lambda amazon-sqs
我有一个持续运行的 lambda 函数,以及一些动态创建的 SQS 队列。我需要一种方法来允许 lambda 访问所有 SQS 队列,以便可以使用这些动态创建的队列 - 我该怎么做?
目前我正在使用一个执行角色,该角色具有一个带有单个队列 ARN 的 iam 策略,但我似乎无法创建多个执行角色。
【问题讨论】:
标签: amazon-web-services aws-lambda amazon-sqs
编辑
正如下面的评论中提到的,向所有内容开放 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 }}"
}
]
}
【讨论】:
Resource 设置为对所有队列使用通配符:arn:aws:sqs:us-west-2:1234567890:*(根据需要替换区域和帐号)。然后让您的 lambda 在该角色下运行。