MongoDB静态加密必须启用WiredTiger引擎的AES-256加密,不支持MMAPv1;仅加密数据文件,密钥须由KMS或本地keyFile提供,生产环境推荐KMS以满足合规与轮换要求。

MongoDB静态加密必须开启WiredTiger存储引擎加密
MongoDB本身不提供全库级透明静态加密(TDE),所谓“落盘加密”实际依赖WiredTiger引擎层的AES-256加密能力。如果用的是MMAPv1(已弃用)或未启用WiredTiger加密,mongod启动时加任何参数都无效。
- 确认引擎:
db.serverStatus().storageEngine.name必须返回wiredTiger - 加密仅作用于数据文件(
collection-*.wt、index-*.wt),不加密WAL日志、诊断文件、journal(除非额外配置) - 密钥必须由密钥管理服务(KMS)或本地密钥文件提供;不能靠数据库口令或用户权限控制
用keyFile方式启用静态加密最简单但有风险
开发/测试环境常用本地密钥文件,操作快但密钥明文落盘,且重启mongod必须指定同一keyFile路径,否则无法读取已有数据。
- 生成32字节密钥:
openssl rand -base64 32 > /etc/mongod-keyfile - 设置权限:
chmod 600 /etc/mongod-keyfile && chown mongod:mongod /etc/mongod-keyfile - 配置项写在
/etc/mongod.conf中:storage: wiredTiger: encryption: on: true keyFile: /etc/mongod-keyfile - 重启失败常见报错:
Unable to decrypt file: Invalid key→ 检查keyFile是否被意外修改或权限不对
AWS KMS或Azure Key Vault才是生产环境正确姿势
本地keyFile无法满足密钥轮换、访问审计、HSM集成等合规要求。AWS/Azure/GCP官方KMS支持直接对接,密钥不出KMS服务边界。
- 以AWS为例:需在
mongod.conf中配置kmsProviders和encryptionKeyID,且mongod进程需有kms:Decrypt权限 - KMS模式下,每个collection可配独立密钥(通过
createCollection的encryptedFields选项),但静态加密是全局开关,影响所有WiredTiger文件 - 注意网络延迟:每次打开数据文件都要调用KMS API,首次加载可能明显变慢;建议预热或用KMS缓存(如AWS KMS的
cache配置)
加密后备份与恢复必须同步密钥上下文
mongodump/mongorestore默认不处理加密密钥——它们只导出逻辑数据。如果你用cp或rsync拷贝WiredTiger数据目录,没带对的keyFile或KMS凭据,恢复就是一坨不可读的乱码。
-
mongodump出来的BSON文件不加密,但丢失原始加密粒度(比如字段级加密信息) - 物理备份(copy data files)必须确保目标环境具备完全一致的加密配置,包括KMS region、role、key ID
- 误删
keyFile或KMS密钥被禁用 → 数据永久不可恢复,MongoDB不会提示“密钥过期”,只会报WT_ERROR: item not found或静默返回空结果
compact命令触发,而它会阻塞写入——这点常被忽略。










