簡體   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