与传输加密和保护相关帐户、密码和加密密钥的安全策略结合使用时,静态加密可以帮助确保符合安全和隐私标准,包括 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 密码的加密存储引擎:
- 从热备份恢复
- 如果在
mongod运行时从通过“热”备份获取的文件恢复, MongoDB会在初创企业时检测到“脏”键,并自动滚动数据库键以避免重复使用 IV(初始化向量)。
- 从冷备份恢复
但是,如果在
mongod未运行时从通过“冷”备份获取的文件恢复, MongoDB在初创企业时不会检测到“脏”密钥,并且重复使用 IV 会导致机密性和完整性ACID 一致性保证失效。为了避免从冷文件系统快照恢复后重复使用密钥, MongoDB添加了一个新的命令行选项
--eseDatabaseKeyRollover。使用--eseDatabaseKeyRollover选项启动时,mongod实例会滚动使用AES256-GCM密码配置的数据库密钥并退出。
数据加密流程包括:
生成主密钥。
为每个数据库生成密钥。
用数据库密钥加密数据。
使用主密钥来加密数据库密钥。
加密在存储层中透明进行,这意味着从文件系统的角度来看,所有数据文件都是完全加密的,数据仅以未加密状态存在于内存中和传输过程中。
要加密 MongoDB 的所有网络流量,可以使用 TLS/SSL(传输层安全性/Secure Sockets Layer)。请参阅配置 MongoDB 实例以进行 TLS/SSL 加密和针对客户端的 TLS/SSL 配置。
密钥管理
重要
加密密钥的安全管理至关重要。
数据库密钥属于服务器内部,并且仅以加密格式分页到磁盘。MongoDB 在任何情况下都不会将主密钥分页到磁盘。
只有主密钥位于服务器外部(这意味着它与数据和数据库密钥分开保存),并且需要外部管理。为了管理主密钥,MongoDB 的加密存储引擎支持两种密钥管理选项:
通过 Key Management Interoperability Protocol (KMIP) 与第三方密钥管理设备集成。推荐
注意
对于使用 KMIP 与第三方密钥管理设备进行的集成,您应允许以下 KMIP 操作:
创建 (
operation_create)获取 (
operation_get)激活 (
operation_activate)GetAttributes (
operation_get_attributes)加密 (
operation_encrypt)解密 (
operation_decrypt)
MongoDB需要使用默认KMIP配置进行加密和解密操作。
security.kmip.useLegacyProtocoltrue如果您在MongoDB服务器 配置文件 中将 设为 ,MongoDB使用KMIP1.0 /1.1协议,它不需要这些操作。通过密钥文件进行本地密钥管理。
要配置 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 服务器,请配置以下这些设置和参数:
auditEncryptionHeaderMetadataFileparameterauditEncryptKeyWithKMIPGetparameter
在测试审核日志加密时,您也可以使用 auditLog.localAuditKeyFile 设置。
从 MongoDB 6.0 开始,如果需要降级到较早的 MongoDB 版本,必须先移除 auditLog.auditEncryptionKeyIdentifier 或 auditLog.localAuditKeyFile 以禁用审核日志加密。现有的加密审核日志保持加密状态,可以保留为存储和处理加密日志而开发的任何过程。
注意
对于审核日志加密,审核日志目标必须是文件。syslog 不能用作目标。
未加密的审核日志和进程日志
如果不使用Key Management Interoperability Protocol (KMIP)服务器进行Atlas 审核日志加密,请使用此部分。
审核日志文件并未作为 MongoDB 加密存储引擎的一部分进行加密。作为正常操作的一部分,使用日志记录运行的 mongod 可能会将潜在的敏感信息输出到日志文件,具体取决于配置的日志详细程度。
使用 security.redactClientLogData 设置可防止潜在敏感信息进入 mongod 进程日志。设置 redactClientLogData 可减少日志中的详细信息,并可能使日志诊断复杂化。
有关详情,请参阅日志校订手册条目。
应用程序级加密
从MongoDB7.0 开始,您可以使用Queryable Encryption来启用端到端加密。有关入门的详细信息,请参阅Queryable Encryption快速入门。
有关 MongoDB 认证合作伙伴的列表,请参阅合作伙伴列表。