轮换加密密钥
在此页面上
大多数监管要求规定,用于解密敏感数据的托管密钥必须每年轮换一次,并更换为新密钥。
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
设置。