Ecco quello che ho trovato. Sto usando AWS KMS per crittografare i miei segreti in un file che ho caricato con il codice in AWS Lambda. Quindi decrittalo quando ho bisogno di usarli.
Ecco i passaggi da seguire.
Per prima cosa creare una chiave KMS. Puoi trovare la documentazione qui: http://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html
Quindi crittografare il tuo segreto e inserire il risultato in un file. Questo può essere ottenuto dalla CLI con:
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
Quindi è necessario caricare questo file come parte del Lambda. Puoi decifrare e usare il segreto nel Lambda come segue.
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);
}
});
Spero che lo troverai utile.
Questo è ottimo, ma dal momento che la decrittazione richiede una richiamata, non significa che la tua funzione potrebbe essere eseguita prima ancora di avere il segreto? Supponendo che il segreto sia necessario affinché il lambda esegua questo potrebbe essere un problema. – KerrM
Ovviamente se si esegue il codice dopo la chiamata di decifrazione che richiede il segreto, è necessario assicurarsi che venga eseguito dopo l'esecuzione del callback di decifrazione. È possibile utilizzare la promessa (mai utilizzata da solo) o qualcosa come async.waterfall da http://caolan.github.io/async/ – JonathanGailliez
È possibile eseguire un ulteriore passaggio e memorizzare il segreto crittografato in S3. Dare alla funzione lambda un ruolo in cui può ottenere oggetti da un bucket specifico e in questo modo non è necessario aggiornare la funzione lambda ogni volta che cambia la chiave e non deve preoccuparsi di mantenere l'API memorizzata su una macchina. – bernays