Lambda函数无法执行DynamoDB PutItem操作,如何解决权限报错?
检查角色信任策略有效性
Lambda角色的信任策略必须允许Lambda服务扮演它,否则即使权限策略拉满,也无法获取有效身份。打开IAM角色详情页,确认"信任关系"标签下的策略包含以下内容:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }若信任策略错误,角色无法被Lambda使用,直接触发权限缺失报错。
确认权限策略已正确附加
不要想当然认为策略已经挂上,去IAM角色的"权限"标签下,检查AdministratorAccess和AmazonDynamoDBFullAccess是否真的在列表里。也可以用CLI命令验证:aws iam list-attached-role-policies --role-name 你的Lambda角色名输出里必须包含这两个策略。
排查DynamoDB表的资源策略
即使角色有全权限,如果目标DynamoDB表设置了资源策略,可能会拒绝PutItem请求。进入DynamoDB控制台,找到对应表的"权限"标签,查看是否有针对该角色的拒绝规则,有则调整策略允许操作。检查权限边界限制
若角色设置了权限边界,附加的全量权限会被边界覆盖。去角色详情页的"权限边界"标签,确认边界策略允许dynamodb:PutItem操作,或者直接移除不必要的权限边界。验证Lambda执行角色配置
确认Lambda函数实际使用的执行角色是你配置了权限的那个。进入Lambda控制台函数详情页,查看"配置"->"权限"下的执行角色名称是否正确,避免选成了其他无权限角色。用CloudTrail日志定位根因
打开CloudTrail控制台,搜索该Lambda角色的dynamodb:PutItem请求记录,查看日志中的errorCode和errorMessage字段,里面会给出具体的拒绝原因,比如是资源策略拦截、权限边界限制还是角色未被正确假定。
内容的提问来源于stack exchange,提问作者Jack Eggert

