Итак, после дальнейшего изучения этой темы c Я думаю, что у меня есть решение. Хранилище параметров SSM vs Secrets Manager - это совершенно другая топика c, но для моей цели SSM Paremeter Store - выбор, который я выбрал go вместе с этой проблемой. И в основном это можно сделать двумя способами.
1. Используйте AWS хранилище параметров
Просто добавьте секрет в консоль хранилища параметров AWS, а затем укажите значение в вашем serverless.yml
как переменную окружения Lambda. Serverless Framework может извлечь значение из вашей AWS учетной записи хранилища параметров при развертывании.
provider:
environement:
stripeSecretKey: ${ssm:stripeSecretKey}
Наконец, вы можете ссылаться на него в своем коде так же, как и раньше:
const stripe = Stripe(process.env.stripeSecretKey);
PROS: Это можно использовать вместе с локальным файлом .env как для локального, так и для удаленного использования, сохраняя ваш код Lambda одинаковым, ie. process.env.stripeSecretKey
CONS: Поскольку секреты расшифровываются и затем устанавливаются как переменные среды Lambda при развертывании, если вы go на своей консоли Lambda, вы сможете увидеть секретные значения в виде простого текста. (Что-то вроде некоторых проблем безопасности)
Это подводит меня ко второму способу сделать это, который я считаю более безопасным и который я в конечном итоге выбираю:
2. Сохраните в AWS хранилище параметров и расшифруйте во время выполнения Чтобы не раскрывать секреты в виде простого текста на вашей AWS лямбда-консоли, вы можете вместо этого расшифровать их во время выполнения. Вот как:
Добавьте секреты в консоль хранилища параметров AWS, как на предыдущем шаге.
Измените свой лямбда-код Для прямого вызова хранилища параметров и расшифровки значения во время выполнения:
import stripePackage from 'stripe';
const aws = require('aws-sdk');
const ssm = new aws.SSM();
const stripeSecretKey = ssm.getParameter(
{Name: 'stripeSecretKey', WithDecryption: true}
).promise();
const stripe = stripePackage(stripeSecretKey.Parameter.Value);
( Небольшой совет: Если ваша лямбда определена как асинхронная c функция, обязательно используйте ключевое слово await перед ssm.getParameter (...). Обещание ();)
PROS: Ваши секреты не раскрываются в виде простого текста.
CONS: Ваш Lambda-код становится немного сложнее, и это дополнительная задержка, так как он должен получить значение из магазина. (Но, учитывая, что это только один параметр, и он бесплатный, это хороший компромисс, я думаю)
В заключение я просто хочу упомянуть, что все это для того, чтобы работать, потребует от вас настройки политики лямбды так, он может получить доступ к диспетчеру систем и вашему секрету, который хранится в хранилище параметров, но это легко проверить с помощью CloudWatch.
Надеюсь, это кому-нибудь поможет, приятное кодирование :)