在 .env 文件中存储私有值是否安全?
Is it secure way to store private values in .env file?
我正在尝试使用 express 框架构建一个 node.js 服务器,我想在我的服务器中存储管理 API 的私钥。
我现在正在使用 .env 文件存储这些值,并在我的路线中,通过像 process.env.ADMIN_KEY
这样的调用来使用这些值。
问题
它是处理私人数据的安全方式吗?或者还有比这更好的方法?
简单的回答是是,.env 用于存储密钥和秘密。它不会被推送到您的仓库,即 github 或 bitbucket 或您存储代码的任何地方。这样就不会暴露了。
以下是正确使用的教程链接:
是。可以使用加密值添加额外的安全检查。还要避免在 public 存储库中签入您的 .env 文件。
您可以而且应该将秘密、凭据或私人数据安全地存储在 .env
是您项目中的安全环境配置部分,可用于存储 API 密钥和应用凭据。只有受邀的协作者才能看到您的 .env
文件的内容。
将您的秘密存储在 .env 文件中比在源代码本身中更安全。但是你可以做得更好。以下是我见过的机密管理方式,从最不安全到最安全:
在代码中硬编码秘密。
- 优点:None。不要这样做。
- 缺点:您的开发人员会将您的生产机密视为他们日常工作的一部分。您的秘密将被检查到源代码管理中。两者都是安全风险。此外,您必须修改代码以在不同的环境中使用它,例如开发、测试和生产。
将秘密放在环境变量中,从 .env 文件加载。
- 优点:开发人员不会看到您的生产机密。您可以在开发、测试和生产中使用不同的秘密,而无需修改代码。
- 缺点:恶意代码可以读取您的秘密。您应用程序的大部分代码可能是开源库。错误的代码可能会在您不知情的情况下悄悄潜入。
将秘密放入专用的秘密管理器中,例如 Google Cloud 的 Vault by HashiCorp or Secret Manager。
- 优点:恶意代码更难读取您的机密信息。您可以审核谁在何时访问了机密。您可以为谁更新机密以及谁可以读取机密分配细粒度的角色。您可以更新您的机密并对其进行版本控制。
- 缺点:这是您学习的额外技术。它可能是您需要设置和管理的额外软件,除非它包含在您使用的云平台中。
所以选择实际上是在上面的第 2 项和第 3 项之间。您选择哪一个将取决于您的秘密有多敏感以及使用专门的秘密管理器需要多少额外工作。例如,如果您的项目是 Google Cloud Platform 上的 运行,则 Secret Manager 就是 one API call away。在其他主要的云平台上可能也一样容易,但我没有第一手的经验。
我正在尝试使用 express 框架构建一个 node.js 服务器,我想在我的服务器中存储管理 API 的私钥。
我现在正在使用 .env 文件存储这些值,并在我的路线中,通过像 process.env.ADMIN_KEY
这样的调用来使用这些值。
问题
它是处理私人数据的安全方式吗?或者还有比这更好的方法?
简单的回答是是,.env 用于存储密钥和秘密。它不会被推送到您的仓库,即 github 或 bitbucket 或您存储代码的任何地方。这样就不会暴露了。
以下是正确使用的教程链接:
是。可以使用加密值添加额外的安全检查。还要避免在 public 存储库中签入您的 .env 文件。
您可以而且应该将秘密、凭据或私人数据安全地存储在 .env
是您项目中的安全环境配置部分,可用于存储 API 密钥和应用凭据。只有受邀的协作者才能看到您的 .env
文件的内容。
将您的秘密存储在 .env 文件中比在源代码本身中更安全。但是你可以做得更好。以下是我见过的机密管理方式,从最不安全到最安全:
在代码中硬编码秘密。
- 优点:None。不要这样做。
- 缺点:您的开发人员会将您的生产机密视为他们日常工作的一部分。您的秘密将被检查到源代码管理中。两者都是安全风险。此外,您必须修改代码以在不同的环境中使用它,例如开发、测试和生产。
将秘密放在环境变量中,从 .env 文件加载。
- 优点:开发人员不会看到您的生产机密。您可以在开发、测试和生产中使用不同的秘密,而无需修改代码。
- 缺点:恶意代码可以读取您的秘密。您应用程序的大部分代码可能是开源库。错误的代码可能会在您不知情的情况下悄悄潜入。
将秘密放入专用的秘密管理器中,例如 Google Cloud 的 Vault by HashiCorp or Secret Manager。
- 优点:恶意代码更难读取您的机密信息。您可以审核谁在何时访问了机密。您可以为谁更新机密以及谁可以读取机密分配细粒度的角色。您可以更新您的机密并对其进行版本控制。
- 缺点:这是您学习的额外技术。它可能是您需要设置和管理的额外软件,除非它包含在您使用的云平台中。
所以选择实际上是在上面的第 2 项和第 3 项之间。您选择哪一个将取决于您的秘密有多敏感以及使用专门的秘密管理器需要多少额外工作。例如,如果您的项目是 Google Cloud Platform 上的 运行,则 Secret Manager 就是 one API call away。在其他主要的云平台上可能也一样容易,但我没有第一手的经验。