我已经将几个使用彼此 API 端点的 Docker 容器链接在一起。这些 API 端点受秘密保护,并在容器启动时生成。我正在寻找一种安全的方式来在这些服务之间共享这些秘密,而无需做任何静态的事情(例如硬编码)。这些服务是使用创建并链接在一起docker-compose
的,并且可以使用环境变量覆盖秘密。但是,不鼓励这种行为用于生产。
在我的情况下,分发这些秘密的最安全方式是什么?
我考虑过的事情:
- 使用将这些秘密存储为文件的中央数据容器。然后客户端可以链接到这个容器并在文件中查找秘密。
这种方法的巨大缺点是它限制了容器在同一个节点上运行。
- 在部署容器之前生成一个 包含这些随机秘密的
docker-compose
文件,这些随机秘密被硬编码到其中。
这种方法的缺点是不能简单地使用该docker-compose
文件,而是将自己限制在 bash 脚本中来生成与这些机密一样关键的任务。这也不符合我的旁注,即解决方案应该动态地适应秘密变化。
边注
最终,如果解决方案也可以动态适应秘密变化,我会更喜欢它。例如,当一个容器发生故障时,它会自动重启,从而也产生一个新的秘密。