Бессерверный: создать ключ API из значения SecretsManager

У меня есть бессерверный стек, развертывающий API для AWS. Я хочу защитить его с помощью ключа API, хранящегося в диспетчере секретов. Идея состоит в том, чтобы иметь значение ключа в SSM, извлекать его при развертывании и использовать в качестве моего ключа API.

serverless.yml

service: my-app
frameworkVersion: '2'

provider:
  name: aws
  runtime: nodejs12.x
  ...
  apiKeys:
    - name: apikey
      value: ${ssm:myapp-api-key}

Насколько я могу судить, развернутый ключ шлюза API должен быть таким же, как и ключ SSM Secret, но когда я смотрю в консоль, два значения различаются. Что я упускаю из виду? Сообщений об ошибках тоже нет.


person xShirase    schedule 28.04.2021    source источник


Ответы (1)


Некоторое время назад я столкнулся с той же проблемой и прибег к использованию _1 _, поскольку он был непонятен для меня, когда Serverless создавал или повторно использовал новые ключи API для API Gateway.

С помощью этого плагина ваш serverless.yml будет выглядеть примерно так:

service: my-app
frameworkVersion: '2'

plugins:
  - serverless-add-api-key

custom:
  apiKeys:
    - name: apikey
      value: ${ssm:myapp-api-key}

functions:
  your-function:
    runtime: ...
    handler: ...
    name: ...
    events:
      - http:
          ...
          private: true

Вы также можете использовать конфигурацию для конкретной стадии:

custom:
  apiKeys:
    dev:
      - name: apikey
        value: ${ssm:myapp-api-key}
person yvesonline    schedule 03.05.2021
comment
В итоге я этим и занимался, работал отлично. Спасибо за ответ! Стоит упомянуть, что это не работало, когда раздел plugins не находился в верхней части файла yml (вероятно, выше provider) - person xShirase; 12.05.2021