Amplify Lambda函数报错:无权限访问createProfile操作
解决方案:修复AppSync权限问题及createProfile返回null
核心问题分析
CloudWatch日志的Unauthorized错误是根本原因——Lambda执行角色没有权限调用AppSync的createProfile mutation,导致操作失败,所以createProfile返回null。以下是具体修改步骤:
1. 给Lambda执行角色添加AppSync访问权限
打开IAM控制台,找到该Lambda的执行角色,附加以下自定义IAM策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "appsync:GraphQL", "Resource": "arn:aws:appsync:<你的AWS区域>:<你的AWS账号ID>:apis/<你的AppSync API ID>/types/Mutation/fields/createProfile" } ] }
替换占位符为你的实际信息(区域、账号ID、API ID可在AppSync控制台找到)。
2. 修正AppSync Schema的权限规则
确保你的Profile类型的@auth规则允许IAM角色执行create操作。打开AppSync控制台的Schema页面,修改Profile定义:
type Profile @model @auth(rules: [ { allow: owner, ownerField: "owner" }, { allow: private, provider: iam, operations: [create] } ]) { id: ID! email: String! owner: String! }
这条规则允许资源所有者访问,同时允许IAM角色执行create操作(适配Lambda的调用场景)。
3. 验证Lambda中的owner字段格式
检查教程中Profile的owner字段要求,若教程定义owner为用户的sub(而非sub::userName),则修改Lambda中的变量:
const variables = { email: event.request.userAttributes.email, owner: event.request.userAttributes.sub // 替换原有的拼接格式 };
错误的owner格式会触发@auth规则的权限拦截,导致Unauthorized错误。
4. 重新部署Lambda和AppSync配置
- 保存Lambda代码并重新部署
- 在AppSync控制台重新发布Schema
完成以上步骤后,PostConfirmation触发时Lambda就能成功调用createProfile mutation,createProfile将返回正确的email数据,不再出现权限错误。
内容的提问来源于stack exchange,提问作者Torsten Becker
相关产品推荐
相关产品推荐

