使用AppSync DynamoDB BatchResolver写入双表时遇AssumeRole权限错误求助
解决AppSync BatchResolver写入DynamoDB多表的权限错误
这个问题的核心是AppSync关联的DynamoDB数据源角色缺少对第二个表(TABLE-TWO)的dynamodb:BatchWriteItem权限。从日志里能看到,当前使用的角色是为TABLE-ONE创建的(appsync-datasource-ddb-xxxxxx-TABLE-ONE),默认只会拥有TABLE-ONE的操作权限,当你尝试用它写入TABLE-TWO时就会触发权限拒绝。
下面是具体的解决步骤:
1. 定位目标IAM角色
登录AWS控制台,进入IAM服务,在角色列表里搜索日志中显示的角色名:appsync-datasource-ddb-xxxxxx-TABLE-ONE。
2. 更新角色的权限策略
找到该角色关联的权限策略(通常是一个自定义策略,用于允许AppSync操作DynamoDB),点击编辑策略,添加针对TABLE-TWO的dynamodb:BatchWriteItem权限。
这里是一个示例策略,你可以根据实际情况调整:
{ "Version": "2012-10-17", "Statement": [ // 原有针对TABLE-ONE的权限 { "Effect": "Allow", "Action": [ "dynamodb:BatchWriteItem", // 其他你需要的操作,比如PutItem、DeleteItem等 "dynamodb:PutItem", "dynamodb:DeleteItem" ], "Resource": "arn:aws:dynamodb:us-east-1:111111111111:table/TABLE-ONE" }, // 添加针对TABLE-TWO的权限 { "Effect": "Allow", "Action": "dynamodb:BatchWriteItem", "Resource": "arn:aws:dynamodb:us-east-1:111111111111:table/TABLE-TWO" } ] }
如果你的BatchResolver还涉及到其他操作(比如条件写入、事务等),可以把对应的DynamoDB动作也加到Action列表里。
3. (可选)如果用基础设施即代码部署
如果你是用CloudFormation、CDK或者Terraform来管理资源,记得更新对应的角色权限模板,确保资源列表包含两个DynamoDB表的ARN,避免后续部署覆盖权限。
4. 验证修改
保存权限策略后,重新测试你的AppSync BatchResolver,此时应该能正常向两个表写入数据,CloudWatch里的权限错误也会消失。
内容的提问来源于stack exchange,提问作者Eric Desjardins
相关产品推荐
相关产品推荐

