16

我想使用无服务器创建一个安全的 APIG,在我当前的“ s-fction.json ”中我已经拥有:

"apiKeyRequired": true,

在我的“ s-resources-cf.json ”中,我已经有了:

"AWSApiKey": {
  "Type": "AWS::ApiGateway::ApiKey",
  "Properties" : {
    "Description" : "ApiKey for secure the connections to the xxx API",
    "Enabled" : true
  }
}

它正确地创建了所有,一个 Lambda,一个用于该 lambda 的 APIG(包括 CORS)和 API 密钥,但我需要手动将密钥“分配”给生成的 APIG-Stage,你对我该怎么做有任何想法吗?自动使用无服务器?

我已经从这里阅读了关于我想要的功能的 AWS 文档(而且似乎是可能的):AWS CloudFormation API Key

该文档显示它可以通过以下方式完成:

"ApiKey": {
  "Type": "AWS::ApiGateway::ApiKey",
  "DependsOn": ["TestAPIDeployment", "Test"],
  "Properties": {
    "Name": "TestApiKey",
    "Description": "CloudFormation API Key V1",
    "Enabled": "true",
    "StageKeys": [{
      "RestApiId": { "Ref": "RestApi" },
      "StageName": "Test"
    }]
  }
}

但我不知道如何添加对无服务器自动创建的 APIG 的引用以及如何等待该 APIG 被创建。

4

1 回答 1

1

您可以通过将 apiKeys 数组属性添加到 serverless.yml 中的提供程序对象来指定要由服务 Rest API 使用的 API 密钥列表。您还需要明确指定哪些端点是私有的,并通过将私有布尔属性添加到要设置为私有的 http 事件对象来要求将其中一个 api 密钥包含在请求中。API 密钥是全局创建的,因此如果您想将服务部署到不同的阶段,请确保您的 API 密钥包含如下定义的阶段变量。使用 API 密钥时,您可以选择使用 usagePlan 对象定义使用计划配额和限制。

这是为您的服务 Rest API 设置 API 密钥的示例配置:

service: my-service
provider:
  name: aws
  apiKeys:
    - myFirstKey
    - ${opt:stage}-myFirstKey
    - ${env:MY_API_KEY} # you can hide it in a serverless variable
  usagePlan:
    quota:
      limit: 5000
      offset: 2
      period: MONTH
    throttle:
      burstLimit: 200
      rateLimit: 100
functions:
  hello:
    events:
      - http:
          path: user/create
          method: get
          private: true

有关更多信息,请阅读以下文档: https ://serverless.com/framework/docs/providers/aws/events/apigateway

于 2018-09-28T13:26:06.587 回答