静态加密
与传输加密和保护相关帐户、密码和加密密钥的安全策略结合使用时,静态加密可以帮助确保符合安全和隐私标准,包括 HIPAA、PCI-DSS 和 FERPA。
加密存储引擎
注意
Enterprise 版功能
仅在 MongoDB Enterprise 中可用。
重要
仅适用于 WiredTiger 存储引擎。
MongoDB Enterprise 3.2 为 WiredTiger 存储引擎引入了一个原生加密选项。此功能允许 MongoDB 加密数据文件,仅限持有解密密钥的各方可以解码和读取数据。
加密过程
注意
Windows 上的 MongoDB Enterprise 不再支持将 AES256-GCM
作为静态加密的块密码。仅 Linux 支持此用法。
如果启用加密,MongoDB Enterprise 使用的默认加密模式则是通过 OpenSSL 实现的 AES256-CBC
(或是采用密码分组链接模式的 256 位高级加密标准)。AES-256 使用对称密钥;即,使用同一密钥来加密和解密文本。MongoDB Enterprise for Linux 还支持经过身份验证的加密 AES256-GCM
(或是采用 Galois/Counter 模式的 256 位高级加密标准)。
加密存储引擎使用认证的底层操作系统加密提供程序来执行加密操作。例如,在 Linux 操作系统上安装的 MongoDB 使用 OpenSSL libcrypto
FIPS-140 模块。
要在符合 FIPS 标准的模式下运行 MongoDB:
将操作系统配置为在 FIPS 强制模式下运行。
配置 MongoDB 以启用
net.tls.FIPSMode
设置。重新启动
mongod
或mongos
。检查服务器日志文件以确认 FIPS 模式已启用。如果 FIPS 模式已启用,日志文件中则会显示消息
FIPS 140-2 mode activated
。
更多信息,请参阅为 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(传输层安全性/安全套接字层)。请参阅为 TLS/SSL 配置 mongod
和 mongos
以及客户端的 TLS /SSL 配置。
密钥管理
重要
加密密钥的安全管理至关重要。
数据库密钥属于服务器内部,并且仅以加密格式分页到磁盘。MongoDB 在任何情况下都不会将主密钥分页到磁盘。
仅主密钥属于服务器外部(即,它会与数据以及数据库密钥分开保存),且需进行外部管理。为了管理主密钥,MongoDB 的加密存储引擎支持两种密钥管理选项:
通过 Key Management Interoperability Protocol (KMIP) 与第三方密钥管理设备集成。推荐
注意
对于使用 KMIP 与第三方密钥管理设备进行的集成,您应允许以下 KMIP 操作:
创建 (
operation_create
)获取 (
operation_get
)激活 (
operation_activate
)
通过密钥文件进行本地密钥管理。
要配置 MongoDB 进行加密并使用两个密钥管理选项,请参阅配置加密。
加密和复制
加密不是复制的一部分:
主密钥和数据库密钥不会被复制,且
数据不是通过网络进行本地加密的。
虽然您可以为节点重复使用同一密钥,但 MongoDB 建议为每个节点使用单独的密钥并进行传输加密。
详情请参阅轮换加密密钥。
审核日志
仅在 MongoDB Enterprise 中可用。
使用 KMIP Server 管理用于加密 MongoDB 审核日志的密钥
从 MongoDB 6.0 Enterprise 开始,您可以使用外部密钥管理互操作性协议 (KMIP) 服务器安全地管理用于加密 MongoDB 审核日志的密钥。
KMIP 可以简化加密密钥的管理,使您无需使用不标准的密钥管理流程。
默认 KMIP 协议版本是 1.2。您可以在 MongoDB 服务器的配置文件中将 MongoDB 配置为使用 KMIP 1.0 或 1.1 版本。
要使用带有审核日志加密功能的 KMIP 服务器,请配置以下这些设置和参数:
auditEncryptionHeaderMetadataFile
parameterauditEncryptKeyWithKMIPGet
parameter
在测试审核日志加密时,您也可以使用 auditLog.localAuditKeyFile
设置。
从 MongoDB 6.0 开始,如果需要降级到较早的 MongoDB 版本,必须先移除 auditLog.auditEncryptionKeyIdentifier
或 auditLog.localAuditKeyFile
以禁用审核日志加密。现有的加密审核日志保持加密状态,可以保留为存储和处理加密日志而开发的任何过程。
注意
对于审核日志加密,审核日志目标必须是文件。syslog 不能用作目标。
未加密的审核日志和进程日志
如果您未使用外部密钥管理互操作性协议 (KMIP) 服务器来管理用于加密审核日志的密钥(如上一部分所示),则本节内容将适用于您。
审核日志文件并未作为 MongoDB 加密存储引擎的一部分进行加密。作为正常操作的一部分,使用日志记录运行的 mongod
可能会将潜在的敏感信息输出到日志文件,具体取决于配置的日志详细程度。
使用 security.redactClientLogData
设置可防止潜在敏感信息进入 mongod
进程日志。设置 redactClientLogData
可减少日志中的详细信息,并可能使日志诊断复杂化。
有关详情,请参阅日志校订手册条目。
应用程序级加密
从 MongoDB 7.0 开始,您可以使用 Queryable Encryption 来启用端到端加密。有关入门的详细信息,请参阅快速入门。
有关 MongoDB 认证合作伙伴的列表,请参阅合作伙伴列表。