【发布时间】:2015-07-17 08:29:21
【问题描述】:
我们正在对一个需要在运行时访问一些敏感数据(不同服务的 API 令牌)的应用程序(用 Node.js 编写)进行 docker 化,我找不到任何推荐的方法来处理这个问题。
一些信息:
- 敏感信息不在我们的代码库中,但它以加密格式保存在另一个存储库中。
- 在我们当前的部署中,没有 Docker,我们使用 git 更新代码库,然后通过 SSH 手动复制敏感信息。
- Docker 映像将存储在私有的自托管注册表中
我可以想到一些不同的方法,但它们都有一些缺点:
- 在构建时将敏感信息包含在 Docker 映像中。这当然是最简单的一个;但是,它使任何有权访问图像的人都可以使用它们(我不知道我们是否应该那么信任注册表)。
- 与 1 类似,但凭据位于仅数据映像中。
- 在映像中创建一个卷,该卷链接到主机系统中的目录,然后像我们现在所做的那样通过 SSH 手动复制凭据。这也很方便,但是我们不能轻易启动新服务器(也许我们可以使用 etcd 之类的东西来同步它们?)
- 将信息作为环境变量传递。但是,我们现在有 5 对不同的 API 凭证,这有点不方便。然而,最重要的是,我们需要在配置脚本(将执行以运行 Docker 映像的命令)中保留另一份敏感信息的副本,这很容易产生问题(例如,git 中意外包含凭据等)。
PS:我做了一些研究,但找不到与我的问题类似的东西。其他问题(如this one)是关于构建时所需的敏感信息;在我们的例子中,我们需要运行时的信息
【问题讨论】:
-
很难正确解决的问题。我找到的最佳解决方案是 Hashicorp 的保险库,但该项目非常新:vaultproject.io
标签: deployment docker