2016-11-14 2 views
2

В файле serverless.yml вы можете указать имя ключа API для использования с функциями в развернутом API. Вы указываете имена ключей API, а затем указываете методы, которые вы хотите защитить, как частные. Например:Использование существующего ключа API с безсерверной платформой в AWS

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

При развертывании, каркас генерирует ключ API и присваивает его функции. Он генерирует ключ, даже если один с таким именем уже существует в среде.

Есть ли способ указать существующий ключ API, а не создавать его фреймворк? We действительно хотят сохранить генерацию ключа отдельно от развертываний.

ответ

2

Я знаю, что это старо, но у меня была эта проблема в последнее время и она была решена, поэтому я подумал, что поставлю то, что нашел здесь.

Этот ответ основан на этом форуме сообщение, которое требуется немного контекста для меня, чтобы получить работу: 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.

Serverless делает добавить несколько переменных, хотя:

  • DependsOn: Это означает, что ресурс с Ссылаются по имени. В безсерверной ссылке doc выше перечислены стандартные соглашения об именах, которые используются в случае, если вы хотите ссылаться на нестандартные ресурсы. Например, «ApiGatewayRestApi» - это стандартный api, созданный без сервера во всех развертываниях с помощью http-событий.
  • Ссылка: Ссылка на другой объект в стеке. В приведенном выше примере он заменяет необходимость явно передавать ApiId или UsagePlanId (который будет сгенерирован или получен при создании стека). Это означает, что вы можете настроить зависимости от вещей в вашем стеке без необходимости записи идентификаторов.
  • Квота и Дроссельная заслонка: дополнительно. Оставляя это, вы не будете обновлять ссылочный план использования.

Кроме того, некоторое поведение о планах использования и ключах плана использования:

  • планов по использованию, когда генерируется один раз, сохранит свою UsagePlanId между внедрениями, даже если вы измените имя плана (через UsagePlanName).Мое тестирование заключается в том, что UsagePlanKeys, созданные вне развертывания без сервера, не будут удалены при обновлении, но я не тестировал это достаточно широко, чтобы быть на 100% уверенным.
  • Планы использования могут создаваться за пределами развертывания API и ссылаться на переменную UsagePlanId.

Вы можете быть заинтересованы в создании структуры аутентификации за пределами какой-либо API развертывания и использования CloudFormation (через бессерверную) Выходы услуги, чтобы получить ARN и/или идентификатор каждого из ресурсов, которые вы создали:

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

Выходы используют тот же формат, что и ресурсы, и пример можно увидеть в примере aws serverless.yml. Это позволит вам изменить планы использования независимо от самих apis и поддерживать их отдельно. Вы можете сохранить эти выходы для использования с помощью apis, используя ссылку на javascript, чтобы добавить только планы, которые должны быть включены для каждой стадии на основе api.

tl; dr - Используйте структуру ресурсов для создания сырых конфигураций CloudFormation.

  • Ресурсы дают вам возможность ссылаться на существующие ключи, планы и другие ресурсы.
  • Выходы позволяют вам, среди прочего, получать и сохранять идентификаторы объектов, которые вы, возможно, захотите использовать во всех развертываниях.
  • Обновление объектов не приведет к удалению ассоциаций (которые я смог увидеть), сделанных вне стека, поэтому безопасно добавлять внешние ключи в план использования, который вы создаете таким образом.
Смежные вопросы