为什么 Docker Secrets 被认为是安全的?

Why are Docker Secrets considered safe?

我阅读了有关 docker swarm secrets 的信息,也做了一些测试。 据我所知,秘密可以替换 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 secret 直接写到 docker-compose.yml 文件里更安全?

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

A docker secret 反过来会加密 managers 磁盘上的 secret,仅将它存储在需要该 secret 的 worker 的内存中(容器中可见的文件是一个存储在 ram 中的 tmpfs ),并且在 docker inspect 输出中不可见。

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

另请注意,您可以在 docker 容器内配置一个秘密,使其只能由特定用户读取,例如根。然后,您可以作为非特权用户放弃对 运行 应用程序的权限(gosu 之类的工具对此很有用)。因此,防止秘密被破坏容器内应用程序的攻击者读取是可行的,这对于环境变量来说就不那么微不足道了。

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

查看此博客:Introducing Docker Secrets Management