2

我已经设置了 Hashicorp Vault 的实例。我已经成功地写入和读取了它的秘密。让 Vault 启动并运行,这很容易。现在,如何使用 Vault 作为存储来替换 docker-compose.yml 中的 .env 文件?如何从 Vault 中读取所有 docker-compose 文件中的机密信息?

更困难的是:如何动态生成密钥以访问 Vault 中的机密,然后在我的 docker-compose.yml 文件中使用这些密钥,而无需在每次重新启动堆栈时编辑这些文件?该过程如何自动化?简而言之,我究竟如何利用 Hashicorp Vault 来保护 .env 文件中暴露的秘密?

我已经阅读了他们所有的文献和博客文章,但无法找到任何概述该过程的内容。我被卡住了,任何提示将不胜感激。

注意:这不是关于使用 docker-compose 运行 Hashicorp Vault 容器的问题,我已经成功地做到了。

另请注意:我不能修改容器本身;我只能修改 docker-compose.yml 文件

4

1 回答 1

0

您需要查询 Vault API 以填充您的.env文件或容器的入口点。我最喜欢的是容器入口点,最好是直接在您的应用程序中。原因是保管库机密可能是短暂的,任何运行时间超过该时间段的容器都需要刷新它的机密。

如果您在入口点执行此操作的最坏情况,那么您会想到一些工具。来自 Kelsey Hightower 的confd和gomplate

confd可以作为守护进程运行,并在配置更改时重新启动容器内的应用程序。我唯一担心的是它是一个较旧且维护较少的项目。

gomplate将由您的入口点运行以扩展具有所需值的模板文件。env.sh如果您需要环境变量,该文件可能只是您然后将其源到您的环境中。或者您可以在命令行中将其作为子shell 运行,例如

your-app --arg "$(gomplate ...sometemplate...)"

如果您只使用这些工具设置一次值然后启动您的应用程序,请确保配置运行状况检查和/或在凭据过期时正常退出您的应用程序。然后使用编排(Kubernetes/Swarm 模式)运行您的容器或设置重启策略,以便在任何凭证过期后重新启动以获取新凭证。

于 2020-03-05T19:18:01.613 回答