如何在AWS API Gateway中免除某些资源的自定义授权?

Sag*_*ani 3 amazon-web-services aws-api-gateway

我已在 API 网关中为代理资源配置了自定义授权,但我的要求是免除少数 API 的授权,但我不想在 API 网关中配置新的 API,因为我正在尝试通过 API 网关设计代理。

例如,API /server/ver1.0/rest/{proxy+},这是我在 API 网关中配置的 REST API,它通过自定义授权者,如果成功,则调用后端 http 服务。

但我想免除 API - /server/ver1.0/rest/acc/reg 的授权。

小智 6

不确定这是否直接回答了 OP,因为我们不将请求代理到后端 API,而是使用 Lambda 进行所有 API 调用,但我们仍然需要仅授权部分 API。我们就是这样做的:

我们有一个使用 SAM 部署的 API,在这个项目中,我们对大多数 api 使用自定义授权程序。

MonitorApi:
    Type: AWS::Serverless::Api
    Properties:
      Cors:
        AllowMethods: "'OPTIONS,POST,GET,PATCH,DELETE'"
        AllowHeaders: "'*'"
        AllowOrigin: "'*'"
      StageName: !Ref AppStage
      GatewayResponses:
        DEFAULT_4xx:
          ResponseParameters:
            Headers:
              Access-Control-Expose-Headers: "'*'"
              Access-Control-Allow-Headers: "'*'"
              Access-Control-Allow-Origin: "'*'"
      Auth:
        DefaultAuthorizer: LambdaTokenAuthorizer # This authorizer is used on the API
        AddDefaultAuthorizerToCorsPreflight: false
        Authorizers:
          LambdaTokenAuthorizer:
            FunctionArn: !GetAtt AuthorizeFunction.Arn
            Identity:
              Header: Authorization
              ReauthorizeEvery: 300
Run Code Online (Sandbox Code Playgroud)

对于一些需要公开的资源,我们在函数级别覆盖它,如下所示:

  SystempingFunction: # Systemping service in API
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: monitor/
      Handler: systemping.handler
      Runtime: nodejs12.x
      Timeout: 20
      Events:
        SystempingEvent:
          Type: Api
          Properties:
            Auth:
              Authorizer: NONE # Turn off Authorization for this function
            Path: /systemping
            Method: get
            RestApiId: !Ref MonitorApi
Run Code Online (Sandbox Code Playgroud)