旋转加密密钥
大多数监管要求规定,用于解密敏感数据的托管密钥必须每年更换一次,并用新密钥替换。
MongoDB提供了两种密钥轮换选项。您可以使用使用新密钥的新实例替换旧二进制文件。或者,如果您正在使用KMIP服务器进行密钥管理,您还可以轮换客户主密钥。
轮换副本集成员
注意
为防止更改写法定数,一次不要轮换超过一个副本集成员。
对于副本集,要轮换成员
启动一个新的
mongod实例,配置使用新密钥。包括具有副本集名称的--replSet选项以及任何特定于您配置的其他选项,例如--dbpath和--bind_ip。mongod --replSet myReplSet --enableEncryption \ --kmipServerName <KMIP Server HostName> \ --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem 连接
mongosh到副本集的主节点。将实例添加到副本集
rs.add( { host: <host:port> } ) 警告
在MongoDB 5.0之前,即使新添加的从节点无法提供读取服务或在其数据一致之前无法成为主节点,它仍然被视为投票成员。如果您正在运行低于5.0版本的MongoDB,并且添加了一个具有大于零的
votes和priority设置的从节点,这可能会导致情况出现,即大多数投票成员在线,但无法选举出主节点。为了避免这种情况,请考虑最初将新从节点添加为具有priority :0和votes :0。然后,运行rs.status()来确保成员已过渡到SECONDARY状态。最后,使用rs.reconfig()来更新其优先级和投票。在初始同步过程中,使用全新的数据库密钥集以及新的系统密钥对数据进行重新加密。
从副本集中移除旧节点并删除其所有数据。有关说明,请参阅从自管理副本集中移除成员
KMIP主密钥轮换
如果您使用KMIP服务器进行密钥管理,可以轮换唯一的受外部管理的密钥Customer Master Key。使用新的主密钥,内部密钥存储库将被重新加密,但数据库密钥将保持不变。这消除了重新加密整个数据集的需要。
逐个轮换副本集的
从节点的主密钥。重新启动从节点,包括
--kmipRotateMasterKey选项。包括任何针对您配置的特定选项,例如--bind_ip。如果成员已经包含--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选项,则可以更新该选项以使用新密钥,或者省略。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设置。