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

在SAM中配置AWS API Gateway资源授权的缺失属性问题

解决SAM部署API时授权器未关联资源的问题

你的模板存在两处关键问题,导致授权器成功创建后,API资源的Authorization仍为NONE:

1. 重复定义授权器

你同时通过AWS::Serverless::Api的Auth.Authorizers和单独的AWS::ApiGateway::Authorizer资源创建授权器,属于冗余配置。完全可以删掉PlatformApiAuthorizer这个独立资源,用SAM自带的Auth配置统一管理授权器。

2. 未将授权器关联到API资源/方法

SAM的Auth配置仅定义了授权器,但未指定哪些API资源或方法需要使用它。有两种解决方式:

方式一:设置全局默认授权器

在AWS::Serverless::Api的Auth节点下添加DefaultAuthorizer,让整个API的所有方法默认启用该授权器,同时补充授权器的IdentitySource属性(指定令牌来源):

Resources:
  PlatformApiGateway:
    Type: AWS::Serverless::Api
    Properties:
      Name: API Gateway name
      StageName: !Sub ${Environment}
      Auth:
        DefaultAuthorizer: LambdaTokenAuthorizer
        Authorizers:
          LambdaTokenAuthorizer:
            FunctionArn: 你的Lambda函数ARN
            IdentitySource: method.request.header.auth # 匹配你之前设置的令牌请求头
      DefinitionBody:
        'Fn::Transform':
          Name: 'AWS::Include'
          Parameters:
            Location: !Sub s3://${OpenApiLocation}

方式二:为单个方法指定授权器

如果不需要全局启用,可在你的OpenAPI定义文件中,给需要授权的方法添加x-amazon-apigateway-authorizer配置,示例如下:

paths:
  /your-target-resource:
    get:
      x-amazon-apigateway-authorizer:
        type: TOKEN
        authorizerId: !Ref LambdaTokenAuthorizer # 或直接填写授权器名称
        identitySource: method.request.header.auth
      responses:
        '200':
          description: 成功响应
      x-amazon-apigateway-integration:
        # 你的集成配置内容

注意:使用方式二时,需保证OpenAPI中指定的授权器名称与SAM模板里的LambdaTokenAuthorizer一致,或通过引用关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:55:27