AWS Cognito用户池配置Lambda别名触发器报PreSignUp调用AccessDeniedException错误
解决方案
AccessDeniedException报错的核心原因是:通过CLI手动绑定Lambda别名作为Cognito触发器时,不会像Web控制台配置默认版本触发器那样自动生成Lambda调用授权,也不需要额外创建Cognito专属IAM角色,直接在Lambda侧配置资源策略即可解决问题。
操作步骤
- 提前收集以下参数:带别名后缀的Lambda完整ARN、Cognito用户池完整ARN、AWS账号ID、资源所在区域
- 执行以下AWS CLI命令添加Lambda资源策略,替换命令中的占位符为你实际的参数值:
aws lambda add-permission \ --function-name <替换为带别名的Lambda完整ARN> \ --statement-id allow-cognito-invoke-pre-signup-alias \ --action lambda:InvokeFunction \ --principal cognito-idp.amazonaws.com \ --source-arn <替换为Cognito用户池完整ARN> \ --source-account <替换为你的AWS账号ID> \ --region <替换为资源所在的AWS区域>
- 执行验证命令确认策略添加成功:
aws lambda get-policy --function-name <替换为带别名的Lambda完整ARN> --region <替换为资源所在的AWS区域>
返回结果中存在你刚才添加的策略条目即为配置完成,重新测试用户注册流程即可恢复正常。
注意:必须指定带别名后缀的Lambda完整ARN作为
function-name参数的值,若仅填写不带别名的函数ARN,权限只会对函数的$LATEST版本生效,指定别名仍然会触发访问拒绝错误。
内容的提问来源于stack exchange,提问作者Bharat Vishe
相关产品推荐
相关产品推荐

