- Security >
- Encryption >
- Encryption at Rest >
- Rotate Encryption Keys
Rotate Encryption Keys¶
On this page
Most regulatory requirements mandate that a managed key used to decrypt sensitive data must be rotated out and replaced with a new key once a year.
MongoDB provides two options for key rotation. You can rotate out the binary with a new instance that uses a new key. Or, if you are using a KMIP server for key management, you can rotate the master key.
Rotate a Member of Replica Set¶
For a replica set, to rotate out a member:
Start a new
mongodinstance, configured to use a new key. Include the--replSetoption with the name of the replica set as well as any other options specific to your configuration, such as--dbpath.Connect a
mongoshell to the replica set’s primary.Add the instance to the replica set, initially adding the member as a non-voting, priority 0 member:
Tip
When a newly added secondary has its
votesandprioritysettings greater than zero, during its initial sync, the secondary still counts as a voting member even though it cannot serve reads nor become primary because its data is not yet consistent.This can lead to a case where a majority of the voting members are online but no primary can be elected. To avoid such situations, consider adding the new secondary initially with
priority :0andvotes :0. Then, once the member has transitioned intoSECONDARYstate, users.reconfig()to update its priority and votes.During the initial sync process, the re-encryption of the data with an entirely new set of database keys as well as a new system key occurs.
Ensure that the new member has reached
SECONDARYstate. To check the state of the replica set members, runrs.status():Once the new node completes its initial sync process, use
rs.reconfig()to update the newly added secondary’s vote and priority settings. See Add a Secondary to an Existing Replica Set for details:where
nis the array index of the new member in themembersarray.Warning
- The
rs.reconfig()shell method can force the current primary to step down, which causes an election. When the primary steps down, themongodcloses all client connections. While this typically takes 10-20 seconds, try to make these changes during scheduled maintenance periods. - Avoid reconfiguring replica sets that contain members of different MongoDB versions as validation rules may differ across MongoDB versions.
- The
Remove the old node from the replica set and delete all its data. For instructions, see Remove Members from Replica Set
KMIP Master Key Rotation¶
If you are using a KMIP server for key management, you can rotate the master key, the only externally managed key. With the new master key, the internal keystore will be re-encrypted but the database keys will be otherwise left unchanged. This obviates the need to re-encrypt the entire data set.
Rotate the master key for the secondary members of the replica set one at a time.
Restart the secondary, including the
--kmipRotateMasterKeyoption. Include any other options specific to your configuration. If the member already includes the--kmipKeyIdentifieroption, either update the--kmipKeyIdentifieroption with the new key to use or omit to request a new key from the KMIP server:If using a configuration file, include the
security.kmip.rotateMasterKey.Upon successful completion of the master key rotation and re-encryption of the database keystore, the
mongodwill exit.Restart the secondary without the
--kmipRotateMasterKeyparameter. Include any other options specific to your configuration.If using a configuration file, remove the
security.kmip.rotateMasterKeysetting.
Step down the replica set primary.
Connect a
mongoshell to the primary and users.stepDown()to step down the primary and force an election of a new primary:When
rs.status()shows that the primary has stepped down and another member has assumedPRIMARYstate, rotate the master key for the stepped down member:Restart the stepped-down member, including the
--kmipRotateMasterKeyoption. Include any other options specific to your configuration. If the member already includes the--kmipKeyIdentifieroption, either update the--kmipKeyIdentifieroption with the new key to use or omit.If using a configuration file, include the
security.kmip.rotateMasterKey.Upon successful completion of the master key rotation and re-encryption of the database keystore, the
mongodwill exit.Restart the stepped-down member without the
--kmipRotateMasterKeyoption. Include any other options specific to your configuration.If using a configuration file, remove the
security.kmip.rotateMasterKeysetting.