[英]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.