如何在没有 swarm 集群的情况下使用 docker secrets?

Jua*_*ian 53 security docker docker-swarm

目前我们是在单个 docker 容器上运行的应用程序,该应用程序需要将各种敏感数据作为环境变量传递,

我将它们放在运行命令中,这样它们就不会出现在图像中,然后出现在存储库中,但是我最终得到了一个非常不安全的运行命令,

现在,我知道存在 docker 机密,但是,如何在不部署集群的情况下使用它们?或者有没有其他方法来保护这些数据?

此致,

Lin*_*eep 62

是的,如果您使用撰写文件,则可以使用机密。(你不需要运行一个群)。

您使用docker -compose撰写文件:docker-compose.yml 文件中有“秘密”文档

我切换到 docker-compose 因为我想使用秘密。我很高兴我做到了,它看起来更干净了。每个服务都映射到一个容器。如果你想改用运行 swarm,你基本上已经在那里了。

注意:Secrets 不会加载到容器的环境中,它们会挂载到 /run/secrets/

下面是一个例子:

1) 项目结构:

|
|---    docker-compose.yml
|---    super_duper_secret.txt
Run Code Online (Sandbox Code Playgroud)

2) docker-compose.yml 内容:

version: "3.6"

services:

  my_service:
    image: centos:7
    entrypoint: "cat /run/secrets/my_secret"
    secrets:
      - my_secret

secrets:
  my_secret:
    file: ./super_duper_secret.txt
Run Code Online (Sandbox Code Playgroud)

3) super_duper_secret.txt 内容:

Whatever you want to write for a secret really.
Run Code Online (Sandbox Code Playgroud)

4) 从项目的根目录运行此命令以查看容器确实可以访问您的机密,(必须运行 Docker 并且安装了 docker-compose):

docker-compose up --build my_service
Run Code Online (Sandbox Code Playgroud)

你应该看到你的容器输出你的秘密。

  • 只是想我会链接到将它添加到普通 docker-compose (没有群)的 PR。https://github.com/docker/compose/pull/4368 它确实在那里,从代码看来,撰写文件的最小版本是 3.1,API 是 1.13.0。代码仍在当前主版本中(https://github.com/dnephin/compose/blob/8c4fc4bc2ed82648f7a6ab7e14a492368f997415/compose/config/config.py#L234),因此不会期望最大版本。 (8认同)
  • Docker 机密仅适用于 swarm 服务,不适用于独立容器。要使用此功能,请考虑调整您的容器以作为服务运行。有状态容器通常可以在不更改容器代码的情况下以 1 的比例运行。[docker](https://docs.docker.com/engine/swarm/secrets/) (3认同)
  • 我创建了一个以 mysql 为要点的示例:https://gist.github.com/ronaldb/d4b3d3327a5f80bfd12d748ca0ae91ae - 与 cat 的想法相同,但使用了更实际的应用程序。 (2认同)
  • 为什么有人会这样做,在没有 swarm 的情况下,效果与绑定安装相同,但具有(可以说)更复杂的配置?答案在于 **兼容性** 和 **可预测性**:您的大多数服务 yaml 都会以相同的方式工作(也许您已经[模块化](https://docs.docker.com/compose/reference/#specifying -multiple-compose-files) it) 适用于单引擎和集群模式。容器内的软件可以假设在哪里可以找到秘密“/run/secrets”(默认情况下是只读的,顺便说一句),而不是每个应用程序都提出自己的“标准”安装点。 (2认同)

yie*_*eld 9

你不能......它不支持没有 Swarm 的秘密。除非“可能是”你“Swarm”只使用一个节点。

另一种解决方案是,我认为使用像这样的第三方保险库软件:

https://www.vaultproject.io/

但是,要使用来自 Vault 的容器中的机密,您需要阅读文档。

希望这能让你走上正确的道路。