Docs 菜单

Docs 主页开发应用程序MongoDB Manual

配置加密

在此页面上

  • 概述
  • 密钥管理器
  • 本地密钥管理
  • 对现有数据进行静态加密

本页将讨论用于支持静态加密的服务器配置。如果您使用的是 MongoDB Atlas,您的数据已经被加密。MongoDB 在云提供商级别管理 Atlas 加密,但您也可以使用自己的密钥管理解决方案。有关详情信息,请参阅 Atlas 密钥管理文档

MongoDB Enterprise 3.2 为 WiredTiger 存储引擎引入了一个原生加密选项。在 Atlas 之外,加密仅适用于使用 WiredTiger 存储引擎的企业安装。

加密密钥的安全管理是存储加密的一项关键要求。MongoDB 使用一个主密钥,该密钥不会与 MongoDB 安装的文件一起存储。只有主密钥是在外部管理的,其他密钥可以与您的 MongoDB 实例一起存储。

MongoDB 的加密存储引擎支持针对主密钥的两种密钥管理选项:

  • 通过 Key Management Interoperability Protocol (KMIP) 与第三方密钥管理设备集成。推荐

  • 通过密钥文件使用本地密钥管理。

重要

MongoDB 无法加密现有数据。使用新密钥来启用加密时,MongoDB 实例不可有任何预先存在的数据。如果 MongoDB 安装已包含数据,则请参阅对现有数据进行静态加密以了解其他步骤。

MongoDB Enterprise 支持使用兼容的密钥管理设备来安全地传输密钥。使用密钥管理器可将密钥存储在密钥管理器中。

MongoDB Enterprise 支持使用遵守 Key Management Interoperability Protocol (KMIP) 的密钥管理设备来安全地传输密钥。

有关 MongoDB 认证合作伙伴的列表,请参阅合作伙伴列表

提示

推荐

