【发布时间】:2017-04-15 21:56:53
【问题描述】:
我的 AWS Lambda 函数需要填充包含敏感值的环境变量,例如主数据库密码。
Lambda 的新 env vars 功能使这变得超级简单。但是关于最佳实践是什么,或者如何实现它,这有点模糊。
在 Lambda 常见问题解答中,他们声明如下:
问:我可以将敏感信息存储在环境变量中吗? 敏感信息,例如数据库密码,我们建议您 使用 AWS Key Management Service 使用客户端加密并存储 结果值在您的环境变量中为
cipher text。你 需要在您的 AWS Lambda 函数代码中包含逻辑才能解密 这些值。
所以他们基本上是说您需要自己加密这些值,然后将加密的值输入到您的 Lambda 函数 env vars 中。然后,您需要在函数中包含将在实例化时解密该值的逻辑。在伪代码中,它看起来像这样:
在您的笔记本电脑上
/// Encrypt your password
var myDbPassword = '122345';
var encryptedDbPassword = aws.kms.encrypt(myDbPassword, 'my-lambda-env-key');
/// Store it 'on' your Lambda function
aws.lambda.env.save('DB_PASS', encryptedDbPassword);
在您的 Lambda 函数中
然后在您的函数中,您将有逻辑在实例化时对其进行解密:
var myDbPassword = aws.kms.decrypt(process.env.DB_PASS, 'my-lambda-env-key');
db.connect('someURL', myDbPassword);
很简单,但是您输入的任何值在输入时都已经加密,它们允许您选择要用于加密值的 KMS 密钥,您可以创建自己的 KMS 密钥并使用它而不是“默认"键。
那么,在输入之前加密值有什么意义呢?如果您可以告诉 Lambda 使用您的 my-lambda-env-key 密钥进行加密,这与使用 my-lambda-env-key 密钥在将您的笔记本电脑上的值发送到 Lambda 之前对其进行加密不一样吗?
【问题讨论】:
-
作为一个在家工作的独立开发者,我突然想到我已经忘记了 Over-The-Shoulder 攻击。我的猫很少以这种方式入侵我的数据库。
-
我永远不会相信猫...
标签: amazon-web-services encryption aws-lambda aws-kms