[英]AWS Lambda: How to store secret to external API?
這就是我想出來的。 我正在使用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);
}
});
我希望你會發現這很有用。
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.