在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
相关产品推荐
相关产品推荐

