【问题标题】:Use Docker environment variables for credentials使用 Docker 环境变量获取凭据
【发布时间】:2016-04-07 08:39:26
【问题描述】:

最近我们正在尝试找到一种通过环境变量将凭据注入到我们在容器中运行的基于 Spring 的应用程序的正确方法。

具体流程包括

  • 一个引导 shell 脚本,docker CMD 作为入口点运行
  • 在脚本中导出一堆凭据
  • 在脚本文件末尾运行应用程序

通过这种方式,docker inspectdocker exec [container_id] env 或 bash 进入 docker 容器并运行 env 都不会看到这些环境变量,即。我们注入的引导脚本是不透明的。

所以问题是:对于这个解决方案,我们还应该考虑其他什么吗?有什么明显的毛病吗?

我们对 docker 世界还很陌生,所以这种关于通过 shell 脚本注入环境变量的行为从那以后就看不到了,是否有任何文档解释原因?我们还没有找到一个好的文档,但只是发现它以这种方式工作

附言。 docker 将来会改变这种行为吗?

提前致谢!

【问题讨论】:

  • 脚本存放在哪里?主机上的文件?还是将其构建到图像中?能看到脚本源文件有问题吗?
  • 脚本存储在镜像中,此外,我们使用了 HashiCorp Consul 和 Vault,因此脚本调用本地 Vault 命令从其他 Consul 容器中检索凭据,这一切都发生在容器运行时启动,即。图像中的脚本没有凭据

标签: docker docker-compose dockerfile


【解决方案1】:

总体而言,这看起来是一个非常好的方法。

但是,我认为您无法对有权检查进程环境的人完全隐藏环境变量。在我看来,如果您找到应用程序进程的进程 id(在容器内或从主机),您应该能够在 /proc 中找到它的环境。不会显示为docker env,但它仍然在某处。 此外,任何这样的人都可能直接连接到您的 Vault。

意思是,是的,这确实不会使子进程的环境出现在容器环境中,但它并没有真正向任何人隐藏它(谁已经可以访问您的主机并控制 docker)。

不过,还是恭喜你完成了这个设置。比在图像中内置凭据要好得多。

【讨论】:

  • 我们会从那里对主机或容器内部进行未经授权的访问。 Idea 在主机级别限制用户使用某些特定的 docker 命令(可能需要自定义代码),例如。 docker exec [id] bash
  • @JamesJiang @Thilo 从主机(或容器)获取 Docker 进程的环境相当容易。只需使用ps aux 查找进程ID,并使用cat /proc/id/environ 获取所有环境变量。另外,如果用户可以运行docker 命令,他很可能也拥有sudo 权限。
  • @warmoveflow 同意检查 /prod/id/environ 中的这些变量是获取凭据的有效方式。但是,您不必担心在构建时从 docker 映像中泄漏凭据,也不必担心容器运行时中的可检查环境变量,即。现在,这个问题从容器本身转移到了主机。如果主机没有暴露在公共网络中,但受到防火墙或私有网络以及用户权限的良好保护,这应该是一个可行的解决方案吧?
  • 是的,这就是我们所说的:a) 您无法保护具有主机访问权限的人的凭据 b) 您的方法可以很好地保护其他人的凭据(这取决于您如何保护Vault) -- env 没有直接出现在 docker env 中是无关紧要的
【解决方案2】:

有趣的发现。我认为这是因为环境变量是运行应用程序的 shell 会话的本地变量。见https://help.ubuntu.com/community/EnvironmentVariables

进程位置

环境变量的值是本地的,这意味着它们是 特定于设置它们的运行进程。这个 意味着如果我们打开两个终端窗口(这意味着我们有两个 单独运行的 bash 进程),并更改环境的值 在其中一个窗口中的变量,该更改将不会被 另一个窗口中的 shell 或当前在 桌面。

关于风险,https://github.com/docker/docker/pull/9176#issuecomment-99542089 这里有很好的讨论。例如,您可能在打印或记录环境的同一会话中调试应用程序,任何子进程也会看到环境变量。

【讨论】:

    猜你喜欢
    • 2020-04-10
    • 2021-12-19
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 2019-07-26
    相关资源
    最近更新 更多