繁体   English   中英

在AWS中使用现有的API密钥和无服务器框架

[英]Using an existing API key with the Serverless Framework in AWS

serverless.yml文件中,您可以指定要与已部署API中的函数一起使用的API密钥的名称。 列出API密钥名称,然后将要保护的方法标记为私有。 例如:

provider:
  name: aws
  runtime: nodejs4.3
  cfLogs: true
  apiKeys:
    - MyAPIKey

部署后,框架会生成API密钥并将其分配给函数。 即使环境中已存在具有相同名称的密钥,它也会生成密钥。

有没有办法指定现有的API密钥,而不是让框架生成它? 我们真的希望继续生成与部署分开的密钥。

我知道这是旧的,但我最近遇到了这个问题并解决了它,所以我想我会把我在这里找到的东西。

这个答案是基于这个论坛帖子,这需要一些上下文让我工作: https//forum.serverless.com/t/using-an-existing-api-key/770

使用资源部分,可以将自定义CloudFormation配置添加到部署中。 这包括添加启用了特定api密钥的自定义使用计划:

https://serverless.com/framework/docs/providers/aws/guide/resources/

结构大致如下,解释如下:

resources:
  Resources:
    MyServiceUsagePlan:
      Type: "AWS::ApiGateway::UsagePlan"
      DependsOn: ApiGatewayRestApi
      Properties:
        UsagePlanName: ${self:service}-${self:provider.stage}-usagePlan
        Quota:
          Limit: 10000
          Offset: 0
          Period: DAY
        Throttle:
          BurstLimit: 20
          RateLimit: 10
        ApiStages:
          -
            ApiId:
              Ref: ApiGatewayRestApi
            Stage: ${self:provider.stage}

    MyServiceKey:
      Type: "AWS::ApiGateway::UsagePlanKey"
      DependsOn: MyServiceUsagePlan
      Properties :
        KeyId: ${file(./conf/${self:provider.stage}.yml):MyServiceKeyId}
        KeyType: API_KEY
        UsagePlanId:
          Ref: MyServiceUsagePlan

这些资源中的每一个都以您提供的密钥命名。 无服务器为您提供无服务器生成的资源名称的名称,以防您要覆盖它们的一部分或引用它们。 但是,只要符合CloudFormation命名要求,您就可以为它们命名。

但无服务器确实添加了一些变量:

  • DependsOn :这意味着具有引用的资源是按名称。 上面的无服务器文档链接列出了在您要引用非自定义资源时使用的标准命名约定。 例如,“ApiGatewayRestApi”是在具有http事件的所有部署中由无服务器创建的标准API。
  • 参考 :对堆栈中另一个对象的引用。 在上面的示例中,它取代了显式传递ApiId或UsagePlanId(将在堆栈创建时生成或检索)的需要。 这意味着您可以在堆栈中的事物上设置依赖关系,而无需记录ID。
  • 配额节流 :可选。 将这些删除将避免更新引用的使用计划。

此外,有关使用计划和使用计划密钥的一些行为:

  • 使用计划一旦生成一次,即使您更改了计划的名称(通过UsagePlanName),也会在部署之间保留其UsagePlanId。 我的测试是在无服务器部署之外创建的UsagePlanKeys在更新时不会被删除,但我没有对此进行过广泛的测试以确保100%。
  • 可以在API部署范围之外创建使用计划,并使用UsagePlanId变量进行引用。

您可能有兴趣在任何一个api部署之外创建auth结构,并使用CloudFormation(通过无服务器)输出服务来获取您创建的每个资源的ARN和/或ID:

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html

输出使用与Resources相同的格式,示例aws serverless.yml中可以看到一个示例。 这将允许您独立于apis本身更改使用计划并单独维护。 您可以保存这些输出以供api使用,使用javascript变量引用仅添加应在每个阶段per-api上启用的计划。

tl; dr - 使用资源结构进行原始CloudFormation配置。

  • 资源使您能够引用现有密钥,计划和其他资源。
  • 除了其他功能之外,输出还允许您接收和保存可能要在部署中使用的对象的标识符。
  • 更新对象不会删除在堆栈外部创建的关联(我已经能够看到),因此可以安全地将外部密钥添加到以这种方式创建的使用计划中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM