自建MongoDB安全加密实践的核心是启用TLS/SSL加密传输、数据静态加密和访问控制。快速配置教程:1. 生成自签名证书:openssl req -newkey rsa:4096 -nodes -keyout mongod.key -x509 -days 365 -out mongod.crt;2. 配置mongod.conf:net.tls.mode=requireSSL,net.tls.certificateKeyFile=/path/to/server.pem,security.authorization=enabled;3. 创建管理员用户:use admin,db.createUser({user:'admin',pwd:'password',roles:['root']});4. 启用字段级加密:使用ClientSideFieldLevelEncryption框架,生成KEK和DEK密钥;5. 连接时指定TLS:mongo --tls --tlsCertificateKeyFile client.pem。守护数据安全,从这些步骤铸就数字未来。
启用MongoDB加密传输
在自建MongoDB中,首先确保所有网络通信使用SSL/TLS加密。编辑/etc/mongod.conf文件,添加以下配置: net: port: 27017 tls: mode: requireTLS certificateKeyFile: /etc/ssl/mongod-server.pem CAFile: /etc/ssl/ca.pem 重启MongoDB服务:sudo systemctl restart mongod。客户端连接时使用mongo --tls --tlsCertificateKeyFile /etc/ssl/client.pem --host yourhost:27017。
数据静态加密实践
MongoDB企业版支持WiredTiger存储引擎的加密静态功能。配置mongod.conf: storage: wiredTiger: engineConfig: encryption: enabled: true keyIdentifier: "main-key" keyFile: /etc/ssl/mongodb-keyfile 生成密钥文件:openssl rand -base64 756 > mongodb-keyfile,chmod 400 mongodb-keyfile。这将自动加密磁盘上的数据文件。
访问控制与认证
自建环境必须启用认证和角色-based访问控制(RBAC)。启动时添加--auth参数,或在conf中security.authorization=enabled。创建用户: use admin db.createUser({ user: "admin", pwd: "strongpassword", roles: [ { role: "root", db: "admin" } ] }) 连接时:mongo -u admin -p --authenticationDatabase admin。
字段级加密实现
对于敏感字段,使用MongoDB的Client-Side Field Level Encryption。安装驱动并配置: import { ClientEncryption } from 'mongodb-client-encryption'; const kmsProviders = { local: { key: new Uint8Array([...]) } }; const clientEncryption = new ClientEncryption(kmsProviders, { keyVaultNamespace: 'encryption.__keyVault' }); const dataKeyId = await clientEncryption.createDataKey('local', { keyAltNames: ['test'] }); 加密前:const encrypted = await clientEncryption.encrypt(value, { algorithm: 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic', keyId: dataKeyId }); 这确保即使数据库被攻破,敏感数据仍安全。
日志与审计加密
启用审计日志并加密存储。mongod.conf中: auditing: filter: '{ atype: { $in: [ "authenticate", "createCollection" ] } }' destination: file format: JSON 日志文件路径指定后,使用systemd或logrotate加密压缩。结合systemd-journald转发到加密ELK栈。
备份加密实践
使用mongodump备份时结合GPG加密:mongodump --uri "mongodb://user:pass@host:27017/db" | gpg --symmetric --cipher-algo AES256 -o backup.enc。还原:gpg -d backup.enc | mongorestore。定期轮换GPG密钥,确保备份安全。
FAQ
Q: 自建MongoDB如何快速启用TLS?
A: 生成证书,配置mongod.conf net.tls.mode=requireTLS,重启服务。
Q: 数据静态加密需要企业版吗?
A: 是,企业版WiredTiger支持,配置storage.wiredTiger.engineConfig.encryption.enabled=true。
Q: 字段级加密怎么用?
A: 通过ClientEncryption API创建数据密钥并加密敏感字段。
Q: 忘记忘记管理员密码怎么办?
A: 以--noauth启动mongod,重置用户密码后重新启用auth。
Q: 备份如何加密?
A: mongodump后用gpg --symmetric加密备份文件。