如何配置 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函数别名?