Navigation

KeyVault.getKey()

On this page

New in version 4.2.

beta

Client-Side Field Level Encryption is available as a beta. The contents of this page may change during the beta period.

KeyVault.getKey(UUID)

Gets a data key with the specified UUID. The data key must exist in the key vault associated to the database connection.

getKey() has the following syntax:

keyVault = db.getMongo().getKeyVault()

keyVault.getKey(UUID("<UUID String>"))

The UUID is a BSON binary data object with subtype 4.

returns:

Document representing a matching data key.

Returns nothing if no key in the key vault has the specified UUID.

Behavior

Requires Configuring Client-Side Field Level Encryption on Database Connection

The mongo client-side field level encrytion methods require a database connection with client-side field level encryption enabled. If the current database connection was not initiated with client-side field level encryption enabled, either:

  • Use the Mongo() constructor from the mongo shell to establish a connection with the required client-side field level encryption options. The Mongo() method supports both Amazon Web Services and Local Key Management Service (KMS) providers for Customer Master Key (CMK) management.

    or

  • Use the mongo shell command line options to establish a connection with the required options. The command line options only support the AWS KMS provider for CMK management.

Example

The following example uses a locally managed KMS for the client-side field level encryption configuration.

Configuring client-side field level encryption for a locally managed key requires specifying a base64-encoded 96-byte string with no line breaks. The following operation generates a key that meets the stated requirements and loads it into the mongo shell:

TEST_LOCAL_KEY=$(echo "$(head -c 96 /dev/urandom | base64 | tr -d '\n')")

mongo --nodb --shell --eval "var TEST_LOCAL_KEY='$TEST_LOCAL_KEY'"

Create the client-side field level encryption object using the generated local key string:

var ClientSideFieldLevelEncryptionOptions = {
  "keyVaultNamespace" : "encryption.__dataKeys",
  "kmsProviders" : {
    "local" : {
      "key" : BinData(0, TEST_LOCAL_KEY)
    }
  }
}

Use the Mongo() constructor to create a database connection with the client-side field level encryption options. Replace the mongodb://myMongo.example.net URI with the connection string URI of the target cluster.

encryptedClient = Mongo(
  "mongodb://myMongo.example.net:27017/?replSetName=myMongo",
  ClientSideFieldLevelEncryptionOptions
)

Retrieve the keyVault object and use the KeyVault.getKey() to retrieve a data key using its UUID:

keyVault = encryptedClient.getKeyVault()
keyVault.getKey(UUID("b4b41b33-5c97-412e-a02b-743498346079"))

getKey() returns the following data key:

{
  "_id" : UUID("b4b41b33-5c97-412e-a02b-743498346079"),
  "keyMaterial" : BinData(0,"PXRsLOAYxhzTS/mFQAI8486da7BwZgqA91UI7NKz/T/AjB0uJZxTvhvmQQsKbCJYsWVS/cp5Rqy/FUX2zZwxJOJmI3rosPhzV0OI5y1cuXhAlLWlj03CnTcOSRzE/YIrsCjMB0/NyiZ7MRWUYzLAEQnE30d947XCiiHIb8a0kt2SD0so8vZvSuP2n0Vtz4NYqnzF0CkhZSWFa2e2yA=="),
  "creationDate" : ISODate("2019-08-12T21:21:30.569Z"),
  "updateDate" : ISODate("2019-08-12T21:21:30.569Z"),
  "status" : 0,
  "version" : NumberLong(0),
  "masterKey" : {
    "provider" : "aws",
    "key" : "arn:aws:kms:region:account:key/keystring",
    "region" : "region",
    "endpoint" : "kms.region.amazonaws.com:443"
  },
  "keyAltNames" : [
    "dataKeyAlternativeName"
  ]
}