Docker 机密是否比绑定安装提供任何额外的安全性?

Der*_*ers 5 docker devops docker-secrets

据我了解,Dockersecrets和挂载(绑定和卷)都是在 Docker 容器内管理机密的安全方法。我想知道是否secrets有任何安全优势?

我有一组任意大小的秘密。这些秘密保存在文件夹中的单独文件中。它们会定期自动更改。我想让它们全部可供 Docker 容器使用。使用绑定挂载,我可以挂载它们的文件夹,并且它们都可以访问。使用secrets,我必须在 Docker Compose 文件中指定每一项,从而增加耦合性并降低可维护性。我有什么理由应该选择以牺牲secrets可维护性为代价来选择它吗?

slh*_*hck 5

我最近也有同样的想法,不想实际使用 Docker Swarm 或运行任何分布式的东西。就我而言,起点是一个使用.env包含秘密的项目。如果您有一个简单的 Docker Compose 项目,则使用通过docker secret. 请注意,如果没有真正成为 Swarm 管理员,您甚至无法使用docker secret!创建秘密。

许多人不知道的是,Docker Compose 实际上与 Docker Swarm 一样支持挂载机密,但它仅适用于本地文件。所以将是一个有效的 Docker Compose 配置:

version: "3.9"

services:
   db:
     image: mysql:latest
     volumes:
       - db_data:/var/lib/mysql
     environment:
       MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD_FILE: /run/secrets/db_password
     secrets:
       - db_root_password
       - db_password

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD_FILE: /run/secrets/db_password
     secrets:
       - db_password

secrets:
   db_password:
     file: db_password.txt
   db_root_password:
     file: db_root_password.txt

volumes:
    db_data:
Run Code Online (Sandbox Code Playgroud)

除了将卷和其他类型的配置(通过 env)与机密分开这一事实之外,您实际上并没有在这里获得很多额外的安全性或附加值,这提供了一些额外的保护措施,防止意外提交存储库的秘密,或者将错误的文件安装到错误的容器等。


Mr.*_*Mr. -1

如果你不使用 swarm,它对你来说没有任何用处。

Docker 机密仅适用于集群服务,不适用于独立容器。

使用秘密有以下优点

秘密在传输过程中以及在 Docker 群中静止时被加密。

您可以利用 docker compose 中的 Secrets,无论 Swarm 如何,它都会将Secrets功能引入容器。docker compose 只是提供了一个很好的界面\facede,用于安装秘密文件并将其以其命名约定暴露给容器。