Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

配置加密

在此页面上

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

版本 3.2 中的新增功能

本页将讨论用于支持静态加密的服务器配置。如果您使用的是 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) 的密钥管理设备来安全传输密钥。 任何为 KMIP 提供支持的设备供应商都应该是兼容的。

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

提示

推荐

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

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

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

    • 创建(operation_create

    • 获取 (operation_get)

    • 激活 (operation_activate)

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

注意

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

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

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

以下操作在密钥经理中创建一个新的主密钥, mongod使用该主密钥加密mongod为每个数据库生成的密钥。

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

连接到 KMIP 服务器时, mongod CN验证指定的SAN --kmipServerName SAN与以下内容匹配: KMIP 服务器。 [1]如果SAN存在,则mongodCN不匹配。 如果主机名与SAN (或CN )不匹配,则mongod将无法连接。

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

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

提示

另请参阅:

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

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

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

连接到 KMIP 服务器时, mongod CN验证指定的SAN --kmipServerName SAN与以下内容匹配: KMIP 服务器。 [1]如果SAN存在,则mongodCN不匹配。 如果主机名与SAN (或CN )不匹配,则mongod将无法连接。

提示

另请参阅:

[1]( 1 , 2 )从 MongoDB 4.2 开始,在执行 SAN 比较时,MongoDB 支持比较 DNS 名称或 IP 地址。 在以前的版本中,MongoDB 仅支持 DNS 名称的比较。

重要

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

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

要使用密钥文件进行加密,您必须拥有一个采用 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 主节点。符合条件的从节点将选举新的主节点。

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

后退

静态加密