Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用AWS Lambda存储敏感环境变量的最佳实践是什么?_Amazon Web Services_Encryption_Aws Lambda_Aws Kms - Fatal编程技术网

Amazon web services 使用AWS Lambda存储敏感环境变量的最佳实践是什么?

Amazon web services 使用AWS Lambda存储敏感环境变量的最佳实践是什么?,amazon-web-services,encryption,aws-lambda,aws-kms,Amazon Web Services,Encryption,Aws Lambda,Aws Kms,我的AWS Lambda函数需要填充包含敏感值的env变量,如主db密码 Lambda的新env-vars特性使这一点非常简单。但是,关于什么是最佳实践,或者如何实现它,还有一点模糊 在Lambda常见问题解答中,他们陈述了以下内容: Q:我可以将敏感信息存储在环境变量中吗? 敏感信息,如数据库密码,我们建议您 使用AWS密钥管理服务和存储使用客户端加密 环境变量中的结果值为密码文本。你 需要在AWS Lambda函数代码中包含逻辑才能解密 这些价值观 所以他们基本上是说,您需要自己加密这些值,

我的AWS Lambda函数需要填充包含敏感值的env变量,如主db密码

Lambda的新env-vars特性使这一点非常简单。但是,关于什么是最佳实践,或者如何实现它,还有一点模糊

在Lambda常见问题解答中,他们陈述了以下内容:

Q:我可以将敏感信息存储在环境变量中吗? 敏感信息,如数据库密码,我们建议您 使用AWS密钥管理服务和存储使用客户端加密 环境变量中的结果值为
密码文本
。你 需要在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
密钥进行加密,这与在将值发送给Lambda之前使用
my Lambda env key
密钥加密笔记本电脑上的值不一样吗?

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


然后交付函数,将其部署到AWS帐户中,配置环境变量,即可使用。这还允许您更改DB密码,而无需更改Lambda函数的源代码。

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


然后你获得函数,将其部署到你的AWS帐户中,配置环境变量,你就可以开始了。这还允许你在不更改Lambda函数源代码的情况下更改DB密码。

作为一个在家工作的独立开发人员,我刚刚想到,我已经忘记了过肩攻击ks.我的猫很少那样攻击我的数据库。我永远不会相信猫…作为一个在家工作的独立开发人员,我刚刚想到我已经忘记了肩上攻击。我的猫很少那样攻击我的数据库。我永远不会相信猫…听起来真的~ish。如果你向外包开发人员提供KMS密钥,KMS密钥可以用于获取DB密码,如何阻止外包开发人员仅使用KMS密钥和控制台。记录()DB密码?您没有授予外包开发人员在生产环境中运行代码的权利。他们只能在开发或登台环境(使用其他密码)中运行代码。如果您获取他们的代码并在生产环境中运行,则根本不需要修改它,因为实际凭据是“注入”的并通过KMS解密。@Digitalkapitaen我仍然不明白。你的观点与在生产中使用不同的环境变量有关。这与加密无关。如果在代码中加密的内容将由你提供的密钥解密,那么为什么首先要加密的问题仍然是。@任意的,因为应该对ev进行加密任何事情,尤其是在静止状态下。特别是:加密凭据并仅在实际使用时解密凭据是尽可能限制攻击面的良好做法。这听起来是真的~ish。如果您向外包的开发人员提供KMS密钥,并且KMS密钥可用于获取DB密码,那么如何阻止outso从简单使用KMS密钥和控制台获取开发人员。logging()DB密码?您没有授予外包开发人员在生产环境中运行代码的权利。他们只能在开发或登台环境(使用其他密码)中运行代码。如果您获取他们的代码并在生产环境中运行,则根本不需要修改它,因为实际凭据是“注入”的并通过KMS解密。@Digitalkapitaen我仍然不明白。你的观点与在生产中使用不同的环境变量有关。这与加密无关。如果在代码中加密的内容将由你提供的密钥解密,那么为什么首先要加密的问题仍然是。@任意的,因为应该对ev进行加密任何事情,尤其是当它处于静止状态时。特别是:加密凭据并仅在实际使用时解密凭据是尽可能限制攻击面的良好做法。