立即停止使用 .env 文件!
目录
你好,读者👋🏽
我曾在大型企业系统上工作过,但令我失望的是,99% 的 JavaScript 教程都告诉你使用.env
生产配置和秘密,这很愚蠢。
是时候纠正这种困扰社区的行为了。让我们来探讨一下文件的问题.env
以及最终的解决方案。
.env 文件的问题
1. 存储 .env 文件
问题是……它是一个文件。你不应该把你的“生产”文件存储在你的仓库里;你把它放在哪里?直接放在虚拟机根目录下吗?Docker 容器呢?你的机密信息是直接放在镜像里吗?如果镜像泄露,每个人都能访问你的机密信息。
2. 更新秘密配置
如果需要更新数据库密码,会发生什么?更新数据库的人.env
将有权访问文件中的所有机密信息。我甚至不需要解释这有什么不好。每次需要更新配置时,更新数据库的人都可以看到所有机密信息。
3. 版本控制
假设您正在部署一项新功能,需要更新您的配置/秘密变量,如果出现问题,应用程序就会回滚。
哦,有人记得我们最后保存的值.env
吗?我们没有历史记录,而应用程序需要我们刚刚删除/覆盖的值。
配置服务器来救援🦸♂️
解决所有这些问题的完美方案是使用配置服务器。配置服务器是一个用于存储配置和机密信息的外部化应用程序。它被认为是跨环境管理机密信息的中央枢纽。
对于我的开源爱好者来说,多种云服务可以充当配置服务器,例如AWS Parameter Store、Google Secrets Manager或HashiCorp Vault 。
一旦您创建了秘密或配置,大多数情况下您会获得一个类似的 URL https://app.com/config/DB_PASSWORD/v1
。
让我们看看配置服务器如何解决所有文件问题.env
。
解决:1.存储.env文件
使用配置服务器,所有秘密都集中在一个地方,加密,并且只能由您批准的应用程序和用户访问。
解决:2. 更新秘密
使用配置服务器,您无需更新密钥,而是创建一个新版本。创建新版本后,您可以像.../config/DB_PASSWORD/v2
或 一样更新密钥 URL .../config/DB_PASSWORD/v3
。
解决方案:3. 版本控制
与方案二类似,大多数配置服务器都具有自动版本控制功能。如果您需要更新 secret,请创建一个新版本,并在应用程序中更新配置 URL。如果应用程序回滚,它将自动使用您上次使用的配置 URL。
这样,秘密就受到保护,并且您的应用程序可以回滚,而不会出现与以前的秘密相关的问题。
配置服务器的更多优点
自动秘密轮换
机密信息可能会过期,从而导致您的系统受到威胁!像 AWS 这样的集中式配置提供了自动机密信息轮换功能。
如果您的团队或组织都拉取相同的配置,它们将自动更新为最新值。无需通过 Slack 发送,无需寻求“可信赖的”开发人员,也不用担心忘记更新某个文件.env
。轻松便捷!
VPC 终端节点
配置服务器通常托管在 VPC 上,它为您的服务提供类似本地主机的连接。这使得您可以无需连接互联网(几乎没有延迟)即可获取机密信息,也不允许外部人员查询服务器。
审计日志
机密泄露了吗?配置服务器通常会记录审计日志,以便您可以检查机密何时何地被访问。
更新配置会导致错误吗?请检查上次更新时间,如有必要,请为所有服务执行全局更新。无需编辑纯文本文件。
最后的想法💭
我希望现在开发人员开始为他们的生产服务使用集中式配置。.env
文件不可靠,并且没有访问管理、版本控制或安全更新。
我并不是说.env
文件没有用途。它们可以用于本地或面向开发的环境。
我想说的是,不要将有价值的秘密存储在简单的文件中,特别是如果我的数据在您的服务中。
关于作者👨🏾💻
我是 Gregory Gaines,一位来自 Google 的普通软件工程师,致力于撰写优质文章。如果您想了解更多内容,请在 Twitter 上关注我:@GregoryAGaines。
现在就去创造伟大的东西吧!如果你有任何问题,可以在 Twitter 上联系我 ( @GregoryAGaines );我们可以一起探讨。
感谢阅读!
文章来源:https://dev.to/gregorygaines/stop-using-env-files-now-kp0