我们将一个应用程序(用Node.js编写)停靠,这个应用程序需要在运行时访问一些敏感数据(不同服务的API令牌),我找不到任何推荐的方法来处理它.
一些信息:
我可以想到一些不同的方法,但它们都有一些缺点:
PS:我做过一些研究,但找不到与我的问题类似的东西.其他问题(如此问题)是关于构建时所需的敏感信息; 在我们的例子中,我们需要在运行时获取信息
我过去曾使用您的选项 3 和 4 来解决此问题。改写/详细说明:
在映像中创建一个链接到主机系统中的目录的卷,然后通过 SSH 手动复制凭据,就像我们现在所做的那样。
我使用配置管理(Chef 或 Ansible)在主机上设置凭据。如果应用程序采用需要 API 令牌或数据库凭据的配置文件,我会使用配置管理从模板创建该文件。Chef 可以从加密的数据包或属性中读取凭据,在主机上设置文件,然后使用您所描述的卷启动容器。
请注意,在容器中您可能需要一个包装器来运行应用程序。包装器将配置文件从卷安装的任何位置复制到应用程序期望的位置,然后启动应用程序。
将信息作为环境变量传递。然而,我们现在有 5 对不同的 API 凭证,这使得这有点不方便。然而,最重要的是,我们需要在配置脚本(将执行以运行 Docker 映像的命令)中保留敏感信息的另一个副本,这很容易产生问题(例如,凭证意外包含在 git 中等)。
是的,使用语法传递一堆环境变量很麻烦-e key=value,但这是我更喜欢的方式。请记住,这些变量仍然会向任何有权访问 Docker 守护进程的人公开。如果您的docker run命令是以编程方式编写的,那就更容易了。
如果没有,请使用Docker 文档中--env-file讨论的标志。您创建一个包含键=值对的文件,然后使用该文件运行一个容器。
$ cat >> myenv << END
FOO=BAR
BAR=BAZ
END
$ docker run --env-file myenv
Run Code Online (Sandbox Code Playgroud)
myenv可以使用上面描述的 Chef/config 管理来创建该文件。
如果您在 AWS 上托管,则可以在此处利用 KMS。通过 KMS 加密 env 文件或配置文件(传递到卷中的容器)。在容器中,使用包装器脚本调用 KMS、解密文件、将其移入到位并启动应用程序。这样配置数据就不会暴露在磁盘上。
| 归档时间: |
|
| 查看次数: |
615 次 |
| 最近记录: |