如何配置 AWS lambda 函数以对不同 aws 子账户中的 dynamodb 表执行 crud 操作?

Posted

技术标签:

【中文标题】如何配置 AWS lambda 函数以对不同 aws 子账户中的 dynamodb 表执行 crud 操作?【英文标题】:How to configure AWS lambda function to perform crud operation on dynamodb tables in different aws sub-account? 【发布时间】:2020-02-11 16:44:35 【问题描述】:

在 lambda 函数中,我们有版本和别名,我有两个别名(test1、test2)。 test1 对同一账户内的 dynamodb 进行 crud 操作,而 test2 需要对不同子账户同一区域的 dynamodb 进行 crud(防止 lambda 函数返工)。

我是如何尝试的:

    在主帐号中创建了一个角色来担任角色 在子帐户中创建的角色将获得完整的 aws 服务访问权限 复制 arn 并将子帐户角色分配给主帐户 sts 承担策略 测试 lambda 函数以从子帐户 dynamodb 表中获取数据 错误:

  "errorMessage": "User: arn:aws:sts::123456:assumed-role/getAccessSubAccountRole/testlambdafunction is not authorized to perform: dynamodb:Query on resource: arn:aws:dynamodb:region:123456:table/USER",
  "errorType": "AccessDeniedException",
  "stackTrace": [
    "Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:51:27)",
    "Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:106:20)",
    "Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:78:10)",
    "Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)",
    "Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)",
    "AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)",
    "/var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10",
    "Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)",
    "Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:685:12)",
    "Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:116:18)"
  ]

【问题讨论】:

【参考方案1】:

错误消息列出了问题:

用户: arn:aws:sts::123456:assumed-role/getAccessSubAccountRole/testlambdafunction 无权执行:dynamodb:资源查询: arn:aws:dynamodb:region:123456:table/USER

在 #2 中,您提到“在子帐户中创建一个角色将获得完整的 aws 服务访问权限”,但我认为您应该仔细检查该角色是否具有您期望的访问权限。这是否意味着具有管理员访问权限?一旦您确定它具有访问权限,请检查how policies are evaluated。

【讨论】:

该角色已被分配完全的 aws 访问权限,因此它将允许使用分配给它的任何 aws 服务。同一区域中的 lambda 函数使用该角色并且可以正常工作。从主帐户担任相同角色时它不起作用,因此问题。

以上是关于如何配置 AWS lambda 函数以对不同 aws 子账户中的 dynamodb 表执行 crud 操作?的主要内容,如果未能解决你的问题,请参考以下文章

如何将特定 AWS API Gateway 阶段连接到特定 AWS lambda 别名

从 AWS API Gateway Web 界面配置 AWS Lambda 时无法选择/查看 Lambda 函数

如何使用 AWS CDK Pipelines 构建不同语言的 lambda

如何将AWS API网关阶段指向特定的lambda函数别名?

如何使用 .yaml 文件向 AWS Lambda 函数添​​加策略?

如何在 CloudFormation 模板中描述 AWS Lambda 函数测试事件?