Security 如何在Docker容器之间共享动态生成的秘密

Security 如何在Docker容器之间共享动态生成的秘密,security,docker,docker-compose,shared-secret,Security,Docker,Docker Compose,Shared Secret,我已经链接了两个Docker容器,它们彼此使用API端点。这些API端点受机密保护,并且在容器启动时生成。我正在寻找一种安全的方法,在这些服务之间共享这些秘密,而不做任何静态操作(例如硬编码)。这些服务使用docker compose创建并链接在一起,并且可以使用环境变量覆盖机密。然而,这种行为不鼓励用于生产 在我的情况下,传播这些秘密最安全的方式是什么? 我考虑过的事情: 使用将这些机密存储为文件的中央数据容器。然后,客户端可以链接到此容器并在文件中查找机密 这种方法的一个巨大缺点是它限

我已经链接了两个Docker容器,它们彼此使用API端点。这些API端点受机密保护,并且在容器启动时生成。我正在寻找一种安全的方法,在这些服务之间共享这些秘密,而不做任何静态操作(例如硬编码)。这些服务使用
docker compose
创建并链接在一起,并且可以使用环境变量覆盖机密。然而,这种行为不鼓励用于生产

在我的情况下,传播这些秘密最安全的方式是什么?


我考虑过的事情:
  • 使用将这些机密存储为文件的中央数据容器。然后,客户端可以链接到此容器并在文件中查找机密
这种方法的一个巨大缺点是它限制了容器在同一节点上运行

  • 在部署容器之前,生成一个带有这些随机密码的
    docker compose
    文件
这种方法的缺点是,不可能简单地使用
docker compose
文件,而是将自己局限于bash脚本来生成与这些机密一样重要的任务。这也不符合我的旁注,即解决方案应该动态地适应秘密更改


旁注
最终,如果解决方案也能够动态地适应秘密更改,我会更喜欢它。例如,当一个容器出现故障时,它将自动重新启动,从而也会生成一个新的机密。

在第三个容器中运行类似于
etcd
的操作,并将其用作机密注册表?这将为您提供所需的动态更新,并且不会将您限制在同一主机上的容器中。Concur是etcd的一个类似选项,它们都旨在启用应用程序组件的后期绑定,从而避免需要静态配置。您还应该看看vault,它可以使用领事作为其HA后端。@MarkO'Connor如何为每个节点创建一个领事实例,然后将其链接到该节点上的所有服务?我说的是Docker,看:@MarkO'Connor,谢谢