Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

轮换加密密钥

在此页面上

  • 轮换副本集节点
  • KMIP 主密钥轮换

大多数监管要求规定,用于解密敏感数据的托管密钥必须每年轮换一次,并更换为新密钥。

注意

消歧

要在文件系统恢复后轮换使用 AES 256 -GCM 密码配置的数据库密钥,请改为参阅 --eseDatabaseKeyRollover

MongoDB 提供两种密钥轮换选项。您可以用使用新密钥的新实例轮换出二进制文件。或者,如果您使用 KMIP 服务器进行密钥管理,则可以轮换客户主密钥。

注意

为防止更改写入法定人数,请勿一次轮换多个副本集成员。

对于副本集,轮换出一个节点:

  1. 启动新的 mongod 实例,配置为使用新密钥。包括带有副本集名称的 --replSet 选项,以及与配置相关的任何其他选项,如 --dbpath--bind_ip

    mongod --replSet myReplSet --enableEncryption \
    --kmipServerName <KMIP Server HostName> \
    --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem
  2. mongosh连接到副本集的主节点 (primary node in the replica set)。

  3. 将实例添加到副本集:

    rs.add( { host: <host:port> } )

    警告

    在 MongoDB 5.0 之前,新增的节点仍然算作投票成员,尽管在数据保持一致之前,它们既不能服务于读取,也不能成为主节点。如果您运行的是 5.0 之前的 MongoDB 版本,并添加了 votespriority 设置大于零的从节点,则可能会导致有大多数投票成员在线却无法选举主节点的情况。为避免出现这种情况,可考虑先添加 priority :0votes :0 的新从节点。然后运行 rs.status(),确保成员已过渡到 SECONDARY 状态。最后,使用 rs.reconfig() 更新其优先级和投票。

    在初始同步过程中,使用一组全新的数据库密钥以及新的系统密钥对数据进行重新加密。

  4. 从副本集删除旧节点并删除其所有数据。 有关说明,请参阅从自我管理副本集中删除成员

如果您使用 KMIP 服务器进行密钥管理,则可以轮换客户主密钥,这是唯一的外部管理密钥。使用新的主密钥,内部密钥库将被重新加密,但数据库密钥将保持不变。这样就无需重新加密整个数据集。

  1. 为副本集的节点逐个轮换主密钥。

    1. 重新启动从节点,包括 --kmipRotateMasterKey 选项。包括与您的配置相关的任何其他选项,如 --bind_ip。如果节点中已包含 --kmipKeyIdentifier 选项,则要么用新密钥更新 --kmipKeyIdentifier 选项,要么省略以从 KMIP 服务器请求新密钥:

      mongod --enableEncryption --kmipRotateMasterKey \
      --kmipServerName <KMIP Server HostName> \
      --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem

      如果使用配置文件,请包含 security.kmip.rotateMasterKey

    2. 成功完成主密钥轮换和重新加密数据库密钥库后,mongod 将退出。

    3. 重启不带 --kmipRotateMasterKey 参数的从节点。包括与您的配置相关的任何其他选项,如 --bind_ip

      mongod --enableEncryption --kmipServerName <KMIP Server HostName> \
      --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem

      如果使用配置文件,请删除 security.kmip.rotateMasterKey 设置。

  2. 降级副本集主节点。

    mongosh 连接到主节点,并使用 rs.stepDown() 降级主节点,强制选举新的主节点:

    rs.stepDown()
  3. rs.status() 显示主节点已降级,而另一节点已进入 PRIMARY 状态时,轮换降级节点的主键:

    1. 重新启动降级节点,包括 --kmipRotateMasterKey 选项。包括与您的配置相关的任何其他选项,如 --bind_ip。如果节点已包含 --kmipKeyIdentifier 选项,则要么用新密钥更新 --kmipKeyIdentifier 选项,要么省略。

      mongod --enableEncryption --kmipRotateMasterKey \
      --kmipServerName <KMIP Server HostName> \
      --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem

      如果使用配置文件,请包含 security.kmip.rotateMasterKey

    2. 成功完成主密钥轮换和重新加密数据库密钥库后,mongod 将退出。

    3. 重启不带 --kmipRotateMasterKey 选项的降级节点。包括与您的配置相关的任何其他选项,如 --bind_ip

      mongod --enableEncryption --kmipServerName <KMIP Server HostName> \
      --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem

      如果使用配置文件,请删除 security.kmip.rotateMasterKey 设置。

后退

配置