簡體   English   中英

AWS Lambda:如何將秘密存儲到外部API?

[英]AWS Lambda: How to store secret to external API?

我正在構建一個基於AWS Lambda的監控工具。 給定一組指標,Lambdas應該能夠使用Twilio API發送SMS。 為了能夠使用API​​,Twilio提供帳戶SID和身份驗證令牌。

我應該如何以及在哪里存儲這些秘密?

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

這就是我想出來的。 我正在使用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);
  }
});

我希望你會發現這很有用。

從AWS Lambda支持NodeJS 4.3開始,正確的答案是使用環境變量存儲敏感信息 此功能與AWS KMS集成,因此如果默認值不夠,您可以使用自己的主密鑰加密機密。

Nodejs Lambda函數有一個藍圖,它從解密來自kms的api密鑰開始。 它提供了一種使用promise接口進行解密的簡便方法。 它還為您提供了為了訪問kms而提供lambda函數所需的角色權限。 通過搜索“algorithmia-blueprint”可以找到藍圖

嗯......這就是KMS的用途:)當然比在Lambda函數中以明文形式存儲令牌或委托給第三方服務更安全。

如果您沿着這條路走下去,請查看此博客文章,了解現有的使用示例,以便更快地啟動和運行。 特別是,您需要將以下內容添加到Lambda執行角色策略中:

"kms:Decrypt",
"kms:DescribeKey",
"kms:GetKeyPolicy",

上面例子的其余代碼有點復雜; 在這種情況下,你真的只需要describeKey()

無論您選擇做什么,都應該使用像GitMonkey這樣的工具來監控您的代碼存儲庫,並確保您的密鑰沒有提交或推送給它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM