我正在尝试找出 Web 应用程序配置的最佳方法。目标是:
- 可配置性。强制在部署时指定配置。确保配置与代码或可部署工件分开。
- 安全。防止秘密从部署环境中泄露。
- 简单。确保解决方案简单,并且对 OS 进程的概念很自然。
- 灵活性。不对配置的存储位置做任何假设。
根据12 因素应用程序Web 应用程序配置最好在环境变量中提供。它简单灵活,但看起来有一些与此相关的安全问题。
另一种方法可能是将所有配置作为命令行参数传递。这对操作系统来说又是简单、灵活和自然的,但整个配置随后在主机的进程列表中可见。这可能是也可能不是问题(我不是操作系统专家),但至少解决方案很麻烦。
流行的框架Dropwizard采用混合方法,其中命令行参数指定配置文件位置,并从那里读取配置。问题是它打破了对我的配置(本地文件)位置的假设的灵活性约束。它还使我的应用程序实现了文件访问,虽然这在大多数语言/框架/库中通常很容易实现,但本质上并不简单。
我正在考虑另一种方法,即在应用程序的stdin
. 最终cat my-config-file.yml | ./my-web-app
,在本地存储文件甚至wget https://secure-config-provider/my-config-file.yml | ./my-web-app
. 管道似乎很简单,并且是 OS 进程的原生。它看起来非常灵活,并且将配置如何提供到主机操作系统的问题分开。
问题是它是否符合安全约束。假设一旦管道内容被消费,它就永远消失了,这是否安全?
我无法通过谷歌搜索任何尝试此操作的人,因此提出了这个问题。