透明数据加密TDE(Transparent Data Encryption)可对数据文件执行实时I/O加密和解密,数据在写入磁盘之前进行加密,从磁盘读入内存时进行解密。TDE不会增加数据文件的大小,您无需更改任何应用程序,即可使用TDE功能。为提高数据安全性,您可以通过控制台启用TDE功能,对实例数据进行加密。
前提条件
-
实例的存储类型与架构需满足以下条件:
-
本地盘实例:支持副本集和分片集群,数据库版本为4.0或4.2版本。
-
云盘实例:支持副本集,数据库版本为4.2至8.3(全版本)。
-
-
实例的存储引擎为WiredTiger。
-
已开通KMS。
如果您的实例不满足实例架构或存储引擎的条件,您可以通过其他方式变更,详情请参见变更实例配置概览。
影响
-
开通TDE功能的过程中,实例会重启一次并出现连接闪断,闪断期间不会导致数据丢失,已提交的写入不受影响,建议您在业务低峰期操作并确保应用有重连机制。
-
开通TDE功能后,会增加实例的CPU使用率。
-
加密后的集合不再支持通过物理备份恢复至自建数据库。如果您需要将加密后的集合恢复到自建数据库,您可以通过逻辑备份恢复至自建数据库,具体请参见通过逻辑备份恢复至自建数据库。
注意事项
-
TDE功能开通后无法关闭。
-
已开通TDE功能的实例释放后,不支持从回收站中恢复。
-
当前TDE功能的开通粒度为实例,仅支持对集合进行加密。如果您需要对字段进行加密,请参见手动字段级加密(仅支持MongoDB 4.2版本实例)。
说明如果业务上有特殊需求,您可以在创建集合时,指定该集合不被加密。如何设置,请参见设置指定的集合不被加密。
-
TDE功能开通后,仅加密新创建的集合,已有的集合不会被加密。
-
TDE功能所使用的密钥,由密钥管理服务KMS(Key Management Service)统一生成和管理,云数据库MongoDB不提供加密所需的密钥和证书。密钥管理服务KMS的更多信息,请参见什么是密钥管理服务。
-
实例开通TDE加密后,不支持更换密钥。如需更换密钥,您可以使用DTS将数据迁移到使用新密钥的新实例上,如何迁移数据,请参见云数据库MongoDB实例间迁移。
-
开启TDE后,由于加密密钥绑定在特定可用区,通过按备份点或按时间点恢复至新实例时,仅支持恢复到密钥所在的可用区,暂不支持跨可用区恢复。
-
请确保TDE所使用的KMS密钥始终处于可用状态。一旦该密钥被禁用、删除或欠费,实例将被锁定并变为不可用,且已有备份也将无法用于恢复。
操作步骤
-
访问MongoDB副本集实例列表或MongoDB分片集群实例列表,在上方选择资源组和地域,然后单击目标实例ID。
-
在目标实例页面的左侧导航栏,单击。
-
打开TDE状态:右侧的开关。
-
在弹出的开通TDE对话框中,根据实际需要选择生成方式。
-
使用自动生成密钥:使用系统自动生成的密钥。
-
使用自定义密钥:根据业务需要,在下拉列表中选择密钥。如果下拉列表中不存在目标密钥,您可以先创建密钥,然后进行选择。创建方法请参见创建密钥。
-
-
单击确定。
实例进入TDE修改中状态,当转变为运行中状态时,代表操作完成。
查看加密密钥信息
开启TDE后,如需查看实例加密密钥的信息(例如密钥所在的可用区),可调用查询MongoDB实例的某个密钥的详情接口查询,控制台暂不支持查看密钥详情。
设置指定的集合不被加密
开启TDE加密后,所有新创建的集合都会被加密。如果业务上有特殊需求,您可以在创建集合时,指定该集合不被加密。
-
执行如下命令创建集合,指定该集合不被加密。
-
语法:
db.createCollection("<collection_name>",{ storageEngine: { wiredTiger: { configString: "encryption=(name=none)" } } })说明命令中的
collection_name为集合名。 -
示例:
db.createCollection("customer",{ storageEngine: { wiredTiger: { configString: "encryption=(name=none)" } } })
-
TDE与云盘加密如何选择
云数据库MongoDB提供TDE和云盘加密两种静态数据加密方式,均可满足三级等保对存储保密性的要求。两者防护的都是数据在存储介质上被非法获取的风险,请根据要防护的威胁场景选择。
|
威胁场景 |
云盘加密 |
TDE |
|
物理介质泄漏时,数据文件 |
防护 |
防护 |
|
物理介质泄漏时,OS日志等非数据文件 |
防护(整盘加密) |
不防护(仅加密数据文件) |
|
物理备份文件被导出后泄漏 |
视存放位置(云上快照延续加密) |
防护(物理备份为密文,无KMS密钥无法解密) |
|
持数据库账号者访问数据 |
不防护 |
不防护 |
|
数据传输被窃听 |
不防护 |
不防护 |
静态加密不能替代访问控制和传输加密。防止合法账号越权访问,请参见MongoDB数据库账号权限管理并配合开通审计日志;防止传输链路被窃听,请参见设置SSL加密。
选型建议:
-
要让物理备份或导出文件也保持密文,选择TDE。
-
要让整盘(含OS日志等所有文件)都加密,选择云盘加密。
-
若已开启云盘加密,其防护已覆盖绝大多数介质级泄露场景,通常无需再叠加TDE。