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

Ral*_*lph 5 security docker docker-secrets

我读到了有关码头群的秘密,并做了一些测试.据我所知,秘密可以替换docker-compose.yml文件中提供的敏感环境变量(例如数据库密码).因此,当我检查docker-compose文件或正在运行的容器时,我将看不到密码.那很好 - 但它真的有用吗?

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

docker exec -it df2345a57cea ls -la /run/secrets/
Run Code Online (Sandbox Code Playgroud)

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

docker exec -it df27res57cea cat /run/secrets/MY_PASSWORD
Run Code Online (Sandbox Code Playgroud)

同一个攻击者大多可以在正在运行的容器上打开一个bash,看看它是如何工作的....

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

所以我不明白为什么docker机密更安全,好像我把它们直接写入docker-compose.yml文件?

BMi*_*tch 14

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

相反,docker机密会加密管理器上磁盘上的密码,只将它存储在需要秘密的工作程序的内存中(容器中可见的文件是存储在ram中的tmpfs),并且在docker inspect输出中不可见.

这里的关键部分是你在版本控制系统之外保守秘密.使用Docker EE的RBAC等工具,您还可以通过删除docker exec生产容器或使用生产环境中的docker机密的能力来保护不需要访问权限的任何人的机密信息.这可以在让开发人员能够查看日志和检查生产支持所需的容器的同时完成.

另请注意,您可以在docker容器内配置一个秘密,只能由特定用户(例如root)读取.然后,您可以删除以非特权用户身份运行应用程序的权限(类似gosu的工具对此有用).因此,可以防止攻击者在容器内部破坏应用程序来读取秘密,这对环境变量来说不那么重要.

  • 如果有人可以执行到容器中,那么他们将可以访问您的机密。无论您如何存储它们,这都是一样的。 (2认同)