大多数法规要求强制要求必须每年淘汰用于解密敏感数据的托管密钥,并用新密钥替换。
消歧
要在文件系统还原后翻转用AES256-GCM密码配置的数据库密钥,请参阅--eseDatabaseKeyRollover
。
MongoDB提供了两种密钥旋转选项。您可以使用使用新密钥的新实例来旋转二进制文件。或者,如果您使用KMIP服务器进行密钥管理,则可以旋转主密钥。
对于副本集,要旋转出成员:
启动一个新mongod
实例,配置为使用新密钥。包括--replSet
带有副本集名称的选项,以及与配置有关的其他任何选项,例如
--dbpath
和--bind_ip
。
将mongo
外壳连接到副本集的主副本。
将实例添加到副本集,首先将成员添加为非投票,优先级为0的成员:
小费
当新添加的辅助服务器的votes
且
其priority
设置大于零时,在其初始同步期间,即使该辅助服务器由于其数据不一致而无法提供读取服务或成为主服务器,但仍将作为投票成员。
这可能导致多数投票成员在线但无法选举主要成员的情况。为避免这种情况,请考虑首先使用和添加新的辅助服务器
。然后,一旦成员转换为
状态,即可使用来更新其优先级和投票。priority :0
votes :0
SECONDARY
rs.reconfig()
在初始同步过程中,将使用一组全新的数据库密钥以及一个新的系统密钥对数据进行重新加密。
确保新成员已达到SECONDARY
状态。要检查副本集成员的状态,请运行
rs.status()
:
新节点完成其初始同步过程后,可使用rs.reconfig()
来更新新添加的辅助节点
的投票和优先级设置。有关详细信息,请参见将辅助服务器添加到现有副本集:
n
数组中新成员的数组索引
在哪里members
。
警告
rs.reconfig()
壳方法可以强制当前主下台,这将导致一个选举。当主服务器降级时,将
mongod
关闭所有客户端连接。虽然这通常需要10到20秒,但请尝试在计划的维护期间进行这些更改。从副本集中删除旧节点并删除其所有数据。有关说明,请参阅从副本集中删除成员。
如果您使用KMIP服务器进行密钥管理,则可以旋转主密钥(唯一的外部管理密钥)。使用新的主密钥,内部密钥库将被重新加密,但数据库密钥将保持不变。这样就无需重新加密整个数据集。
一次旋转一个副本集的辅助成员的主密钥。
重新启动辅助服务器,包括该
--kmipRotateMasterKey
选项。包括其他特定于您的配置的选项,例如--bind_ip
。如果成员已经包含该--kmipKeyIdentifier
选项,请使用--kmipKeyIdentifier
新密钥更新该选项以使用,或者省略该请求以从KMIP服务器请求新密钥:
如果使用配置文件,请包括
security.kmip.rotateMasterKey
。
成功完成主密钥旋转并重新加密数据库密钥库后,mongod
将退出。
在没有--kmipRotateMasterKey
参数的情况下重新启动辅助服务器。包括其他特定于您的配置的选项,例如--bind_ip
。
如果使用配置文件,请删除
security.kmip.rotateMasterKey
设置。
降级主副本集。
将mongo
外壳连接到主要数据库,并用于
rs.stepDown()
降低主要数据库并强制选择新的主要数据库:
当rs.status()
显示主节点已降级而另一个成员已PRIMARY
处于状态时,请旋转已降级成员的主密钥:
重新启动降级的成员,包括该
--kmipRotateMasterKey
选项。包括其他特定于您的配置的选项,例如--bind_ip
。如果成员已经包含该--kmipKeyIdentifier
选项,则使用--kmipKeyIdentifier
新密钥更新该选项以使用或忽略。
如果使用配置文件,请包括
security.kmip.rotateMasterKey
。
成功完成主密钥旋转并重新加密数据库密钥库后,mongod
将退出。
重新启动不带该--kmipRotateMasterKey
选项的降级成员
。包括其他特定于您的配置的选项,例如--bind_ip
。
如果使用配置文件,请删除
security.kmip.rotateMasterKey
设置。