配置Lambda的IAM策略实现DynamoDB条件访问时遇权限拒绝错误
解决AWS IAM策略权限拒绝问题
问题原因分析
- 原策略使用
ForAllValues:StringEquals条件,该条件适用于多值集合匹配,单值场景下应改用StringEquals。 - 未确认Cognito身份池的主体标签映射是否生效,Lambda调用时的凭证可能未携带
username标签。 - 资源配置未使用DynamoDB表的完整ARN,仅填写
TableARN无法匹配实际资源。 - Lambda执行角色的关联或Cognito身份池的信任关系可能存在配置错误。
修正后的IAM策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:GetItem", "Resource": "arn:aws:dynamodb:你的区域ID:你的AWS账号ID:table/你的表名称", "Condition": { "StringEquals": { "dynamodb:LeadingKeys": "${aws:PrincipalTag/username}" } } } ] }
关键检查步骤
- 确认Cognito身份池的映射配置:进入身份池编辑页面,在Cognito用户池的属性映射中,确保
sub已正确映射到username主体标签。 - 验证Lambda的凭证来源:Lambda必须使用Cognito身份池生成的临时凭证调用DynamoDB,而非Lambda自身的执行角色(后者不会携带Cognito的主体标签)。
- 查看CloudTrail日志:通过日志确认权限拒绝事件中的
principalTag是否存在、dynamodb:LeadingKeys的值是否与username一致,以及资源ARN是否匹配。
内容的提问来源于stack exchange,提问作者megamind
相关产品推荐
相关产品推荐

