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

Python调用AWS AppSync遇未授权错误:如何正确认证请求?

解决Lambda调用AppSync时的未授权错误

核心问题定位

你遇到的Not Authorized to access getUserPlan on type UserPlan错误,本质是AppSync的权限规则未允许当前使用的认证方式访问该Query,而非Lambda的IAM权限或API Key本身的问题。以下是具体排查和修复步骤:


1. 检查AppSync API的认证模式启用状态

  • 登录AWS控制台进入AppSync服务,找到目标API:
    • 若使用API Key认证:确认「设置」>「API密钥」中密钥处于启用状态,且API的「默认认证模式」包含API Key,或该Query的单独认证配置允许API Key访问。
    • 若使用IAM认证:确认「设置」>「认证」中已将IAM列为认证提供者之一。

2. 修正GraphQL Schema的权限规则(@auth指令)

Amplify生成的Schema默认可能仅启用用户池认证,需手动添加API Key或IAM的访问权限:
打开Amplify项目中amplify/backend/api/[你的API名称]/schema.graphql,给UserPlan类型添加对应权限规则:

type UserPlan @model @auth(rules: [
  { allow: apiKey },  # 允许API Key访问
  { allow: iam }      # 允许IAM角色访问
]) {
  id: ID!
  traits: [String]
  traitCount: Int
  # 其他字段...
}

修改后执行amplify push重新部署API。

3. 配置Lambda执行角色的IAM权限

Lambda依赖自身执行角色的权限,而非本地CLI用户权限,需给该角色添加AppSync访问权限:

  1. 进入IAM控制台,找到目标Lambda的执行角色;
  2. 添加以下内联策略:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "appsync:GraphQL",
      "Resource": "arn:aws:appsync:ap-northeast-1:[你的AWS账号ID]:apis/[你的AppSync API ID]/*"
    }
  ]
}

4. 修正Lambda调用AppSync的代码

  • API Key方式的正确请求:
    确保请求头使用x-api-key而非Authorization:
    response = requests.post(
        url=url,
        json={"query": query},
        headers={"x-api-key": api_key}
    )
    
  • IAM方式的正确请求:
    你代码中的AWS4Auth配置是正确的,但需确保Lambda执行角色已配置上述AppSync权限,且Schema允许IAM访问。

5. 直接验证AppSync API权限

在AppSync控制台的「Query」页面,分别用两种认证方式测试getUserPlan:

  • API Key:添加x-api-key请求头后执行Query,确认是否成功;
  • IAM:选择「IAM」认证后执行Query,确认是否成功。
    这一步可快速定位问题出在权限配置还是Lambda代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:35:28