Docker 机密管理 – 从零开始

背景

在前端开发中,我们经常需要处理一些私密信息,例如 API 密钥、数据库用户密码等等。当我们将应用程序部署到生产环境中时,需要保证这些私密信息不会被泄漏到外部环境中,否则可能导致应用程序被攻击、滥用等安全问题。

Docker 是一项非常流行的容器化技术,它为我们提供了一种高效、可靠、可移植的应用程序部署解决方案。在 Docker 中,我们需要尤其关注机密管理,以保证我们的应用程序在容器中运行时,私密信息不会被泄漏。

Docker 机密管理

Docker 提供了三种机密管理方式:

  1. 环境变量: 将机密信息存储在环境变量中,并在容器中使用。这种方式非常简单,但是存在泄漏风险,因为环境变量可以被检索到和泄漏。
  2. 挂载文件: 将机密信息存储在一个文件中,并在容器中通过挂载到一个位于容器内部的卷上,并在应用程序中使用。这种方式比环境变量更加安全,因为容器内外的文件系统是分离的。
  3. Docker 密钥管理服务 (Docker Secret): Docker 1.13 版本引入,提供了一种安全地存储机密信息的方式,以及在容器内部使用这些机密信息的机制。

本文将详细介绍 Docker 密钥管理服务 (Docker Secret)。

Docker Secret

Docker Secret 是 Docker 中内置的一种机密管理工具,它允许开发人员将私密信息安全地存储在 Docker 主机的文件系统中。Docker 主机上的敏感信息被存储在单独的安全区域中,并受主机的访问控制机制保护。

创建 Docker Secret

创建 Docker Secret 的命令如下:

上述命令会创建一个名为 my_secret_password 的 Docker Secret,其中存储了 mysecretpassword 这个机密信息。

在容器中使用 Docker Secret

在容器内部使用 Docker Secret 的方式如下:

  1. 将 Docker Secret 挂载到容器中:

  2. 在应用程序中使用 Docker Secret:

    const fs = require('fs');
    const password = fs.readFileSync('/run/secrets/my_secret_password', 'utf8').trim();
    
    console.log('password:', password);

上述代码演示了如何在应用程序中读取 Docker Secret 的值,并使用它进行认证等操作。需要特别注意的是,在使用 Docker Secret 时,需要将文件路径指定为 /run/secrets/ 目录下的相对路径。

使用 Docker Stack 部署服务

在使用 Docker Stack 部署服务时,可以在 Compose 文件中定义 Secret:

version: '3.0'
services:
  myservice:
    image: myimage
    secrets:
      - my_secret_password

secrets:
  my_secret_password:
    file: ./secrets/my_secret_password.txt

上述代码定义了一个名为 my_secret_password 的 Secret,它从文件系统中的 ./secrets/my_secret_password.txt 文件读取机密信息。在容器部署时,Docker 将会自动将该 Secret 挂载到容器中,并在应用程序内部使用。

总结

在本文中,我们介绍了 Docker 密钥管理服务 (Docker Secret) 的基本概念、创建方式和使用方式,并展示了如何在应用程序中使用 Docker Secret 进行认证等操作。Docker Secret 提供了一种安全、可靠的机密管理方式,可以帮助我们更好地保护应用程序的私密信息。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65925034eb4cecbf2d7272d8


纠错反馈