我的 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 之前使用密钥加密它们不同吗?