【问题标题】:Accessing SQS queue in a different AWS account using a serverless framework使用无服务器框架访问不同 AWS 账户中的 SQS 队列
【发布时间】:2021-02-01 17:45:58
【问题描述】:

我无法找到与无服务器框架相关的问题的答案,并且无法部署 lambda,但如果我错过了,请告诉我。

我的场景是我的 lambda 在账户 0001 中,我需要从 AWS 账户 0002 中的 SQS 队列中读取消息。 角色“interestingrole”是通过 Terraform 在帐户 0001 中创建的,除非有理由通过无服务器进行,​​否则我更愿意保持这种方式。账户 0002 中的 SQS 队列为账户 0001 中的角色“interestingrole”设置了信任关系。 帐户 0001 中的政策如下所示

{
“Version”: “2012-10-17”,
“Statement”: [
{
“Sid”: “AllowMyRequest”,
“Effect”: “Allow”,
“Action”: [
“sqs:ReceiveMessage”,
“sqs:GetQueueUrl”,
“sqs:GetQueueAttributes”,
“sqs:DeleteMessageBatch”,
“sqs:DeleteMessage”,
“sqs:ChangeMessageVisibilityBatch”,
“sqs:ChangeMessageVisibility”
],
“Resource”: “arn:aws:sqs:us-east-1:0002:interesting-queue”
},

在帐户 0002 中,已与帐户 0001 中创建的角色建立了信任关系(与运行 lambda 的位置相同)。我不控制帐户 0002。

如果我在我的 serverless.yml 中创建一个具有相同名称的队列并将资源设置为 0001 而不是 0002 它将部署得很好并且也可以从该队列中读取消息但如果我使用帐户 0002 我得到部署错误“发生错误:EventHandlerEventSourceMappingSQSCinterestingqueue - 提供的请求无效:提供的执行角色无权调用 SQS 上的 ReceiveMessage(服务:Lambda,状态代码:400”

我是否需要在我的 serverless.yml 中设置 AssumeRole 或以其他方式引用我创建的角色“interestingrole”?对于这种特殊情况,我找不到示例,我的角色在我控制并执行 lambda (0001) 的帐户中,但我要访问的资源在不同的帐户中。

我目前没有为队列配置 iAmRoleStatement。

serverless.yml

functions:
eventHandler:
handler: src/lambda.handler
events:
- sqs: “arn:aws:sqs:us-east-1:0002:interesting-queue”

谢谢!

【问题讨论】:

  • 什么是 SQS 资源策略?它应该允许从第一个帐户访问 lambda 执行角色。您发布的政策是否适用于 SQS 队列政策?如果有,它没有Principle?
  • @Marcin 不,它没有原则。组织中的另一个团队已指定他们希望如何设置角色。
  • 如果我理解您的场景,无服务器框架确实不是其中的任何部分。您在账户 0001 中的 Lambda 函数应具有本地资源所需的任何权限(至少是 AWSLambdaBasicExecutionRole)加上 sts:AssumeRole 对interestingrole 的 ARN 的权限。 Lambda 函数在执行时应承担为它提供 STS 凭证的有趣角色。使用这些 STS 凭据创建新的 SDK 服务对象(例如 boto3 客户端),以针对帐户 0002 的 SQS 队列进行 SQS API 调用。

标签: amazon-web-services serverless-framework serverless


【解决方案1】:

对于遇到此问题的其他任何人,我通过指定我希望 lambda 在 serverless.yml 中使用的自定义 IAM 角色来解决它:

provider:
  name: aws
  role: arn:aws:iam:0002:role/interestingrole

这有缺点,因为 iamRoleStatements 不再适用,因此您必须将日志权限和 lambda 所需的其他权限添加到此自定义角色,但对于我非常狭窄的用例,这是可以接受的。

您可以在“自定义 IAM 角色”https://www.serverless.com/framework/docs/providers/aws/guide/iam/ 部分查看更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 2019-11-06
    • 2019-05-01
    • 2020-06-25
    相关资源
    最近更新 更多