Каков наилучший способ хранения конфиденциальных переменных с помощью AWS Lambda?
Моя лямбда-функция AWS должна быть заполнена переменными env, которые содержат конфиденциальные значения, например пароль master db.
Новая функция env vars в Lambda делает это очень простым. Но немного неясно, что такое лучшая практика или как ее достичь.
В Lambda FAQ они заявляют следующее:
В: Могу ли я хранить конфиденциальную информацию в переменных среды? Для конфиденциальной информации, такой как пароли базы данных, мы рекомендуем использовать шифрование на стороне клиента с помощью службы управления ключами AWS и сохранять полученные значения как
cipher text
в вашей переменной среды. Вам нужно будет включить логику в код функции AWS Lambda, чтобы расшифровать эти значения.
Таким образом, они в основном говорят, что вам нужно зашифровать значения самостоятельно, а затем ввести зашифрованное значение в вашу функцию Lambda env vars. Затем вам нужно включить логику в вашу функцию, которая будет дешифровать значение при создании экземпляра. В псевдокоде это будет выглядеть так:
На вашем ноутбуке
/// Encrypt your password
var myDbPassword = '122345';
var encryptedDbPassword = aws.kms.encrypt(myDbPassword, 'my-lambda-env-key');
/// Store it 'on' your Lambda function
aws.lambda.env.save('DB_PASS', encryptedDbPassword);
В вашей лямбда-функции
И тогда в вашей функции у вас будет логика для ее дешифрования при создании экземпляра:
var myDbPassword = aws.kms.decrypt(process.env.DB_PASS, 'my-lambda-env-key');
db.connect('someURL', myDbPassword);
Достаточно просто, но любые значения, которые вы вводите, уже зашифрованы, когда вы их вводите, и они позволяют вам выбрать, какой ключ KMS вы хотите использовать для шифрования значений, и вы можете создать свой собственный ключ KMS и использовать его вместо "по умолчанию". ключ
Итак, какой смысл шифровать значения перед вводом? Если вы можете сказать Lambda использовать ваш my-lambda-env-key
ключ для шифрования не то же самое, что с использованием my-lambda-env-key
ключ для шифрования значений на вашем ноутбуке перед отправкой в Lambda?
1 ответ
Эта конструкция помогает скрыть действительный пароль от разработчика функции Lambda (например, если вы производите аутсорсинг). В этом случае вы даете ключ KMS разработчику, но не мастер-пароль для БД.
Затем вы получаете поставку функции, внедряете ее в свою учетную запись AWS, настраиваете переменную среды, и все готово. Это также позволяет вам изменить пароль вашей БД без изменения исходного кода функции Lambda.