使用密钥管理器符合监管密钥管理准则,例如 HIPAA、PCI-DSS 和 FERPA。而且相比本地密钥管理,密钥管理器更推荐使用。

  • 密钥管理器必须支持 KMIP 通信协议。

    默认 KMIP 协议版本是 1.2。您可以在 MongoDB 服务器的配置文件中将 MongoDB 配置为使用 KMIP 1.0 或 1.1 版本。

  • 对于使用 KMIP 与第三方密钥管理设备进行的集成,您应允许以下 KMIP 操作:

    • 创建(operation_create

    • 获取 (operation_get)

    • 激活 (operation_activate)

  • 要在 KMIP 服务器上对 MongoDB 进行身份验证,您必须拥有密钥管理设备颁发的有效证书。

注意

在 4.0 版中进行了更改

Windows 上的 MongoDB Enterprise 不再支持将 AES256-GCM 作为静态加密的分组密码算法。仅 Linux 版本支持此用法。

要在连接密钥管理器时创建新密钥,请使用以下选项启动 mongod

要连接到 1.0 或 1.1 版本的 KMIP 服务器,请使用 --kmipUseLegacyProtocol 选项。

根据配置要求包括其他选项。例如,如果希望远程客户端连接到您的部署,或是您的部署成员运行在不同主机上,请指定 --bind_ip

以下操作将在密钥管理器中创建新的主密钥。mongod 使用主密钥对 mongod 为每个数据库所生成的密钥进行加密。

mongod --enableEncryption \
--kmipServerName <KMIP Server HostName> \
--kmipPort <KMIP server port> \
--kmipServerCAFile ca.pem \
--kmipClientCertificateFile client.pem

mongod 启动时验证与 KMIP 服务器的连接。

--kmipServerName 中指定的服务器名称必须与 KMIP 服务器出示的证书上的主题备用名称 SAN 或公用名 CN 相匹配。SAN 可以是系统名称或 IP 地址。

如果存在 SAN,则 mongod 不会尝试与 CN 配对。

如果 KMIP 服务器的主机名或 IP 地址与 SANCN 都不匹配,则 mongod 不会启动。

要确保密钥创建和使用成功,请检查日志文件。如果已成功,此进程则会记录以下消息:

[initandlisten] Created KMIP key with id: <UID>
[initandlisten] Encryption key manager initialized using master key with id: <UID>

提示

另请参阅:

您可以使用 KMIP 服务器已在管理的现有主密钥。要使用现有密钥,请在启动 mongod 时使用以下选项将 mongod 连接到密钥管理器:

要连接到 1.0 或 1.1 版本的 KMIP 服务器,请使用 --kmipUseLegacyProtocol 选项。

根据配置要求包括其他选项。例如,如果希望远程客户端连接到您的部署,或是您的部署成员运行在不同主机上,请指定 --bind_ip

mongod --enableEncryption \
--kmipServerName <KMIP Server HostName> \
--kmipPort <KMIP server port> \
--kmipServerCAFile ca.pem \
--kmipClientCertificateFile client.pem \
--kmipKeyIdentifier <UID>

mongod 启动时验证与 KMIP 服务器的连接。

--kmipServerName 中指定的服务器名称必须与 KMIP 服务器出示的证书上的主题备用名称 SAN 或公用名 CN 相匹配。SAN 可以是系统名称或 IP 地址。

如果存在 SAN,则 mongod 不会尝试与 CN 配对。

如果 KMIP 服务器的主机名或 IP 地址与 SANCN 都不匹配,则 mongod 不会启动。

提示

另请参阅:

重要

使用密钥文件方法不符合大多数监管密钥管理准则,因而需要用户安全地管理自己的密钥。

密钥文件的安全管理至关重要。

要使用密钥文件进行加密,您必须拥有一个采用 Base64 编码的密钥文件(包含单个 16 或 32 个字符的字符串)。密钥文件只能由 mongod 进程的所有者访问。

  1. 使用 16 或 32 个字符组成的字符串来创建 Base64 编码的密钥文件。您可使用任何您偏好的方法来生成编码后的密钥文件。例如,

    openssl rand -base64 32 > mongodb-keyfile
  2. 更新文件权限。

    chmod 600 mongodb-keyfile
  3. 要使用密钥文件,请使用以下选项启动 mongod

    • --enableEncryption

    • --encryptionKeyFile <path to keyfile>

    mongod --enableEncryption --encryptionKeyFile mongodb-keyfile

    根据配置要求包括其他选项。例如,如果希望远程客户端连接到您的部署,或是您的部署成员运行在不同主机上,请指定 --bind_ip

  4. 验证加密密钥管理器是否使用密钥文件成功初始化。如果操作成功,该进程将记录以下消息:

    [initandlisten] Encryption key manager initialized with key file: <path to keyfile>

提示

另请参阅:

MongoDB 无法加密现有数据。使用新密钥来启用加密时,MongoDB 实例不能有任何预先存在的数据。

如果使用的副本集确有现有数据,请使用滚动初始同步来加密该数据。

例如,试想一个有三个节点的副本集。该副本集正在使用且持有您要加密的数据。您对该数据进行静态加密时应采取的步骤如下:

1

请按以下步骤准备服务器:

  • 选择一个从节点服务器。

  • 停止辅助服务器上的 mongod

  • 可选:备份 dbPath 中的数据。如果无需完整备份,请考虑仅备份 diagnostic.data 目录,以便在出现问题时保留可能有用的故障排除数据。请参阅全时诊断数据捕获以了解更多信息。

  • 删除 dbPath 中的文件和目录。

2

启用加密的情况下启动从节点服务器。 mongod实例会创建一个新的密钥库。

3

从主节点导入数据。启动 mongod 进程,从而按需指定复制选项

mongod 执行初始同步,并在同步过程中加密数据。

4

当第一个从节点完成导入和加密数据后,在其他从节点 mongod 实例上重复该进程。

5

当所有从节点都已加密后,step down 主节点。符合条件的从节点将选举新的主节点。

原来的主节点现在是从节点。重复步骤删除未加密数据,然后运行初始同步。

← 静态加密