在 Yesod 和 Keter 中传递应用程序机密
Passing app secrets in Yesod and Keter
我正在使用 Yesod 构建一个 Web 应用程序,目前正在通过环境变量(根据 The Twelve-Factor App)传递诸如 API 密钥之类的秘密,以避免将这些值存储在版本控制的配置中文件。例如,我 运行 我的应用程序在开发模式下如下:
SOME_API_KEY=value yesod devel
我的 config/settings.yml
文件中有一个根据此环境变量定义的值为空的值,如下所示:
meetup-api-key: "_env:SOME_API_KEY:"
为了使用 Keter 进行部署,我正在使用 yesod keter
命令构建 Keter 包并将生成的文件放入 Keter 的 incoming
目录中。由于我使用的是环境变量配置,因此我应用程序的 .keter
文件不包含 SOME_API_KEY
值(这是故意的)。
我应该如何将 SOME_API_KEY
传递到我在 Keter 中 运行ning 的应用实例?
至少出于以下三个原因,我想避免将值烘焙到我的 keter-config.yaml
中:
- 它不如环境变量方法安全。
- 直接嵌入到 Keter 本身的配置文件中,而不是应用程序的配置,如果不停止并重新启动整个 Keter 进程,则无法更改密码。
- 环境变量被传递到 每个 由 Keter 管理的应用程序。
我希望有一些 "best practices" 可以解决这个问题。
将您的秘密设置为服务器上的环境变量,并使用 config/keter.yml
中的 forward-env
将它们“转发”到您的应用程序,如以下补丁所示:https://github.com/snoyberg/keter/commit/9e9fca314fb78860fb5c9b08cad212d92b0b20d4
我正在使用 Yesod 构建一个 Web 应用程序,目前正在通过环境变量(根据 The Twelve-Factor App)传递诸如 API 密钥之类的秘密,以避免将这些值存储在版本控制的配置中文件。例如,我 运行 我的应用程序在开发模式下如下:
SOME_API_KEY=value yesod devel
我的 config/settings.yml
文件中有一个根据此环境变量定义的值为空的值,如下所示:
meetup-api-key: "_env:SOME_API_KEY:"
为了使用 Keter 进行部署,我正在使用 yesod keter
命令构建 Keter 包并将生成的文件放入 Keter 的 incoming
目录中。由于我使用的是环境变量配置,因此我应用程序的 .keter
文件不包含 SOME_API_KEY
值(这是故意的)。
我应该如何将 SOME_API_KEY
传递到我在 Keter 中 运行ning 的应用实例?
至少出于以下三个原因,我想避免将值烘焙到我的 keter-config.yaml
中:
- 它不如环境变量方法安全。
- 直接嵌入到 Keter 本身的配置文件中,而不是应用程序的配置,如果不停止并重新启动整个 Keter 进程,则无法更改密码。
- 环境变量被传递到 每个 由 Keter 管理的应用程序。
我希望有一些 "best practices" 可以解决这个问题。
将您的秘密设置为服务器上的环境变量,并使用 config/keter.yml
中的 forward-env
将它们“转发”到您的应用程序,如以下补丁所示:https://github.com/snoyberg/keter/commit/9e9fca314fb78860fb5c9b08cad212d92b0b20d4