当前位置: 首页 > 知识库问答 >
问题:

将API密钥源设置为AWS::Serverless::Api中的授权者

有骏奇
2023-03-14

我有一个通过云形成AWS::无服务器::Api对象定义的应用编程接口。我需要它从其自定义授权器中获取使用计划密钥,相当于在AWS::ApiGateway::RestApi上将ApiKeySourceType设置为AUTHORIZER。如何做到这一点?

这是我正在使用的当前定义,包括从正确配置的API导出的OpenAPI定义。我确实觉得很奇怪,即使在将配置设置为AUTHORIZER之后,< code>x-api-key仍然为api_key列出。

  RestApi:
    Type: AWS::Serverless::Api
    Properties:
      Name: !Sub ${AWS::StackName}-API
      StageName: !Ref ApiStageName
      MethodSettings:
        - CachingEnabled: false
          DataTraceEnabled: false
          HttpMethod: '*'
          LoggingLevel: INFO
          MetricsEnabled: true
          ResourcePath: '/*'
          ThrottlingBurstLimit: !Ref ThrottlingBurstLimit
          ThrottlingRateLimit: !Ref ThrottlingRateLimit
      AccessLogSetting:
        DestinationArn: !GetAtt ApiLogs.Arn
        # format is copied from an example generated by the web console
        Format: '{ "requestId":"$context.requestId", "ip": "$context.identity.sourceIp", "requestTime":"$context.requestTime", "httpMethod":"$context.httpMethod","routeKey":"$context.routeKey", "status":"$context.status","protocol":"$context.protocol", "responseLength":"$context.responseLength" }'
      CacheClusterEnabled: false
      TracingEnabled: true
      DefinitionBody: !Sub |
        openapi: "3.0.1"
        paths:
          /v2/oauth2/token:
            post:
              x-amazon-apigateway-integration:
                connectionId: "${RestApiVpcLink}"
                httpMethod: "POST"
                uri: "http://${VPCLinkLB.DNSName}/v2/oauth2/token"
                passthroughBehavior: "when_no_match"
                connectionType: "VPC_LINK"
                type: "http_proxy"
          /{proxy+}:
            x-amazon-apigateway-any-method:
              parameters:
                - name: "proxy"
                  in: "path"
                  required: true
                  schema:
                    type: "string"
              security:
                - LambdaAuthorizer: []
                - api_key: []
              x-amazon-apigateway-integration:
                connectionId: "${RestApiVpcLink}"
                httpMethod: "ANY"
                uri: "http://${VPCLinkLB.DNSName}/{proxy}"
                requestParameters:
                  integration.request.path.proxy: "method.request.path.proxy"
                passthroughBehavior: "when_no_match"
                connectionType: "VPC_LINK"
                type: "http_proxy"
        components:
          securitySchemes:
            LambdaAuthorizer:
              type: apiKey
              name: Authorization
              in: header
              x-amazon-apigateway-authtype: custom
              x-amazon-apigateway-authorizer:
                authorizerUri: "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${GatewayAuthorizerLambda.Arn}/invocations"
                authorizerResultTtlInSeconds: 300
                identityValidationExpression: "Bearer .*"
                type: "token"
            api_key:
              type: "apiKey"
              name: "x-api-key"
              in: "header"

我主要使用< code>Serverless::Api,而不是它的组件< code>ApiGateway对象,因为我发现否则阶段/部署会非常令人头疼。

共有1个答案

仇飞鹏
2023-03-14

x-amazon-apigateway-api-key-source: AUTHORIZER需要作为兄弟添加到openapi:"3.0.1"。openAPI扩展在这里记录。

看起来在阶段导出中一定有一个bug导致了它的丢失。

 类似资料:
  • 我需要从Google Analytics以编程方式检索数据,以便生成一些报告,所以OAuth2.0不是一个选项,因为它要求用户授权…是否有一种方法可以使用API密钥从GA API v3中检索数据?谢了!

  • 我们目前正在使用API密钥来保护对API网关的访问。然而,我们正在转向具有访问/密钥的IAM模型。我知道swagger不允许我们这样做(我们目前在swagger中设置了api_key以启用api密钥身份验证)。 我已经创建了各种操作所需的策略,如下所示: 我的lambda函数如下所示。我仍然是云形成的新手,并且希望得到一些关于我可以做些什么来添加lambda授权器的帮助(我相信它会在事件中-

  • TL;DR:将身份验证数据传递给csv文件中名为参数(且未签入)的boto3脚本是否出于任何原因不如明文共享凭据文件(文档中的默认答案)安全? 我想写一个boto3脚本,打算从使用IAM密钥的笔记本电脑上运行。初始化会话的主要公认方法是将API密钥、密钥、区域和(如果适用)会话密钥包含在由标识的共享凭据文件中,或者将密钥和密钥本身作为环境变量(等)我想做的是将这些值从csv或类似文件加载到字典,然

  • 对于Kinesis流,我使用AWSAPI网关创建了一个代理API。我为代理添加了一个使用python Lambda的自定义授权器。在发布lambda函数和部署API之后,我能够使用网关测试功能成功地测试API。我可以在cloudwatch中看到日志,其中包含来自自定义auth lambda函数的详细打印。成功身份验证后,API网关将记录推送到我的Kinesis流 但是当我从Chrome Postm

  • 我为我的Android应用程序创建了一个用于GCM推送通知的Android API键。从最近两天开始,GCM服务器返回PHP中未授权的(401)响应。 Android API密钥无效/过期有什么原因吗?还是GCM不推荐使用Android API密钥? 我仍然没有得到关于为什么Android API密钥无效的适当解释?对于GCM,他们中的大多数人更喜欢服务器密钥而不是Android API密钥,但是

  • Using a delegation key The collaborator can now push to the repository using Docker Content Trust. Docker will automatically choose and pick the right key for the targets/release role. Edit the file o