- Tutorials >
- Client-Side Encryption
Client-Side Encryption
On this page
Client-Side Field Level Encryption allows administrators and developers to encrypt specific data fields in addition to other MongoDB encryption features.
Creating an Encryption Key
Note
The following examples use a local master key; however, other key providers such as AWS KMS are also an option. This master key is used to encrypt data keys that are stored locally. It is important that you keep this key secure.
To create an encryption key, create a MongoDB\Driver\ClientEncryption instance with encryption options and create a new data key. The method will return the key ID which can be used to reference the key later. You can also pass multiple alternate names for this key and reference the key by these names instead of the key ID. Creating a new data encryption key would typically be done on initial deployment, but depending on your use case you may want to use more than one encryption key or create them dynamically.
See also
Encryption Key Management in the MongoDB manual
Automatic Encryption and Decryption
Note
Auto encryption is an enterprise only feature.
The following example sets up a collection with automatic encryption based on a
$jsonSchema
validator. The data in the encryptedField
field is
automatically encrypted on insertion and decrypted when reading on the client
side.
Specifying an Explicit Schema for Encryption
The following example uses the schemaMap
encryption option to define
encrypted fields.
Note
Supplying a schemaMap
provides more security than relying on JSON schemas
obtained from the server. It protects against a malicious server advertising
a false JSON schema, which could trick the client into sending unencrypted
data that should be encrypted.
Manually Encrypting and Decrypting Values
In the MongoDB Community Edition, you will have to manually encrypt values before storing them in the database. The following example assumes that you have already created an encryption key in the key vault collection and explicitly encrypts and decrypts values in the document.
Referencing Encryption Keys by an Alternative Name
While it is possible to create an encryption key every time data is encrypted, this is not the recommended approach. Instead, you should create your encryption keys depending on your use case, e.g. by creating a user-specific encryption key. To reference keys in your software, you can use the keyAltName attribute specified when creating the key. The following example creates an encryption key with an alternative name, which could be done when deploying the application. The software then encrypts data by referencing the key by its alternative name.
To use an alternate name when referencing an encryption key, use the
keyAltName
option instead of keyId
.
Automatic Queryable Encryption
Note
Automatic queryable encryption is an enterprise only feature and requires MongoDB 7.0+.
The following example uses a local key; however, other key providers such as AWS
are also an option. The data in the encryptedIndexed
and
encryptedUnindexed
fields will be automatically encrypted on insertion and
decrypted when querying on the client side. Additionally, it is possible to
query on the encryptedIndexed
field.