一尘不染

AWS Lambda:如何将密钥存储到外部API?

node.js

我正在构建基于AWS Lambda的监视工具。给定一组指标,Lambda应当能够使用Twilio
API 发送SMS 。为了能够使用API​​,Twilio提供了一个帐户SID和一个身份验证令牌。

我应该如何以及在哪里存储这些秘密?

我目前正在考虑使用AWS KMS,但可能还有其他更好的解决方案。


阅读 239

收藏
2020-07-07

共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的一部分上传。您可以按以下步骤解密和使用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);
  }
});

希望您会觉得有用。

2020-07-07