You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

API Gateway触发的Lambda调用AppSync API遇权限拒绝问题求助

排查Lambda调用AppSync的IAM授权权限差异问题

针对你遇到的API Gateway触发的Lambda调用AppSync报"Not Authorized to access functionName on type Query"错误,而相同代码在AppSync解析器Lambda中正常运行的情况,可从以下几个方向排查:

1. 检查Lambda执行角色的权限限制

  • API Gateway触发的Lambda可能被配置了权限边界(Permission Boundary),或是API Gateway集成时传递了会话策略,这些会覆盖角色本身的权限,导致无法调用AppSync。
  • 进入IAM控制台,查看该Lambda执行角色的权限边界配置,确认没有包含拒绝appsync:GraphQL操作的语句;同时检查API Gateway的集成设置,是否传递了自定义IAM会话策略。

2. 确认凭证获取的身份一致性

defaultProvider()在不同触发场景下可能获取到不同的身份:

  • AppSync解析器中的Lambda,通常会使用自身执行角色,或继承AppSync上下文的身份(可能附带Cognito用户属性);
  • API Gateway触发的Lambda,如果API Gateway开启了IAM授权并传递调用者身份,defaultProvider()会优先使用调用者的IAM凭证,而非Lambda自身角色——若调用者没有AppSync权限,就会触发错误。
  • 临时调整方案:显式指定使用Lambda实例元数据的凭证,避免自动选择调用者身份:
    import { fromInstanceMetadata } from "@aws-sdk/credential-provider-imds";
    
    // 修改linkArgs中的auth配置
    auth: {
      type: "AWS_IAM" as "AWS_IAM",
      credentials: fromInstanceMetadata(), // 强制使用Lambda角色的元数据凭证
    },
    
  • 验证方法:在Lambda中添加日志,打印await defaultProvider()()返回的凭证ARN,确认实际使用的身份是否为Lambda执行角色。

3. 检查AppSync的IAM授权规则

  • 进入AppSync控制台,查看GraphQL API的IAM授权规则,确认针对Query.functionName的规则是否允许问题Lambda的执行角色ARN访问。
  • 常见问题:授权规则可能仅限制了AppSync解析器Lambda的角色ARN,或添加了特定条件(如aws:PrincipalTag),导致API Gateway触发的Lambda角色被拒绝。

4. 验证API Gateway集成的身份传递设置

  • 检查API Gateway与Lambda的集成配置,确认Credentials选项设置为**"Lambda function role"**,而非"Caller credentials"。
  • 若选择了"Caller credentials",Lambda会使用API Gateway调用者的身份执行,而非自身角色,这会导致权限不符。

快速验证方法

  • 使用问题Lambda的执行角色,在AWS CLI中直接调用AppSync API:
    aws appsync start-graphql-execution \
      --api-id 你的AppSync API ID \
      --query-string "query { functionName { 字段名 } }" \
      --variables {}
    
    • 如果CLI调用成功,说明代码中凭证获取逻辑有问题;
    • 如果CLI也报错,说明IAM角色权限或AppSync授权规则配置错误。

内容的提问来源于stack exchange,提问作者Rudy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 13:55:30