大多数监管要求规定,用于解密敏感数据的托管密钥必须每年轮换一次,并更换为新密钥。
MongoDB 提供两种密钥轮换选项。您可以用使用新密钥的新实例轮换出二进制文件。或者,如果您使用 KMIP 服务器进行密钥管理,则可以轮换客户主密钥。
重要
密钥轮换不可用于本地密钥管理。如果使用情况需要密钥轮换,请使用密钥管理器。
轮换副本集节点
注意
为防止更改写入法定人数,请勿一次轮换多个副本集成员。
对于副本集,轮换出一个节点:
启动新的
mongod实例,配置为使用新密钥。包括带有副本集名称的--replSet选项,以及与配置相关的任何其他选项,如--dbpath和--bind_ip。mongod --replSet myReplSet --enableEncryption \ --kmipServerName <KMIP Server HostName> \ --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem 将
mongosh连接到副本集的主节点 (primary node in the replica set)。将实例添加到副本集:
rs.add( { host: <host:port> } ) 警告
在 MongoDB 5.0 之前,新增的节点仍然算作投票成员,尽管在数据保持一致之前,它们既不能服务于读取,也不能成为主节点。如果您运行的是 5.0 之前的 MongoDB 版本,并添加了
votes和priority设置大于零的从节点,则可能会导致有大多数投票成员在线却无法选举主节点的情况。为避免出现这种情况,可考虑先添加priority :0和votes :0的新从节点。然后运行rs.status(),确保成员已过渡到SECONDARY状态。最后,使用rs.reconfig()更新其优先级和投票。在初始同步过程中,使用一组全新的数据库密钥以及新的系统密钥对数据进行重新加密。
从副本集删除旧节点并删除其所有数据。 有关说明,请参阅从自我管理副本集中删除成员
KMIP 主密钥轮换
如果您使用 KMIP 服务器进行密钥管理,则可以轮换客户主密钥,这是唯一的外部管理密钥。使用新的主密钥,内部密钥库将被重新加密,但数据库密钥将保持不变。这样就无需重新加密整个数据集。
为副本集的从节点逐个轮换主密钥。
重新启动从节点,包括
--kmipRotateMasterKey选项。包括与您的配置相关的任何其他选项,如--bind_ip。如果节点中已包含--kmipKeyIdentifier选项,则要么用新密钥更新--kmipKeyIdentifier选项,要么省略以从 KMIP 服务器请求新密钥:mongod --enableEncryption --kmipRotateMasterKey \ --kmipServerName <KMIP Server HostName> \ --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem 如果使用配置文件,请包含
security.kmip.rotateMasterKey。成功完成主密钥轮换和重新加密数据库密钥库后,
mongod将退出。重启不带
--kmipRotateMasterKey参数的从节点。包括与您的配置相关的任何其他选项,如--bind_ip。mongod --enableEncryption --kmipServerName <KMIP Server HostName> \ --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem 如果使用配置文件,请删除
security.kmip.rotateMasterKey设置。
降级副本集主节点。
将
mongosh连接到主节点,并使用rs.stepDown()降级主节点,强制选举新的主节点:rs.stepDown() 当
rs.status()显示主节点已降级,而另一节点已进入PRIMARY状态时,轮换降级节点的主键:重新启动降级节点,包括
--kmipRotateMasterKey选项。包括与您的配置相关的任何其他选项,如--bind_ip。如果节点已包含--kmipKeyIdentifier选项,则要么用新密钥更新--kmipKeyIdentifier选项,要么省略。mongod --enableEncryption --kmipRotateMasterKey \ --kmipServerName <KMIP Server HostName> \ --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem 如果使用配置文件,请包含
security.kmip.rotateMasterKey。成功完成主密钥轮换和重新加密数据库密钥库后,
mongod将退出。重启不带
--kmipRotateMasterKey选项的降级节点。包括与您的配置相关的任何其他选项,如--bind_ip。mongod --enableEncryption --kmipServerName <KMIP Server HostName> \ --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem 如果使用配置文件,请删除
security.kmip.rotateMasterKey设置。