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

如何在AWS API Gateway请求中携带标签以满足IAM策略校验要求

问题核心结论

你当前策略中使用的aws:RequestTag条件键不支持用于API Gateway的invoke调用校验,没有原生的请求头/参数传递方式可以让AWS识别这个标签,该条件键仅适用于AWS资源创建类操作的标签校验场景。

原因说明

  • aws:RequestTag是AWS全局条件键,仅在调用支持标签的资源创建接口时生效,例如ec2:RunInstances、iam:CreateRole这类操作,AWS会从接口的Tags请求参数中提取标签值做校验。
  • API Gateway的execute-api:Invoke属于业务调用类操作,不属于资源创建操作,AWS不会自动从请求的任何位置提取标签赋值给aws:RequestTag相关的条件键,因此你现有的策略逻辑无法生效。

可行实现方案

方案1:直接校验请求头(最便捷)

API Gateway原生支持在IAM策略中校验请求头参数,你可以把策略调整为校验自定义请求头,实现相同的过滤逻辑:

  1. 修改IAM策略,将条件键替换为execute-api:RequestHeader/[请求头名],示例如下:
Version: "2012-10-17"
Statement:
  - Effect: Allow
    Action:
      - execute-api:Invoke
    Resource:
      - Fn::Join:
        - "/"
        - 
         - Fn::Join: [":", ["arn:aws:execute-api", {"Ref": "AWS::Region"}, {"Ref":"AWS::AccountId"}, {"Ref": "ApiGatewayRestApi"}]]
          - ${self:custom.stage}
          - GET
          - items*
    Condition: 
      StringNotEquals: 
        execute-api:RequestHeader/X-Business-Stream: "CI"
  1. 调用方发起请求时,添加X-Business-Stream: [业务标识]的请求头即可,只要值不是CI就能通过校验。

方案2:基于预定义标签做权限隔离

如果你的业务逻辑需要基于标签做权限管控,不需要请求动态传值,可以用预定义标签匹配:

  • 给对应的API Gateway资源/阶段打上businessStream标签
  • 给调用接口的IAM主体(用户/角色)也打上对应businessStream标签
  • 策略里用资源标签和主体标签匹配的条件,示例:
Condition:
  StringEquals:
    "aws:ResourceTag/businessStream": "${aws:PrincipalTag/businessStream}"

这种场景下不需要请求传递任何参数,权限完全基于预配置的标签实现。

方案3:自定义Lambda授权器

如果你必须使用请求动态传递的标签值做校验,又不想用请求头条件键,可以在API Gateway配置Lambda自定义授权器,自己解析请求中携带的标签参数,自定义生成访问策略返回给API Gateway做校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:27:02