Manage Customer Keys with AWS KMS
On this page
- Enable Customer-Managed Keys with AWS KMS
- Key Concepts
- Prerequisites
- Enable Role-Based Access to Your Encryption Key for a Project
- Switch to Role-Based Access to Your Encryption Key for a Project
- Enable Customer Key Management for an Atlas Cluster
- Rotate your AWS Customer Master Key
- MongoDB Master Key - MongoDB Responsibility
- Your AWS CMK - Your Responsibility
- Procedure
- Related Topics
Note
Starting with the 26 January 2021 Release, you must use AWS IAM roles instead of IAM users to manage access to your AWS KMS encryption keys for customer key management.
When you move from AWS IAM users to roles, ensure that your new role has access to your old AWS customer master key.
Important
Feature unavailable in Serverless Instances
Serverless instances don't support this feature at this time. To learn more, see Serverless Instance Limitations.
You can configure your Atlas project to use an AWS IAM role for accessing your AWS KMS keys for encryption at rest. You can either use an existing role or create a new role when you enable encryption at rest for your project.
This page covers configuring customer key management on your Atlas project for role-based access.
If you have not yet enabled encryption at rest for your new or existing Atlas project, follow the Enable Role-Based Access to Your Encryption Key for a Project procedure to enable encryption at rest for your Atlas project. If you have an Atlas project for which you have already enabled encryption at rest and configured credentials-based access to your encryption keys, follow the Switch to Role-Based Access to Your Encryption Key for a Project procedure to switch to role-based access to your encryption keys.
You must configure customer key management for the Atlas project before enabling it on clusters in that project.
Tip
See also:
Enable Customer-Managed Keys with AWS KMS
Key Concepts
MongoDB Master Key
MongoDB Master Key
is an encryption key used by the MongoDB Server to encrypt the WiredTiger Storage Engine. The key isn't stored in the MongoDB database, but it's supplied externally through KMIP or a local keyfile. When the MongoDB server starts, it obtains the master key from the KMIP or local file and then stores it in memory. This key is then used to decrypt the data stored in the WiredTiger storage engine.Atlas maintains a layer that translates requests between MongoDB Server and a CMK that you created in AWS. To translate the requests, Atlas uses the layer to request the CMK to create an encrypted data encryption key (DEK). This encrypted DEK is generated per Atlas deployment.
For example, for a three node M10+ replica set as shown in the following figure, there are three unique encrypted DEKs, one per node. Atlas stores the encrypted DEK on disk on each node in the Atlas cluster. When the cluster starts up, the Atlas layer decrypts the DEK using the customer provided encryption key and supplies this to the MongoDB Server.
Per Database Encryption Key in a MongoDB Cluster
MongoDB Server maintains a per database encryption key in the MongoDB cluster. In the preceding figure, there are three databases on the MongoDB cluster, each of which is encrypted with a unique database encryption key. Each of these keys are then encrypted with the
MongoDB Master Key
.
Data Encryption Key (in cloud provider terminology) or MongoDB Master Key
Atlas uses the customer provided encryption key to create an encrypted DEK. Atlas also uses a customer key management instance to decrypt this encrypted DEK and supply the resulting plaintext key to the MongoDB Server over the wire using TLS. When MongoDB Server uses this plaintext key, it refers to it as the
MongoDB Master Key
, whereas a cloud provider's customer key management instance might refer to it as a DEK. To learn more about DEKs, see Data Keys.
Customer Master Key (CMK)
Customer Master Key is a concept of a customer key management instance. CMKs are used to encrypt and decrypt a
MongoDB Master Key
(or DEK). The CMK exists only on the customer key management instance. To learn more about CMKs, see Data Keys.
Prerequisites
To enable customer-managed keys with AWS KMS for a MongoDB project, you must:
Use an M10 or larger cluster.
Use Cloud Backups to encrypt your backup snapshots. Legacy Backups are not supported.
Have a symmetric AWS KMS key . To learn how to create a key, see Creating Keys in the AWS documentation.
Have an AWS IAM role with sufficient privileges. Atlas must have permission to perform the following actions with your key:
Note
If you wish to use the AWS KMS key with an AWS IAM role from a different AWS account instead of that of the IAM role which created the AWS KMS key , ensure you have sufficient privileges:
Add a key policy statement under the AWS KMS key to include the external AWS account.
Add an IAM inline policy for the IAM role in the external AWS account.
For a comprehensive discussion of IAM roles and customer master keys, see the AWS documentation.
After confirming the above privileges, you can follow the usual steps to configure the KMS settings in Atlas, with the following exception:
You must provide the full ARN for the AWS KMS key (e.g.
arn:aws:kms:eu-west-2:111122223333:key/12345678-1234-1234-1234-12345678
) instead of the master key ID (e.g.12345678-1234-1234-1234-12345678
) in the AWS KMS key ID field.
To learn how to create an IAM role, see IAM Roles in the AWS documentation.
Atlas uses the same IAM role and AWS KMS key settings for all clusters in a project for which Encryption at Rest is enabled.
If your AWS KMS configuration requires it, allow access from Atlas IP addresses and the public IP addresses or DNS hostnames of your cluster nodes so that Atlas can communicate with your KMS. If the node IP addresses change, you must update your configuration to avoid connectivity interruptions.
Enable Role-Based Access to Your Encryption Key for a Project
Switch to Role-Based Access to Your Encryption Key for a Project
Important
If you switch your encryption keys to role-based access, you can't undo the role-based access configuration and revert to credentials-based access for encryption keys on that project.
Enable Customer Key Management for an Atlas Cluster
After you Enable Role-Based Access to Your Encryption Key for a Project, you must enable customer key management for each Atlas cluster that contains data that you want to encrypt.
Note
You must have the Project Owner
role to
enable customer key management for clusters in that project.
For new clusters, toggle the Manage your own encryption keys setting to Yes when you create the cluster.
For existing clusters:
Navigate to the Database Deployments page for your project.
If it is not already displayed, select the organization that contains your desired project from the Organizations menu in the navigation bar.
If it is not already displayed, select your desired project from the Projects menu in the navigation bar.
If the Database Deployments page is not already displayed, click Database in the sidebar.
Rotate your AWS Customer Master Key
Note
This feature is not available for
M0
free clusters,M2
, andM5
clusters. To learn more, see Atlas M0 (Free Cluster), M2, and M5 Limitations.This feature is not supported on Serverless instances at this time. To learn more, see Serverless Instance Limitations.
MongoDB Master Key - MongoDB Responsibility
When you use your own cloud provider KMS, Atlas automatically rotates the MongoDB master key (or DEK) every 90 days. These keys are rotated on a rolling basis and the process does not require the data to be rewritten.
Your AWS CMK - Your Responsibility
Atlas does not automatically rotate the AWS CMK used for AWS-provided Encryption at Rest.
As a best practice, Atlas creates an alert
to remind you
to rotate your AWS CMK every 90 days by default when you
enable Encryption at Rest for an Atlas
project. You can configure the time period of this alert.
You can rotate your AWS CMK yourself or configure your AWS KMS instance to automatically rotate your CMK. If you configure automatic AWS CMK rotation, the default time period for rotation is approximately 365 days.
If you have already set up an automatic CMK rotation in AWS and don't want to receive the Atlas alert to rotate your CMK every 90 days, you can modify the default alert period to be greater than 365 days.
This page explains how to create a new key and update the CMK ID in Atlas to rotate your Atlas project CMK. This method of key rotation supports more granular control of the rotation period compared to AWS KMS automatic CMK rotation.
Important
Cloud Backups with Encryption at Rest
For clusters using Encryption at Rest and Back Up Your Database Deployment, Atlas uses the project's CMK and AWS IAM user credentials at the time of the snapshot to automatically encrypt the snapshot data files. This is an additional layer of encryption on the existing encryption applied to all Atlas storage and snapshot volumes.
Atlas does not re-encrypt snapshots with the new CMK after rotation. Do not delete the old CMK until you check every backup-enabled cluster in the project for any snapshots still using that CMK. Atlas deletes backups in accordance to the Backup Scheduling, Retention, and On-Demand Snapshots. After Atlas deletes all snapshots depending on a given CMK, you can delete that CMK safely.
Procedure
Navigate to the Advanced page for your project.
If it is not already displayed, select the organization that contains your desired project from the Organizations menu in the navigation bar.
If it is not already displayed, select your desired project from the Projects menu in the navigation bar.
Click Advanced in the sidebar.
Update the AWS CMK details.
Enter the following information:
FieldActionAWS IAM roleSelect an existing AWS IAM role that already has access to your KMS keys, or authorize a new role and grant this role access to your KMS keys with the following permissions:
To learn more, see Role-Based Access to Your Encryption Key for a Project.
Customer Master Key IDEnter your AWS customer master key ID.Customer Master Key RegionSelect the AWS region in which you created your AWS CMK.
Note
Atlas only lists AWS regions that support AWS KMS.
Click Save.
Atlas displays a banner in the Atlas console during the CMK rotation process. Do not delete or disable the CMK until your changes have deployed.
Related Topics
To learn more about MongoDB Encryption at Rest, see Encryption at Rest in the MongoDB server documentation.
To learn more about Encryption at Rest with Cloud Backups, see Storage Engine and Cloud Backup Encryption.