Vercel部署NextJS遇权限问题:Lambda无Cognito AdminInitiateAuth权限
解决方案:Lambda角色缺少Cognito AdminInitiateAuth权限
问题核心
你的Lambda执行角色aws-lambda-execute未被授权对指定Cognito用户池执行cognito-idp:AdminInitiateAuth操作,这是部署后登录失败的直接原因。本地运行正常是因为开发环境使用了拥有足够权限的AWS凭证(比如个人IAM用户),而部署后Lambda使用的专用执行角色权限不足。
修复步骤
1. 为Lambda角色添加Cognito权限策略
- 登录AWS控制台,进入IAM服务
- 左侧菜单选择角色,搜索并找到
aws-lambda-execute角色 - 切换到权限标签页,点击添加权限 -> 创建内联策略
- 选择JSON标签,粘贴以下策略(替换
[你的用户池ARN]为完整的Cognito用户池ARN,比如arn:aws:cognito-idp:us-east-2:672624023363:userpool/us-east-2_XXXXXXX):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "cognito-idp:AdminInitiateAuth", "Resource": "[你的用户池ARN]" } ] }
- 点击下一步,为策略命名(比如
Lambda-Cognito-AdminInitiateAuth),然后点击创建策略
2. 确认资源ARN的准确性
确保策略中的资源ARN完全匹配你的Cognito用户池ARN:
- 进入Cognito服务,找到目标用户池
- 在用户池概述页面复制完整ARN,替换策略中的占位符
3. 检查角色信任关系
确认aws-lambda-execute角色的信任关系允许AWS Lambda服务扮演该角色:
- 在角色详情页切换到信任关系标签页
- 确保信任策略包含以下内容:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
4. 验证修复效果
部署更新后的IAM策略后,重新通过Vercel前端发起登录请求。若问题仍存在:
- 查看Lambda函数的CloudWatch日志,确认权限错误是否消失
- 使用IAM Access Analyzer检查权限配置是否存在冲突
内容的提问来源于stack exchange,提问作者Shyam Hajare
相关产品推荐
相关产品推荐

