0

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

4

1 回答 1

2

此构造有助于向 Lambda 函数的开发人员隐藏实际密码(例如,如果您将开发外包)。在这种情况下,您将 KMS 密钥提供给开发人员,而不是数据库的主密码。

然后您交付该功能,将其部署在您的 AWS 账户中,配置环境变量,您就可以开始了。这也允许您在不更改 Lambda 函数的源代码的情况下更改数据库密码。

于 2016-12-03T16:23:49.540 回答