2016-12-01 1 views
0

Функция AWS Lambda должна быть заполнена env vars, которая содержит чувствительные значения, такие как пароль master db.Какова наилучшая практика для хранения чувствительных env vars с использованием AWS Lambda?

Новая функция env vars Lambda делает этот суперпростой. Но это немного нечетко относительно того, что такое лучшая практика, или как это сделать.

В Lambda FAQ, они заявляют следующее:

Q: Могу ли я хранить конфиденциальную информацию в переменных окружения? Для конфиденциальной информации, такой как пароли базы данных, мы рекомендуем вам использовать шифрование на стороне клиента с помощью службы управления ключами AWS и сохранить результирующие значения как cipher text в вашей переменной окружения. Вам необходимо указать логику в вашем функциональном коде AWS для дешифрования этих значений.

Значит, они в основном говорят, что вам нужно зашифровать значения самостоятельно, а затем ввести зашифрованное значение в вашу функцию лямбда-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?

+0

Как соло-dev, который работает из дома, мне просто пришло в голову, что я забыл о нападениях Over-The-Shoulder. Мой кот редко взламывает мою БД таким образом. – AJB

+2

Я бы никогда не доверял кошке ... –

ответ

2

Эта конструкция помогает скрыть фактический пароль от разработчика функции лямбда (например, если вы передаете аутсорсинг). В этом случае вы предоставляете ключ KMS разработчику, но не мастер-пароль для БД.

Затем вы берете доставку функции, развертываете ее в своей учетной записи AWS, настраиваете переменную окружения, и вам хорошо идти. Это также позволяет вам изменять пароль БД без изменения исходного кода функции Лямбды.

+0

Это звучит правдоподобно ~ иш. Если вы предоставляете ключ KMS внешнему разработчику, а ключ KMS можно использовать для получения пароля БД, что должно остановить аутсорсинг от простого использования ключа KMS и пароля console.logging()? – AJB

+0

Вы не предоставляете стороннему разработчику право запускать код в производственной среде. Они могут запускать только код в среде разработчика или промежуточной версии (которая использует другие пароли). Если вы берете свой код и запускаете его в процессе производства, вам не нужно его вообще изменять, потому что фактические учетные данные «вводятся» и дешифруются через KMS. – Digitalkapitaen

Смежные вопросы