静态加密
静态加密,当与传输加密和安全性策略结合使用时,这些策略保护相关账户、密码和加密密钥,可以帮助确保符合安全性和隐私标准,包括HIPAA、PCI-DSS和FERPA。
加密存储引擎
注意
企业功能
仅适用于MongoDB企业版。
重要
仅适用于WiredTiger存储引擎。
MongoDB企业版3.2为WiredTiger存储引擎引入了原生加密选项。此功能允许MongoDB加密数据文件,这样只有拥有解密密钥的各方才能解码和读取数据。
加密过程
注意
MongoDB企业版在Windows上不再支持AES256-GCM
作为静态加密的块加密算法。此用法仅在Linux上受支持。
如果启用了加密,MongoDB企业版使用的默认加密模式是OpenSSL的AES256-CBC
(或256位高级加密标准在密码块链接模式中)。
加密存储引擎使用底层操作系统的认证加密提供程序来执行加密操作。例如,Linux操作系统上的MongoDB安装使用OpenSSL的libcrypto
FIPS-140模块。
要在FIPS兼容模式下运行MongoDB
配置操作系统以在FIPS强制模式下运行。
配置MongoDB以启用
net.tls.FIPSMode
设置。重新启动
mongod
或mongos
。检查服务器日志文件以确认FIPS模式已启用。如果FIPS模式已启用,则日志文件中会显示消息
FIPS 140-2 模式已激活
。
有关更多信息,请参阅 为FIPS配置MongoDB。
注意
AES256-GCM和文件系统备份
对于使用AES256-GCM加密模式的加密存储引擎,AES256-GCM
要求每个进程使用与密钥唯一对应的计数器块值。
对于配置了 AES256-GCM
加密的 加密存储引擎
- 从热备份恢复
- 从4.2版本开始,如果您从“热备份”中恢复文件(即,
mongod
正在运行),MongoDB可以在启动时检测到“脏”密钥,并自动将数据库密钥滚动以避免IV(初始化向量)重用。
- 从冷备份恢复
但是,如果您从“冷备份”中恢复文件(即,
mongod
没有运行),MongoDB无法在启动时检测到“脏”密钥,并且IV的重用会破坏保密性和完整性保证。从4.2版本开始,为了避免从冷文件系统快照恢复后密钥的重用,MongoDB添加了一个新的命令行选项
--eseDatabaseKeyRollover
。使用--eseDatabaseKeyRollover
选项启动时,mongod
实例将滚动使用AES256-GCM
密文配置的数据库密钥并退出。
数据加密过程包括
生成主密钥。
为每个数据库生成密钥。
使用数据库密钥加密数据。
使用主密钥加密数据库密钥。
加密在存储层中透明发生;即,所有数据文件从文件系统角度来看都是完全加密的,数据仅在内存和传输过程中以未加密状态存在。
要加密MongoDB的所有网络流量,您可以使用TLS/SSL(传输层安全性/安全套接字层)。请参阅配置 mongod
和 mongos
以TLS/SSL 和 客户端TLS/SSL配置。
密钥管理
重要
安全地管理加密密钥至关重要。
数据库密钥是服务器内部的,并且仅以加密格式写入磁盘。MongoDB在任何情况下都不会将主密钥写入磁盘。
只有主密钥是服务器外部的(即与数据和数据库密钥分开保存),并需要外部管理。为了管理主密钥,MongoDB的加密存储引擎支持两种密钥管理选项
通过密钥管理互操作性协议(KMIP)与第三方密钥管理设备集成。推荐
注意
使用KMIP进行第三方密钥管理设备的集成时,应允许以下KMIP操作
创建 (
operation_create
)获取 (
operation_get
)激活 (
operation_activate
)
通过密钥文件进行本地密钥管理。
有关配置MongoDB以加密以及使用两种密钥管理选项之一的信息,请参阅配置加密。
加密和复制
加密不是复制的一部分
主密钥和数据库密钥不进行复制,并且
数据在网络上不进行本地加密。
尽管您可以为节点重用相同的密钥,但MongoDB建议每个节点使用单独的密钥以及使用传输加密。
有关详细信息,请参阅旋转加密密钥。
审计日志
仅适用于MongoDB企业版。
使用KMIP服务器管理用于加密MongoDB审计日志的密钥
从MongoDB 6.0企业版开始,您可以使用外部密钥管理互操作性协议(KMIP)服务器安全地管理用于加密MongoDB审计日志的密钥。
KMIP简化了加密密钥的管理,消除了使用非标准密钥管理流程的需求。
默认的KMIP协议版本是1.2。您可以在MongoDB服务器配置文件中配置MongoDB使用KMIP版本1.0或1.1。配置文件。
要使用KMIP服务器进行审计日志加密,请配置以下设置和参数
对于测试审计日志加密,您还可以使用 auditLog.localAuditKeyFile
设置。
从MongoDB 6.0开始,如果您需要降级到更早的MongoDB版本,您必须先通过移除 auditLog.auditEncryptionKeyIdentifier
或 auditLog.localAuditKeyFile
来禁用审计日志加密。现有的加密审计日志将保持加密状态,并且您可以保留您为加密日志的存储和处理开发的所有程序。
注意
对于审计日志加密,审计日志目标必须是文件。 syslog 不能用作目标。
未加密的审计日志和进程日志
本节适用于您未使用外部密钥管理系统互操作性协议(KMIP)服务器来管理加密审计日志密钥的情况,如前节所示。
审计日志文件不是作为MongoDB加密存储引擎的一部分进行加密的。运行带有 mongod
并进行 日志记录 的进程可能会在正常操作过程中将潜在敏感信息输出到日志文件中,具体取决于配置的 日志详细程度。
使用 security.redactClientLogData
设置来防止潜在敏感信息进入 mongod
进程日志。设置 redactClientLogData
会降低日志的详细程度,可能会使日志诊断复杂化。
有关更多信息,请参阅 日志修订 手册条目。
应用程序级加密
从MongoDB 7.0版本开始,您可以使用可查询加密功能来实现端到端加密。有关入门细节,请参阅快速入门指南。
有关MongoDB认证合作伙伴的列表,请参阅合作伙伴列表。