美国的胜利和悲剧。环境文件

2022-02-20 20:28:55

是时候承认自己的缺点了。env文件,以支持应用程序配置和机密管理的下一个进化步骤。

虽然env文件仍然被广泛使用,并且是在源代码中存储机密的一种改进,安全风险和对开发人员生产力的影响直到现在才完全意识到。

为了理解是什么推动了秘密管理的下一次进化转变,让我们首先回顾一下环境变量的历史以及原因。env文件在理论上是一个好主意,但产生的问题比解决的问题还多。

12因素应用程序方法论有助于定义开发和部署应用程序的现代最佳实践。可以说,最重要的“因素”是用环境变量加载的动态值替换源代码中的硬编码配置和机密。

使用环境变量对安全性来说是一个巨大的胜利,就像以前一样,任何有权访问代码的人都可以查看这些秘密。因为每个操作系统和编程语言都支持环境变量,所以不需要特殊代码或第三方库来访问它们。

“测试一个应用程序是否正确地将所有配置从代码中分离出来的试金石是,代码库是否可以在任何时候开放源代码,而不损害任何凭据。”-12因素应用III-配置

此外,由于配置现在是动态提供的,所以应用程序可以在任何环境中运行,从本地开发到生产,无需更改代码。‍ 虽然使用环境变量的安全性和部署好处是显而易见的,但缺少了一些东西:如何在环境之间管理、创建、更新、删除和同步环境变量?谁将负责管理它们?如果应用程序被错误配置,真相的来源是什么?

让我们深入了解环境变量管理的历史,了解如何进行管理。env文件试图回答这些问题。

12因素应用程序最初由Heroku的开发者在2012年起草,他们在应用程序仪表板中构建了一个名为Config Vars的功能。然后在部署期间将这些键/值对作为环境变量注入,使Heroku支持的任何语言都可以使用它们。

这证明了环境变量是app config和secrets的理想交付格式,具有简单明了的编辑用户界面。Heroku甚至还增加了每当配置变量改变时自动重新加载应用程序的功能。

所以Heroku已经为他们的客户解决了这个问题,但是其他众多的主机提供商和平台呢?

可以编写Shell脚本,在应用程序运行之前的部署过程中设置应用程序的环境变量,但这种方法是特定于应用程序和平台的,Linux和Windows需要不同的Shell语法。

就在那里。环境文件进来了。键/值对的纯文本文件,实际上只是定义变量的有效Linux shell语法。

此简单格式(限制为有效的Linux shell语法)已启用。env(dotenv)文件解析库,为每种主要编程语言(如Python dotenv和Node dotenv)创建。

然后,应用程序将使用dotenv库解析。env文件,并在应用程序启动之前自动填充该编程语言的环境变量对象。

它提供了语法、打包和跨平台的解决方案,其概念模型与Heroku的Config Vars类似,只是在服务器上的一个纯文本文件中。多亏了开源社区,每种主要语言的dotenv包都变得唾手可得。

的用法。env文件使每种语言和框架都能够采用将环境变量用于应用程序配置和机密的最佳实践。这似乎是一个完美的解决方案。

不幸地env文件带来了一系列新的安全性和开发人员生产力问题,直到最近才开始广为宣传。

现在让我们来探究原因。env文件并不是我们想要的银弹。

虽然它们是硬编码秘密的一个进步,但越来越多的安全风险和与手动管理有关的问题。跨不同环境和云提供商的env文件引起了工程领导的注意。

分享未加密的秘密。当添加或更改新机密时,如果机密暴露给未经授权查看它们的用户,则env文件过度松弛违反了最小特权原则。

当需要更新时,本地开发环境会不断中断。环境文件是';t主动沟通,例如合并拉取请求后需要的新秘密。

人工管理中的人为因素。跨环境和不同云提供商的env文件很容易导致输入错误和配置错误,从而对生产稳定性造成风险。

语言和平台之间不一致的环境变量语法很容易导致问题,例如Docker和GitHub要求值不带引号,而Python和Node则要求值不带引号。js dotenv包使用带引号或不带引号的值。这一问题如此普遍,以至于许多团队不得不采用一种新的解决方案。env file linter来解决这些语法问题。

像env文件以纯文本形式存储(不仅仅是内存中的环境变量),它们有被未经授权的用户读取的风险,并且在访问和更改方面没有审计跟踪。

更不用说不断有机器人扫描网络,寻找意外暴露的信息。公共webroot文件夹和S3存储桶中的env文件。

它';很清楚。env文件对应用程序安全有着严重的影响,但它们对开发速度的影响又如何呢?

手工管理带来的持续剪纸。对于大多数团队来说,env文件已经变得非常规范化,不再被视为一个问题。只是与现代应用程序开发相关的给定实践成本。

无法量化管理成本的团队。如果使用集中式机密管理器跨环境自动同步机密,env文件将失去宝贵的时间和金钱,而这些时间和金钱本可以节省。

由…引起的中断。与env文件相关的问题也会带来重大且难以量化的成本,因为它会打破开发人员在流程或深度工作状态下的集中度。假设这项研究估计每一次严重中断平均损失23分钟是正确的,那么时间和动量的损失是由以下原因造成的。与env文件相关的中断比之前认为的更严重。

高绩效的团队开始意识到依靠技术的真正成本。用于管理应用程序配置和机密的env文件。

他们';我们正在寻找一种新型的秘密管理平台,旨在为每个云、平台和托管环境的环境变量管理带来自动化。

我们永远都有。感谢env文件将环境变量用于应用程序配置和机密引入主流。这是一个简单明了的解决方案,解决了如何将硬编码的秘密从源代码中转移到适用于每种语言的通用格式的紧迫问题。

虽然它们在过去可能对我们很有帮助,但现在是时候承认它们的严重缺点了。env文件,以迎接下一个进化步骤:使用机密管理器为机密提供集中且安全的存储。

这就是为什么我们建造多普勒消除了对。env文件,提供了一个仪表板,用于管理与每个云提供商和平台一起使用的环境变量。