在阅读了作者提出反对使用环境变量存储机密的论点的这篇博文后,我不确定如何继续部署我的应用程序。
他的主要论点如下:
鉴于环境对进程隐式可用,即使不是不可能,也很难跟踪访问以及内容是如何暴露的 (ps -eww )。
让应用程序获取整个环境并将其打印出来以进行调试或错误报告是很常见的。如此多的秘密被泄露给 PagerDuty,以至于他们有一个很好的内部流程来清除他们的基础设施。
环境变量被传递给子进程,这允许意外访问。这违反了最小特权原则。想象一下,作为应用程序的一部分,您调用第三方工具来执行某些操作——突然间,第三方工具可以访问您的环境,天知道它会用它做什么。
当应用程序崩溃时,它们通常会将环境变量存储在日志文件中以供以后调试。这意味着磁盘上的纯文本机密。
将秘密放入 ENV 变量中,很快就会变成部落知识。不了解特定环境变量敏感性的新工程师将不会适当/小心地处理它们(将它们过滤到子流程等)。
这些对我来说似乎很合理,但我不是安全专业人士。他的替代建议是使用 Docker 的保密功能,但这是假设您使用的是 Docker ......我不是。我在 Heroku 上。所以我现在有点不确定。似乎没有任何支持在 Heroku 上使用 Vault,据我所知。