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

如何让AppSync请求同时验证api_key与aws_iam两种授权?

AppSync同时要求API Key和IAM授权的实现方案

单个AppSync请求默认仅支持使用一种授权类型,你在Schema里同时添加@aws_api_key和@aws_iam指令的效果是「满足任意一种授权即可访问」,而非同时满足,这就是你之前配置未达预期的原因。

要实现「必须同时携带有效API Key和IAM签名才能访问」的需求,需要结合解析器请求模板做额外校验,具体步骤如下:

1. 先启用两种授权类型

在AppSync API的配置页面,同时开启API Key和AWS IAM两种授权类型,确保两种授权的请求都能进入解析器环节。

2. 在解析器中添加双重校验逻辑

以getCar查询的解析器为例,修改其请求映射模板,同时验证两种身份标识是否存在:

#if( !$context.identity.apiKey || !$context.identity.iam )
    $util.unauthorized("必须同时提供有效的API Key和IAM签名")
#end
{
    "version": "2018-05-29",
    "operation": "GetItem",
    "key": {
        "id": { "S": "$context.arguments.id" }
    }
}

逻辑说明:

  • $context.identity.apiKey:存在则说明请求携带的API Key已通过AppSync的有效性验证
  • $context.identity.iam:存在则说明请求的IAM签名已通过AppSync的身份验证
  • 只要其中一个标识不存在,就通过$util.unauthorized抛出未授权错误,阻断数据查询

3. 保留Schema中的双授权指令

你的Schema代码无需修改,继续保留@aws_api_key和@aws_iam指令,确保两种授权的请求都能触发解析器:

type Car @aws_api_key @aws_iam {
  id: ID!
  year: Int
  color: String
  tireType: String
}

type Query {
  getCar(id: ID!): Car @aws_api_key @aws_iam
}

这样配置后,只有同时携带有效API Key和IAM签名的请求,才能通过解析器校验并获取数据;仅携带其中一种授权的请求会被拦截返回未授权。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:05:15