13

我阅读了有关docker swarm 的秘密并进行了一些测试。据我了解,这些秘密可以替换 docker-compose.yml 文件中提供的敏感环境变量(例如数据库密码)。结果,当我检查 docker-compose 文件或正在运行的容器时,我看不到密码。这很好 - 但它真正有什么帮助?

如果攻击者在我的 docker 主机上,他可以轻松查看 /run/secrets

docker exec -it df2345a57cea ls -la /run/secrets/

并且还可以查看里面的数据:

docker exec -it df27res57cea cat /run/secrets/MY_PASSWORD

同一个攻击者通常可以在正在运行的容器上打开一个 bash 并查看它是如何工作的......

此外,如果攻击者在容器本身上,他可以环顾四周。

所以我不明白为什么docker secrets更安全,就好像我直接将它们写入docker-compose.yml文件一样?

4

2 回答 2

24

存储在 中的秘密在docker-compose.yml该文件中是可见的,它也应该被检入到版本控制中,其他人可以看到该文件中的值,并且它将在docker inspect容器上的命令中可见。从那里,它也可以在您的容器内看到。

相反,docker secret 将加密管理器上磁盘上的秘密,仅将其存储在需要秘密的工作人员的内存中(容器中可见的文件是存储在 ram 中的 tmpfs),并且在docker inspect输出中不可见.

这里的关键部分是您在版本控制系统之外保密。使用 Docker EE 的 RBAC 之类的工具,您还可以通过删除任何不需要访问的人docker exec进入生产容器的能力或在生产环境中使用 docker secret 来保护机密信息。可以做到这一点,同时仍然让开发人员能够查看日志和检查生产支持可能需要的容器。

另请注意,您可以将 docker 容器内的机密配置为仅可由特定用户(例如 root)读取。然后,您可以放弃以非特权用户身份运行应用程序的权限(类似的工具gosu对此很有用)。因此,防止秘密被破坏容器内应用程序的攻击者读取是可行的,这对于环境变量来说就不那么简单了。

于 2018-01-07T21:21:19.177 回答
0

Docker Secrets 用于 Swarm,而不是用于具有一些容器的一个节点或用于一台机器的 Docker-Compose(虽然它可以使用,但主要不是用于此目的)。如果您有多个节点,那么 Docker Secrets 比将您的秘密部署在多个工作机器上更安全,仅部署到需要该秘密的机器,具体取决于哪个容器将在那里运行。

请参阅此博客:介绍 Docker 机密管理

于 2021-07-07T03:17:44.960 回答