AWS Lambda: Как хранить секрет для внешнего API?
Я создаю инструмент для мониторинга, основанный на AWS Lambda. Учитывая набор показателей, Lambdas должен иметь возможность отправлять SMS с помощью Twilio API. Чтобы иметь возможность использовать API, Twilio предоставляет SID учетной записи и токен аутентификации.
Как и где хранить эти секреты?
В настоящее время я думаю использовать AWS KMS, но могут быть и другие лучшие решения.
Ответы
Ответ 1
Вот что я придумал. Я использую AWS KMS для шифрования моих секретов в файл, который я загружаю с кодом в AWS Lambda. Затем я расшифровываю его, когда мне нужно их использовать.
Ниже приведены шаги, которые необходимо выполнить.
Сначала создайте ключ KMS. Вы можете найти документацию здесь: http://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html
Затем зашифруйте свой секрет и поместите результат в файл. Это может быть достигнуто из CLI с помощью:
aws kms encrypt --key-id some_key_id --plaintext "This is the scret you want to encrypt" --query CiphertextBlob --output text | base64 -D > ./encrypted-secret
Затем вам необходимо загрузить этот файл как часть Lambda. Вы можете расшифровать и использовать секрет в Лямбде, как показано ниже.
var fs = require('fs');
var AWS = require('aws-sdk');
var kms = new AWS.KMS({region:'eu-west-1'});
var secretPath = './encrypted-secret';
var encryptedSecret = fs.readFileSync(secretPath);
var params = {
CiphertextBlob: encryptedSecret
};
kms.decrypt(params, function(err, data) {
if (err) console.log(err, err.stack);
else {
var decryptedSecret = data['Plaintext'].toString();
console.log(decryptedSecret);
}
});
Надеюсь, вы найдете это полезным.
Ответ 2
Как и поддержка AWS Lambda для NodeJS 4.3, правильным ответом является использование Переменные среды. Эта функция интегрируется с AWS KMS, поэтому вы можете использовать свои собственные мастер-ключи для шифрования секретов.
Ответ 3
Существует проект для функции Nodejs Lambda, который начинается с дешифрования ключа api из kms. Он обеспечивает простой способ расшифровки с использованием интерфейса обещаний. Он также дает вам разрешения на роль, которые вам нужно предоставить лямбда-функции для доступа к kms. Синий отпечаток можно найти, выполнив поиск "algorithmia-blueprint"
Ответ 4
Хорошо... это то, что было сделано KMS:) И, конечно, более безопасно, чем хранить ваши токены в открытом тексте в функции Lambda или делегировать стороннюю службу.
Если вы спуститесь по этому маршруту, просмотрите этот пост в блоге, чтобы использовать существующий пример использования, чтобы быстрее вставать и работать. В частности, вам необходимо добавить следующее к вашей политике роли выполнения Lambda:
"kms:Decrypt",
"kms:DescribeKey",
"kms:GetKeyPolicy",
Остальная часть кода для приведенного выше примера немного свернута; вам действительно нужно только describeKey()
в этом случае.
Ответ 5
Независимо от того, что вы решите сделать, вы должны использовать инструмент, например GitMonkey, чтобы отслеживать ваши репозитории кода и следить за тем, t совершенных или подтолкнутых к ним.