Подтвердить что ты не робот

AWS Lambda: Как хранить секрет для внешнего API?

Я создаю инструмент для мониторинга, основанный на AWS Lambda. Учитывая набор показателей, Lambdas должен иметь возможность отправлять SMS с помощью Twilio API. Чтобы иметь возможность использовать API, Twilio предоставляет SID учетной записи и токен аутентификации.

Как и где хранить эти секреты?

В настоящее время я думаю использовать AWS KMS, но могут быть и другие лучшие решения.

4b9b3361

Ответ 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 совершенных или подтолкнутых к ним.