Docs Menu
Docs Home
/ /

Crea tu aplicación con Queryable Encryption habilitada

Esta guía le muestra cómo crear una aplicación que implementa el cifrado consultable para cifrar y descifrar automáticamente los campos de documentos.

Después de completar los pasos de esta guía, debería tener una aplicación cliente en funcionamiento y lista para insertar documentos con campos cifrados con su clave maestra de cliente.

Asegúrese de haber completado las siguientes tareas previas antes de crear su solicitud:

  1. Instalar un controlador compatible con Queryable Encryption y sus dependencias

  2. Instalar y configurar un componente de análisis de consultas

  3. Crear una clave maestra de cliente

Si estas usando mongocryptd, su aplicación requiere permisos de escritura en el directorio de trabajo para crear el archivo mongocryptd.pid.

Para ver el código completo de la aplicación de muestra, seleccione su lenguaje de programación en el selector de lenguaje.

Cada repositorio de aplicaciones de ejemplo incluye un archivo README.md que puedes usar para aprender cómo configurar tu entorno y ejecutar la aplicación.

Seleccione la pestaña correspondiente a su proveedor de claves a continuación.

1

Los ejemplos de código de este tutorial utilizan las siguientes variables para realizar el flujo de trabajo de cifrado consultable:

  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este valor con los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca este valor "medicalRecords" en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

const kmsProviderName = "<Your KMS Provider Name>";
const uri = process.env.MONGODB_URI; // Your connection URI
const keyVaultDatabaseName = "encryption";
const keyVaultCollectionName = "__keyVault";
const keyVaultNamespace = `${keyVaultDatabaseName}.${keyVaultCollectionName}`;
const encryptedDatabaseName = "medicalRecords";
const encryptedCollectionName = "patients";
  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establezca keyVaultDatabaseName "encryption"en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establezca keyVaultCollectionName "__keyVault"en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca keyVaultNamespace como un nuevo CollectionNamespace objeto cuyo nombre contenga los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca encryptedDatabaseName "medicalRecords"en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establezca encryptedCollectionName "patients"en.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en el appsettings.json archivo o reemplace el valor directamente.

Puede declarar estas variables utilizando el siguiente código:

const string kmsProviderName = "<your KMS provider name>";
const string keyVaultDatabaseName = "encryption";
const string keyVaultCollectionName = "__keyVault";
var keyVaultNamespace =
CollectionNamespace.FromFullName($"{keyVaultDatabaseName}.{keyVaultCollectionName}");
const string encryptedDatabaseName = "medicalRecords";
const string encryptedCollectionName = "patients";
var appSettings = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
var uri = appSettings["MongoDbUri"];
  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este valor con los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca este valor "medicalRecords" en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

kmsProviderName := "<KMS provider name>"
uri := os.Getenv("MONGODB_URI") // Your connection URI
keyVaultDatabaseName := "encryption"
keyVaultCollectionName := "__keyVault"
keyVaultNamespace := keyVaultDatabaseName + "." + keyVaultCollectionName
encryptedDatabaseName := "medicalRecords"
encryptedCollectionName := "patients"
  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este valor con los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca este valor "medicalRecords" en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

String kmsProviderName = "<KMS provider name>";
String uri = QueryableEncryptionHelpers.getEnv("MONGODB_URI"); // Your connection URI
String keyVaultDatabaseName = "encryption";
String keyVaultCollectionName = "__keyVault";
String keyVaultNamespace = keyVaultDatabaseName + "." + keyVaultCollectionName;
String encryptedDatabaseName = "medicalRecords";
String encryptedCollectionName = "patients";
  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este valor con los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca este valor "medicalRecords" en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

const kmsProviderName = "<Your KMS Provider Name>";
const uri = process.env.MONGODB_URI; // Your connection URI
const keyVaultDatabaseName = "encryption";
const keyVaultCollectionName = "__keyVault";
const keyVaultNamespace = `${keyVaultDatabaseName}.${keyVaultCollectionName}`;
const encryptedDatabaseName = "medicalRecords";
const encryptedCollectionName = "patients";
  • $kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure la KMS_PROVIDER variable de entorno con su proveedor de'aws' claves:,, 'azure' 'gcp' 'kmip'o.

  • $uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno.

  • $keyVaultDatabaseName: La base de datos en MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establezca el valor de $keyVaultDatabaseName 'encryption'en.

  • $keyVaultCollectionName - La colección de MongoDB donde se almacenarán tus DEK. Establece esta variable en '__keyVault', que es la convención para ayudar a evitar confundirla con una colección de usuario.

  • $keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca esta variable con los valores de las $keyVaultDatabaseName $keyVaultCollectionName variables y, separados por un punto.

  • $encryptedDatabaseName: La base de datos en MongoDB donde se almacenarán sus datos cifrados. Establezca esta variable 'medicalRecords' en.

  • $encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establezca esta variable 'patients' en.

Puede declarar estas variables utilizando el siguiente código:

$kmsProviderName = getenv('KMS_PROVIDER');
$uri = getenv('MONGODB_URI'); // Your connection URI
$keyVaultDatabaseName = 'encryption';
$keyVaultCollectionName = '__keyVault';
$keyVaultNamespace = $keyVaultDatabaseName . '.' . $keyVaultCollectionName;
$encryptedDatabaseName = 'medicalRecords';
$encryptedCollectionName = 'patients';
  • kms_provider_name: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor como su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • key_vault_database_name: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • key_vault_collection_name: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • key_vault_namespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este espacio con los valores de las key_vault_database_name key_vault_collection_name variables y, separados por un punto.

  • encrypted_database_name: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establézcalo "medicalRecords" en.

  • encrypted_collection_name: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

kms_provider_name = "<KMS provider name>"
uri = os.environ['MONGODB_URI'] # Your connection URI
key_vault_database_name = "encryption"
key_vault_collection_name = "__keyVault"
key_vault_namespace = f"{key_vault_database_name}.{key_vault_collection_name}"
encrypted_database_name = "medicalRecords"
encrypted_collection_name = "patients"
  • kms_provider_name: El KMS que utiliza para almacenar su clave maestra de cliente. Establezca esta variable en "local" para este tutorial.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno.

  • key_vault_database_name: La base de datos de MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establezca esta variable "encryption" en.

  • key_vault_collection_name: La colección en MongoDB donde se almacenarán sus DEK. Establezca esta variable "__keyVault" en, que es la convención para evitar que se confunda con una colección de usuario.

  • key_vault_namespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca esta variable en una Namespace estructura y pase los valores de las key_vault_database_name key_vault_collection_name variables y.

  • encrypted_database_name: La base de datos en MongoDB donde se almacenarán sus datos cifrados. Establezca esta variable "medicalRecords" en.

  • encrypted_collection_name: La colección en MongoDB donde se almacenarán sus datos cifrados. Establezca esta variable "patients" en.

Puede declarar estas variables utilizando el siguiente código:

let kms_provider_name = "<KMS provider name>";
let uri = env::var("MONGODB_URI").expect("Set MONGODB_URI environment variable to your connection string");
let key_vault_database_name = "encryption";
let key_vault_collection_name = "__keyVault";
let key_vault_namespace = Namespace::new(key_vault_database_name, key_vault_collection_name);
let encrypted_database_name = "medicalRecords";
let encrypted_collection_name = "patients";

Importante

Permisos del espacio de nombres de la colección Key Vault

La colección Key Vault se encuentra en el encryption.__keyVault espacio de nombres. Asegúrese de que el usuario de la base de datos que su aplicación usa para conectarse a MongoDB tenga permisos de lectura y escritura en este espacio de nombres.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

2

Cree una variable que contenga sus credenciales de KMS con la siguiente estructura. Use el ID de clave de acceso y la clave de acceso secreta que utilizó en el paso 2.2 al crear un usuario de AWS IAM.

kmsProviderCredentials = {
aws: {
accessKeyId: process.env["AWS_ACCESS_KEY_ID"], // Your AWS access key ID
secretAccessKey: process.env["AWS_SECRET_ACCESS_KEY"], // Your AWS secret access key
},
};

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puedes nombrar a tu proveedor de AWS KMS "my_aws_provider" en la variable de credenciales de KMS, como se muestra en el siguiente código:

kmsProviderCredentials = {
"aws:my_aws_provider": {
accessKeyId: process.env["AWS_ACCESS_KEY_ID"], // Your AWS access key ID
secretAccessKey: process.env["AWS_SECRET_ACCESS_KEY"], // Your AWS secret access key
},
};

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"aws" predeterminada,.

var kmsProviderCredentials = new Dictionary<string, IReadOnlyDictionary<string, object>>();
var kmsOptions = new Dictionary<string, object>
{
{ "accessKeyId", _appSettings["Aws:AccessKeyId"] }, // Your AWS access key ID
{ "secretAccessKey", _appSettings["Aws:SecretAccessKey"] } // Your AWS secret access key
};
kmsProviderCredentials.Add("aws", kmsOptions);

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puedes nombrar a tu proveedor de AWS KMS "my_aws_provider" en la variable de credenciales de KMS, como se muestra en el siguiente código:

var kmsProviderCredentials = new Dictionary<string, IReadOnlyDictionary<string, object>>();
var kmsOptions = new Dictionary<string, object>
{
{ "accessKeyId", _appSettings["Aws:AccessKeyId"] }, // Your AWS access key ID
{ "secretAccessKey", _appSettings["Aws:SecretAccessKey"] } // Your AWS secret access key
};
kmsProviderCredentials.Add("aws:my_aws_provider", kmsOptions);

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"aws" predeterminada,.

kmsProviderCredentials := map[string]map[string]interface{}{
"aws": {
"accessKeyId": os.Getenv("AWS_ACCESS_KEY_ID"), // AWS access key ID
"secretAccessKey": os.Getenv("AWS_SECRET_ACCESS_KEY"), // AWS secret access key
},
}
Map<String, Object> kmsProviderDetails = new HashMap<>();
kmsProviderDetails.put("accessKeyId", getEnv("AWS_ACCESS_KEY_ID")); // Your AWS access key ID
kmsProviderDetails.put("secretAccessKey", getEnv("AWS_SECRET_ACCESS_KEY")); // Your AWS secret access key
Map<String, Map<String, Object>> kmsProviderCredentials = new HashMap<String, Map<String, Object>>();
kmsProviderCredentials.put("aws", kmsProviderDetails);

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puedes nombrar a tu proveedor de AWS KMS "my_aws_provider" en la variable de credenciales de KMS, como se muestra en el siguiente código:

Map<String, Object> kmsProviderDetails = new HashMap<>();
kmsProviderDetails.put("accessKeyId", getEnv("AWS_ACCESS_KEY_ID")); // Your AWS access key ID
kmsProviderDetails.put("secretAccessKey", getEnv("AWS_SECRET_ACCESS_KEY")); // Your AWS secret access key
Map<String, Map<String, Object>> kmsProviderCredentials = new HashMap<String, Map<String, Object>>();
kmsProviderCredentials.put("aws:my_aws_provider", kmsProviderDetails);

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"aws" predeterminada,.

kmsProviders = {
aws: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID, // Your AWS access key ID
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, // Your AWS secret access key
},
};

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puedes nombrar a tu proveedor de AWS KMS "my_aws_provider" en la variable de credenciales de KMS, como se muestra en el siguiente código:

kmsProviderCredentials = {
"aws:my_aws_provider": {
accessKeyId: process.env["AWS_ACCESS_KEY_ID"], // Your AWS access key ID
secretAccessKey: process.env["AWS_SECRET_ACCESS_KEY"], // Your AWS secret access key
},
};

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"aws" predeterminada,.

$kmsProviders = [
'aws' => [
'accessKeyId' => getenv('AWS_ACCESS_KEY_ID'), // Your AWS access key ID
'secretAccessKey' => getenv('AWS_SECRET_ACCESS_KEY'), // Your AWS secret access key
],
];

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puede nombrar su proveedor de AWS KMS 'my_aws_provider' en su variable de credenciales de KMS como se muestra en el siguiente código:

$kmsProviders = [
'aws:my_aws_provider' => [
'accessKeyId' => getenv('AWS_ACCESS_KEY_ID'), // Your AWS access key ID
'secretAccessKey' => getenv('AWS_SECRET_ACCESS_KEY'), // Your AWS secret access key
],
];

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"aws" predeterminada,.

kms_provider_credentials = {
"aws": {
"accessKeyId": os.environ['AWS_ACCESS_KEY_ID'], # Your AWS access key ID
"secretAccessKey": os.environ['AWS_SECRET_ACCESS_KEY'] # Your AWS secret access key
}
}

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puedes nombrar a tu proveedor de AWS KMS "my_aws_provider" en la variable de credenciales de KMS, como se muestra en el siguiente código:

kms_provider_credentials = {
"aws:my_aws_provider": {
"accessKeyId": os.environ['AWS_ACCESS_KEY_ID'], # Your AWS access key ID
"secretAccessKey": os.environ['AWS_SECRET_ACCESS_KEY'] # Your AWS secret access key
}
}

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"aws" predeterminada,.

kms_providers = vec![(
KmsProvider::aws(),
doc! {
"accessKeyId": env::var("AWS_ACCESS_KEY_ID").expect("Set AWS_ACCESS_KEY_ID environment variable"),
"secretAccessKey": env::var("AWS_SECRET_ACCESS_KEY").expect("Set AWS_SECRET_ACCESS_KEY environment variable"),
},
None,
)];

También puede proporcionar un nombre personalizado para su proveedor de KMS pasándolo como una cadena a la función with_name(). Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores de KMS del mismo tipo.

Por ejemplo, puedes nombrar a tu proveedor de AWS KMS "my_aws_provider" en la variable de credenciales de KMS, como se muestra en el siguiente código:

kms_providers = vec![(
KmsProvider::aws().with_name("my_aws_provider"),
doc! {
"accessKeyId": env::var("AWS_ACCESS_KEY_ID").expect("Set AWS_ACCESS_KEY_ID environment variable"),
"secretAccessKey": env::var("AWS_SECRET_ACCESS_KEY").expect("Set AWS_SECRET_ACCESS_KEY environment variable"),
},
None,
)];

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"aws" predeterminada,.

Importante

Recordatorio: Autenticarse con roles de IAM en producción

Para utilizar un En lugar de un usuario de IAM para autenticar su aplicación, especifique un objeto vacío para sus credenciales en el objeto de proveedor KMS. Esto indica al controlador que recupere automáticamente las credenciales del entorno:

kmsProviders = {
aws: { }
};
kmsProviderCredentials.Add("aws", new Dictionary<string, object>);
kmsProviderCredentials := map[string]map[string]interface{}{
"aws": { },
}
kmsProviderCredentials.put("aws", new HashMap<>());
kmsProviders = {
aws: { }
};
$kmsProviders = [
'aws' => [],
];
kms_provider_credentials = {
"aws": { }
}
kms_providers = vec![(
KmsProvider::aws(),
doc! {},
None,
)];

No puedes recuperar credenciales automáticamente si estás usando un proveedor KMS designado.

3

Cree una variable que contenga sus credenciales de clave maestra de cliente con la siguiente estructura. Utilice el ARN y la región que registró en el paso 1.3 al crear una CMK.

customerMasterKeyCredentials = {
key: process.env["AWS_KEY_ARN"], // Your AWS Key ARN
region: process.env["AWS_KEY_REGION"], // Your AWS Key Region
};
var customerMasterKeyCredentials = new BsonDocument
{
{ "key", _appSettings["Aws:KeyArn"] }, // Your AWS Key ARN
{ "region", _appSettings["Aws:KeyRegion"] } // Your AWS Key Region
};
customerMasterKeyCredentials := map[string]string{
"key": os.Getenv("AWS_KEY_ARN"), // Your AWS Key ARN
"region": os.Getenv("AWS_KEY_REGION"), // Your AWS Key Region
}
BsonDocument customerMasterKeyCredentials = new BsonDocument();
customerMasterKeyCredentials.put("provider", new BsonString(kmsProviderName));
customerMasterKeyCredentials.put("key", new BsonString(getEnv("AWS_KEY_ARN"))); // Your AWS Key ARN
customerMasterKeyCredentials.put("region", new BsonString(getEnv("AWS_KEY_REGION"))); // Your AWS Key Region
customerMasterKeyCredentials = {
key: process.env.AWS_KEY_ARN, // Your AWS Key ARN
region: process.env.AWS_KEY_REGION, // Your AWS Key Region
};
$customerMasterKeyCredentials = [
'key' => getenv('AWS_KEY_ARN'), // Your AWS key ARN
'region' => getenv('AWS_REGION'), // Your AWS region
];
customer_master_key_credentials = {
"key": os.environ['AWS_KEY_ARN'], # Your AWS Key ARN
"region": os.environ['AWS_KEY_REGION'] # Your AWS Key Region
}
let aws_master_key = AwsMasterKey::builder()
.key(env::var("AWS_KEY_ARN").expect("Set the AWS_KEY_ARN environment variable"))
.region(env::var("AWS_KEY_REGION").expect("Set the AWS_KEY_REGION environment variable"))
.build();
4

Nota

Opciones de cifrado automático

Las opciones de cifrado automático proporcionan información de configuración a la biblioteca compartida de cifrado automático, que modifica el comportamiento de la aplicación al acceder a campos cifrados.

Para obtener más información sobre la biblioteca compartida de cifrado automático, consulte la página Biblioteca compartida de cifrado automático.

Crea un objeto autoEncryptionOptions con las siguientes opciones:

  • El espacio de nombres de su colección de Key Vault

  • El objeto kmsProviderCredentials, que contiene sus credenciales de AWS KMS

const autoEncryptionOptions = {
keyVaultNamespace: keyVaultNamespace,
kmsProviders: kmsProviderCredentials,
};

Crea un objeto AutoEncryptionOptions con las siguientes opciones:

  • El espacio de nombres de su colección de Key Vault

  • El objeto kmsProviderCredentials, que contiene sus credenciales de AWS KMS

  • El objeto extraOptions, que contiene la ruta a su biblioteca compartida de cifrado automático

var extraOptions = new Dictionary<string, object>
{
{ "cryptSharedLibPath", _appSettings["CryptSharedLibPath"] } // Path to your Automatic Encryption Shared Library
};
var autoEncryptionOptions = new AutoEncryptionOptions(
keyVaultNamespace,
kmsProviderCredentials,
extraOptions: extraOptions);

Crea un objeto AutoEncryption con las siguientes opciones:

  • El espacio de nombres de su colección de Key Vault

  • El objeto kmsProviderCredentials, que contiene sus credenciales de AWS KMS

  • El objeto cryptSharedLibraryPath, que contiene la ruta a su biblioteca compartida de cifrado automático

cryptSharedLibraryPath := map[string]interface{}{
"cryptSharedLibPath": os.Getenv("SHARED_LIB_PATH"), // Path to your Automatic Encryption Shared Library
}
autoEncryptionOptions := options.AutoEncryption().
SetKeyVaultNamespace(keyVaultNamespace).
SetKmsProviders(kmsProviderCredentials).
SetExtraOptions(cryptSharedLibraryPath)

Crea un objeto AutoEncryptionSettings con las siguientes opciones:

  • El espacio de nombres de su colección de Key Vault

  • El objeto kmsProviderCredentials, que contiene sus credenciales de AWS KMS

  • El objeto extraOptions, que contiene la ruta a su biblioteca compartida de cifrado automático

Map<String, Object> extraOptions = new HashMap<String, Object>();
extraOptions.put("cryptSharedLibPath", getEnv("SHARED_LIB_PATH")); // Path to your Automatic Encryption Shared Library
AutoEncryptionSettings autoEncryptionSettings = AutoEncryptionSettings.builder()
.keyVaultNamespace(keyVaultNamespace)
.kmsProviders(kmsProviderCredentials)
.extraOptions(extraOptions)
.build();

Si omite keyVaultClient o establece bypassAutomaticEncryption como falso en su objeto AutoEncryptionSettings, el controlador crea un MongoClient interno independiente. La configuración interna MongoClient difiere de la configuración principal MongoClient al establecer minPoolSize como 0 y ​​omitir AutoEncryptionSettings.

Crea un objeto autoEncryptionOptions con las siguientes opciones:

  • El espacio de nombres de su colección de Key Vault

  • El objeto kmsProviders, que contiene sus credenciales de AWS KMS

  • El objeto sharedLibraryPathOptions, que contiene la ruta a su biblioteca compartida de cifrado automático

const extraOptions = {
cryptSharedLibPath: process.env.SHARED_LIB_PATH, // Path to your Automatic Encryption Shared Library
};
const autoEncryptionOptions = {
keyVaultNamespace,
kmsProviders,
extraOptions,
};

Crea un objeto $autoEncryptionOptions que contenga las siguientes opciones:

  • El espacio de nombres de su colección de Key Vault

  • El objeto $kmsProviders, definido en el paso anterior

$autoEncryptionOptions = [
'keyVaultNamespace' => $keyVaultNamespace,
'kmsProviders' => $kmsProviders,
];

Crea un objeto AutoEncryptionOpts con las siguientes opciones:

  • El objeto kms_provider_credentials, que contiene sus credenciales de AWS KMS

  • El espacio de nombres de su colección de Key Vault

  • La ruta a su biblioteca compartida de cifrado automático

auto_encryption_options = AutoEncryptionOpts(
kms_provider_credentials,
key_vault_namespace,
crypt_shared_lib_path=os.environ['SHARED_LIB_PATH'] # Path to your Automatic Encryption Shared Library>
)

Crea un objeto EncryptedClientBuilder que contenga las siguientes opciones:

  • Un objeto ClientOptions

  • El espacio de nombres de su colección de Key Vault

  • El objeto kms_providers, que contiene sus credenciales de AWS KMS

let client_options = ClientOptions::builder().build();
let builder = Client::encrypted_builder(
client_options,
key_vault_namespace.clone(),
kms_providers.clone()
).expect("");
5

Para crear un cliente utilizado para cifrar y descifrar datos en su colección, cree una instancia de MongoClient nueva mediante su URI de conexión y sus opciones de cifrado automático.

const encryptedClient = Mongo(uri, autoEncryptionOptions);

IMPORTANTE: Si está utilizando la versión del controlador .NET/C# 3.0 o posterior, debe agregar el siguiente código a su aplicación antes de crear una instancia de un MongoClient nuevo:

MongoClientSettings.Extensions.AddAutoEncryption(); // .NET/C# Driver v3.0 or later only

Cree una instancia nueva de MongoClient mediante su URI de conexión y las opciones de cifrado automático:

var clientSettings = MongoClientSettings.FromConnectionString(uri);
clientSettings.AutoEncryptionOptions = qeHelpers.GetAutoEncryptionOptions(
keyVaultNamespace,
kmsProviderCredentials);
var encryptedClient = new MongoClient(clientSettings);
opts := options.Client().
ApplyURI(uri).
SetAutoEncryptionOptions(autoEncryptionOptions)
encryptedClient, err := mongo.Connect(opts)
if err != nil {
panic(fmt.Sprintf("Unable to connect to MongoDB: %v\n", err))
}
defer func() {
_ = encryptedClient.Disconnect(context.TODO())
}()
MongoClientSettings clientSettings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString(uri))
.autoEncryptionSettings(autoEncryptionSettings)
.build();
try (MongoClient encryptedClient = MongoClients.create(clientSettings)) {
const encryptedClient = new MongoClient(uri, {
autoEncryption: autoEncryptionOptions,
});
$encryptedClient = new \MongoDB\Client($uri, [], [
'autoEncryption' => $autoEncryptionOptions,
]);
encrypted_client = MongoClient(
uri, auto_encryption_opts=auto_encryption_options)
let encrypted_client = encrypted_client_builder
.extra_options(Some(doc!{
"cryptSharedLibPath": env::var("SHARED_LIB_PATH").expect("Set SHARED_LIB_PATH environment variable to path to crypt_shared library")
}))
.key_vault_client(Client::with_uri_str(uri).await.unwrap())
.build()
.await
.unwrap();
1

Los ejemplos de código de este tutorial utilizan las siguientes variables para realizar el flujo de trabajo de cifrado consultable:

  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este valor con los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca este valor "medicalRecords" en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

const kmsProviderName = "<Your KMS Provider Name>";
const uri = process.env.MONGODB_URI; // Your connection URI
const keyVaultDatabaseName = "encryption";
const keyVaultCollectionName = "__keyVault";
const keyVaultNamespace = `${keyVaultDatabaseName}.${keyVaultCollectionName}`;
const encryptedDatabaseName = "medicalRecords";
const encryptedCollectionName = "patients";
  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establezca keyVaultDatabaseName "encryption"en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establezca keyVaultCollectionName "__keyVault"en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca keyVaultNamespace como un nuevo CollectionNamespace objeto cuyo nombre contenga los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca encryptedDatabaseName "medicalRecords"en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establezca encryptedCollectionName "patients"en.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en el appsettings.json archivo o reemplace el valor directamente.

Puede declarar estas variables utilizando el siguiente código:

const string kmsProviderName = "<your KMS provider name>";
const string keyVaultDatabaseName = "encryption";
const string keyVaultCollectionName = "__keyVault";
var keyVaultNamespace =
CollectionNamespace.FromFullName($"{keyVaultDatabaseName}.{keyVaultCollectionName}");
const string encryptedDatabaseName = "medicalRecords";
const string encryptedCollectionName = "patients";
var appSettings = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
var uri = appSettings["MongoDbUri"];
  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este valor con los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca este valor "medicalRecords" en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

kmsProviderName := "<KMS provider name>"
uri := os.Getenv("MONGODB_URI") // Your connection URI
keyVaultDatabaseName := "encryption"
keyVaultCollectionName := "__keyVault"
keyVaultNamespace := keyVaultDatabaseName + "." + keyVaultCollectionName
encryptedDatabaseName := "medicalRecords"
encryptedCollectionName := "patients"
  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este valor con los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca este valor "medicalRecords" en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

String kmsProviderName = "<KMS provider name>";
String uri = QueryableEncryptionHelpers.getEnv("MONGODB_URI"); // Your connection URI
String keyVaultDatabaseName = "encryption";
String keyVaultCollectionName = "__keyVault";
String keyVaultNamespace = keyVaultDatabaseName + "." + keyVaultCollectionName;
String encryptedDatabaseName = "medicalRecords";
String encryptedCollectionName = "patients";
  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este valor con los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca este valor "medicalRecords" en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

const kmsProviderName = "<Your KMS Provider Name>";
const uri = process.env.MONGODB_URI; // Your connection URI
const keyVaultDatabaseName = "encryption";
const keyVaultCollectionName = "__keyVault";
const keyVaultNamespace = `${keyVaultDatabaseName}.${keyVaultCollectionName}`;
const encryptedDatabaseName = "medicalRecords";
const encryptedCollectionName = "patients";
  • $kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure la KMS_PROVIDER variable de entorno con su proveedor de'aws' claves:,, 'azure' 'gcp' 'kmip'o.

  • $uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno.

  • $keyVaultDatabaseName: La base de datos en MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establezca el valor de $keyVaultDatabaseName 'encryption'en.

  • $keyVaultCollectionName - La colección de MongoDB donde se almacenarán tus DEK. Establece esta variable en '__keyVault', que es la convención para ayudar a evitar confundirla con una colección de usuario.

  • $keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca esta variable con los valores de las $keyVaultDatabaseName $keyVaultCollectionName variables y, separados por un punto.

  • $encryptedDatabaseName: La base de datos en MongoDB donde se almacenarán sus datos cifrados. Establezca esta variable 'medicalRecords' en.

  • $encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establezca esta variable 'patients' en.

Puede declarar estas variables utilizando el siguiente código:

$kmsProviderName = getenv('KMS_PROVIDER');
$uri = getenv('MONGODB_URI'); // Your connection URI
$keyVaultDatabaseName = 'encryption';
$keyVaultCollectionName = '__keyVault';
$keyVaultNamespace = $keyVaultDatabaseName . '.' . $keyVaultCollectionName;
$encryptedDatabaseName = 'medicalRecords';
$encryptedCollectionName = 'patients';
  • kms_provider_name: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor como su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • key_vault_database_name: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • key_vault_collection_name: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • key_vault_namespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este espacio con los valores de las key_vault_database_name key_vault_collection_name variables y, separados por un punto.

  • encrypted_database_name: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establézcalo "medicalRecords" en.

  • encrypted_collection_name: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

kms_provider_name = "<KMS provider name>"
uri = os.environ['MONGODB_URI'] # Your connection URI
key_vault_database_name = "encryption"
key_vault_collection_name = "__keyVault"
key_vault_namespace = f"{key_vault_database_name}.{key_vault_collection_name}"
encrypted_database_name = "medicalRecords"
encrypted_collection_name = "patients"
  • kms_provider_name: El KMS que utiliza para almacenar su clave maestra de cliente. Establezca esta variable en "local" para este tutorial.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno.

  • key_vault_database_name: La base de datos de MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establezca esta variable "encryption" en.

  • key_vault_collection_name: La colección en MongoDB donde se almacenarán sus DEK. Establezca esta variable "__keyVault" en, que es la convención para evitar que se confunda con una colección de usuario.

  • key_vault_namespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca esta variable en una Namespace estructura y pase los valores de las key_vault_database_name key_vault_collection_name variables y.

  • encrypted_database_name: La base de datos en MongoDB donde se almacenarán sus datos cifrados. Establezca esta variable "medicalRecords" en.

  • encrypted_collection_name: La colección en MongoDB donde se almacenarán sus datos cifrados. Establezca esta variable "patients" en.

Puede declarar estas variables utilizando el siguiente código:

let kms_provider_name = "<KMS provider name>";
let uri = env::var("MONGODB_URI").expect("Set MONGODB_URI environment variable to your connection string");
let key_vault_database_name = "encryption";
let key_vault_collection_name = "__keyVault";
let key_vault_namespace = Namespace::new(key_vault_database_name, key_vault_collection_name);
let encrypted_database_name = "medicalRecords";
let encrypted_collection_name = "patients";

Importante

Permisos del espacio de nombres de la colección Key Vault

La colección Key Vault se encuentra en el encryption.__keyVault espacio de nombres. Asegúrese de que el usuario de la base de datos que su aplicación usa para conectarse a MongoDB tenga permisos de lectura y escritura en este espacio de nombres.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

2

Cree una variable que contenga sus credenciales de KMS con la siguiente estructura. Use las credenciales de Azure Key Vault que registró al registrar su aplicación en Azure.

kmsProviderCredentials = {
azure: {
tenantId: process.env["AZURE_TENANT_ID"], // Your Azure tenant ID
clientId: process.env["AZURE_CLIENT_ID"], // Your Azure client ID
clientSecret: process.env["AZURE_CLIENT_SECRET"], // Your Azure client secret
},
};

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puede nombrar su proveedor de Azure KMS "my_azure_provider" en su variable de credenciales de KMS como se muestra en el siguiente código:

kmsProviderCredentials = {
"azure:my_azure_provider": {
tenantId: process.env["AZURE_TENANT_ID"], // Your Azure tenant ID
clientId: process.env["AZURE_CLIENT_ID"], // Your Azure client ID
clientSecret: process.env["AZURE_CLIENT_SECRET"], // Your Azure client secret
},
};

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"azure" predeterminada,.

var kmsProviderCredentials = new Dictionary<string, IReadOnlyDictionary<string, object>>();
var kmsOptions = new Dictionary<string, object>
{
{ "tenantId", _appSettings["Azure:TenantId"] }, // Your Azure tenant ID
{ "clientId", _appSettings["Azure:ClientId"] }, // Your Azure client ID
{ "clientSecret", _appSettings["Azure:ClientSecret"] } // Your Azure client secret
};
kmsProviderCredentials.Add("azure", kmsOptions);

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puede nombrar su proveedor de Azure KMS "my_azure_provider" en su variable de credenciales de KMS como se muestra en el siguiente código:

var kmsProviderCredentials = new Dictionary<string, IReadOnlyDictionary<string, object>>();
var kmsOptions = new Dictionary<string, object>
{
{ "tenantId", _appSettings["Azure:TenantId"] }, // Your Azure tenant ID
{ "clientId", _appSettings["Azure:ClientId"] }, // Your Azure client ID
{ "clientSecret", _appSettings["Azure:ClientSecret"] } // Your Azure client secret
};
kmsProviderCredentials.Add("azure:my_azure_provider", kmsOptions);

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"azure" predeterminada,.

kmsProviderCredentials := map[string]map[string]interface{}{
"azure": {
"tenantId": os.Getenv("AZURE_TENANT_ID"), // Azure tenant ID
"clientId": os.Getenv("AZURE_CLIENT_ID"), // Azure client ID
"clientSecret": os.Getenv("AZURE_CLIENT_SECRET"), // Azure client secret
},
}
Map<String, Object> kmsProviderDetails = new HashMap<>();
kmsProviderDetails.put("tenantId", getEnv("AZURE_TENANT_ID")); // Your Azure tenant ID
kmsProviderDetails.put("clientId", getEnv("AZURE_CLIENT_ID")); // Your Azure client ID
kmsProviderDetails.put("clientSecret", getEnv("AZURE_CLIENT_SECRET")); // Your Azure client secret
Map<String, Map<String, Object>> kmsProviderCredentials = new HashMap<String, Map<String, Object>>();
kmsProviderCredentials.put("azure", kmsProviderDetails);

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puede nombrar su proveedor de Azure KMS "my_azure_provider" en su variable de credenciales de KMS como se muestra en el siguiente código:

Map<String, Object> kmsProviderDetails = new HashMap<>();
kmsProviderDetails.put("tenantId", getEnv("AZURE_TENANT_ID")); // Your Azure tenant ID
kmsProviderDetails.put("clientId", getEnv("AZURE_CLIENT_ID")); // Your Azure client ID
kmsProviderDetails.put("clientSecret", getEnv("AZURE_CLIENT_SECRET")); // Your Azure client secret
Map<String, Map<String, Object>> kmsProviderCredentials = new HashMap<String, Map<String, Object>>();
kmsProviderCredentials.put("azure:my_azure_provider", kmsProviderDetails);

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"azure" predeterminada,.

kmsProviders = {
azure: {
tenantId: process.env.AZURE_TENANT_ID, // Your Azure tenant ID
clientId: process.env.AZURE_CLIENT_ID, // Your Azure client ID
clientSecret: process.env.AZURE_CLIENT_SECRET, // Your Azure client secret
},
};

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puede nombrar su proveedor de Azure KMS "my_azure_provider" en su variable de credenciales de KMS como se muestra en el siguiente código:

kmsProviderCredentials = {
"azure:my_azure_provider": {
tenantId: process.env.AZURE_TENANT_ID, // Your Azure tenant ID
clientId: process.env.AZURE_CLIENT_ID, // Your Azure client ID
clientSecret: process.env.AZURE_CLIENT_SECRET, // Your Azure client secret
},
};

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"azure" predeterminada,.

$kmsProviders = [
'azure' => [
'tenantId' => getenv('AZURE_TENANT_ID'), // Your Azure tenant ID
'clientId' => getenv('AZURE_CLIENT_ID'), // Your Azure client ID
'clientSecret' => getenv('AZURE_CLIENT_SECRET'), // Your Azure client secret
],
];

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puedes nombrar tu proveedor KMS de Azure como 'my_azure_provider' en la variable de credenciales de tu KMS, como se muestra en el siguiente código:

$kmsProviders = [
'azure:my_azure_provider' => [
'tenantId' => getenv('AZURE_TENANT_ID'), // Your Azure tenant ID
'clientId' => getenv('AZURE_CLIENT_ID'), // Your Azure client ID
'clientSecret' => getenv('AZURE_CLIENT_SECRET'), // Your Azure client secret
],
];

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS'azure' predeterminada,.

kms_provider_credentials = {
"azure": {
"tenantId": os.environ['AZURE_TENANT_ID'], # Your Azure tenant ID
"clientId": os.environ['AZURE_CLIENT_ID'], # Your Azure client ID
"clientSecret": os.environ['AZURE_CLIENT_SECRET'] # Your Azure client secret
}
}

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puede nombrar su proveedor de Azure KMS "my_azure_provider" en su variable de credenciales de KMS como se muestra en el siguiente código:

kms_provider_credentials = {
"azure:my_azure_provider": {
"tenantId": os.environ['AZURE_TENANT_ID'], # Your Azure tenant ID
"clientId": os.environ['AZURE_CLIENT_ID'], # Your Azure client ID
"clientSecret": os.environ['AZURE_CLIENT_SECRET'] # Your Azure client secret
}
}

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"azure" predeterminada,.

kms_providers = vec![(
KmsProvider::azure(),
doc! {
"tenantId": env::var("AZURE_TENANT_ID").expect("Set AZURE_TENANT_ID environment variable"),
"clientId": env::var("AZURE_CLIENT_ID").expect("Set AZURE_CLIENT_ID environment variable"),
"clientSecret": env::var("AZURE_CLIENT_SECRET").expect("AZURE_CLIENT_SECRET environment variable"),
},
None,
)];

También puede proporcionar un nombre personalizado para su proveedor de KMS pasándolo como una cadena a la función with_name(). Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores de KMS del mismo tipo.

Por ejemplo, puede nombrar su proveedor de Azure KMS "my_azure_provider" en su variable de credenciales de KMS como se muestra en el siguiente código:

kms_providers = vec![(
KmsProvider::azure().with_name("my_azure_provider"),
doc! {
"tenantId": env::var("AZURE_TENANT_ID").expect("Set AZURE_TENANT_ID environment variable"),
"clientId": env::var("AZURE_CLIENT_ID").expect("Set AZURE_CLIENT_ID environment variable"),
"clientSecret": env::var("AZURE_CLIENT_SECRET").expect("AZURE_CLIENT_SECRET environment variable"),
},
None,
)];

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"azure" predeterminada,.

3

Cree una variable que contenga sus credenciales de clave maestra de cliente con la siguiente estructura. Utilice los datos de la CMK que registró al crearla.

customerMasterKeyCredentials = {
keyVaultEndpoint: process.env["AZURE_KEY_VAULT_ENDPOINT"], // Your Azure Key Vault Endpoint
keyName: process.env["AZURE_KEY_NAME"], // Your Azure Key Name
};
var customerMasterKeyCredentials = new BsonDocument
{
{ "keyVaultEndpoint", _appSettings["Azure:KeyVaultEndpoint"] }, // Your Azure Key Vault Endpoint
{ "keyName", _appSettings["Azure:KeyName"] } // Your Azure Key Name
};
customerMasterKeyCredentials := map[string]string{
"keyVaultEndpoint": os.Getenv("AZURE_KEY_VAULT_ENDPOINT"), // Your Azure Key Vault Endpoint
"keyName": os.Getenv("AZURE_KEY_NAME"), // Your Azure Key Name
}
BsonDocument customerMasterKeyCredentials = new BsonDocument();
customerMasterKeyCredentials.put("provider", new BsonString(kmsProviderName));
customerMasterKeyCredentials.put("keyName", new BsonString(getEnv("AZURE_KEY_NAME"))); // Your Azure Key Vault Endpoint
customerMasterKeyCredentials.put("keyVaultEndpoint", new BsonString(getEnv("AZURE_KEY_VAULT_ENDPOINT"))); // Your Azure Key Name
customerMasterKeyCredentials = {
keyVaultEndpoint: process.env.AZURE_KEY_VAULT_ENDPOINT, // Your Azure Key Vault Endpoint
keyName: process.env.AZURE_KEY_NAME, // Your Azure Key Name
};
$customerMasterKeyCredentials = [
'keyVaultEndpoint' => getenv('AZURE_KEY_VAULT_ENDPOINT'), // Your Azure Key Vault Endpoint
'keyName' => getenv('AZURE_KEY_NAME'), // Your Azure Key Name
];
customer_master_key_credentials = {
"keyName": os.environ['AZURE_KEY_NAME'], # Your Azure key name
"keyVaultEndpoint": os.environ['AZURE_KEY_VAULT_ENDPOINT'] # Your Azure key vault endpoint
}
let azure_master_key = AzureMasterKey::builder()
.key_vault_endpoint(env::var("AZURE_KEY_VAULT_ENDPOINT").expect("Set the AZURE_KEY_VAULT_ENDPOINT environment variable"))
.key_name(env::var("AZURE_KEY_NAME").expect("Set the AZURE_KEY_NAME environment variable"))
.build();
4

Para crear un cliente para cifrar y descifrar datos en colecciones cifradas, cree una instancia de MongoClient nueva usando su URI de conexión y las opciones de cifrado automático.

const encryptedClient = Mongo(uri, autoEncryptionOptions);

IMPORTANTE: Si está utilizando la versión del controlador .NET/C# 3.0 o posterior, debe agregar el siguiente código a su aplicación antes de crear una instancia de un MongoClient nuevo:

MongoClientSettings.Extensions.AddAutoEncryption(); // .NET/C# Driver v3.0 or later only

Cree una instancia nueva de MongoClient mediante su URI de conexión y las opciones de cifrado automático:

var clientSettings = MongoClientSettings.FromConnectionString(uri);
clientSettings.AutoEncryptionOptions = qeHelpers.GetAutoEncryptionOptions(
keyVaultNamespace,
kmsProviderCredentials);
var encryptedClient = new MongoClient(clientSettings);
opts := options.Client().
ApplyURI(uri).
SetAutoEncryptionOptions(autoEncryptionOptions)
encryptedClient, err := mongo.Connect(opts)
if err != nil {
panic(fmt.Sprintf("Unable to connect to MongoDB: %v\n", err))
}
defer func() {
_ = encryptedClient.Disconnect(context.TODO())
}()
MongoClientSettings clientSettings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString(uri))
.autoEncryptionSettings(autoEncryptionSettings)
.build();
try (MongoClient encryptedClient = MongoClients.create(clientSettings)) {
const encryptedClient = new MongoClient(uri, {
autoEncryption: autoEncryptionOptions,
});
$encryptedClient = new \MongoDB\Client($uri, [], [
'autoEncryption' => $autoEncryptionOptions,
]);
encrypted_client = MongoClient(
uri, auto_encryption_opts=auto_encryption_options)
let encrypted_client = encrypted_client_builder
.extra_options(Some(doc!{
"cryptSharedLibPath": env::var("SHARED_LIB_PATH").expect("Set SHARED_LIB_PATH environment variable to path to crypt_shared library")
}))
.key_vault_client(Client::with_uri_str(uri).await.unwrap())
.build()
.await
.unwrap();
1

Los ejemplos de código de este tutorial utilizan las siguientes variables para realizar el flujo de trabajo de cifrado consultable:

  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este valor con los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca este valor "medicalRecords" en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

const kmsProviderName = "<Your KMS Provider Name>";
const uri = process.env.MONGODB_URI; // Your connection URI
const keyVaultDatabaseName = "encryption";
const keyVaultCollectionName = "__keyVault";
const keyVaultNamespace = `${keyVaultDatabaseName}.${keyVaultCollectionName}`;
const encryptedDatabaseName = "medicalRecords";
const encryptedCollectionName = "patients";
  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establezca keyVaultDatabaseName "encryption"en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establezca keyVaultCollectionName "__keyVault"en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca keyVaultNamespace como un nuevo CollectionNamespace objeto cuyo nombre contenga los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca encryptedDatabaseName "medicalRecords"en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establezca encryptedCollectionName "patients"en.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en el appsettings.json archivo o reemplace el valor directamente.

Puede declarar estas variables utilizando el siguiente código:

const string kmsProviderName = "<your KMS provider name>";
const string keyVaultDatabaseName = "encryption";
const string keyVaultCollectionName = "__keyVault";
var keyVaultNamespace =
CollectionNamespace.FromFullName($"{keyVaultDatabaseName}.{keyVaultCollectionName}");
const string encryptedDatabaseName = "medicalRecords";
const string encryptedCollectionName = "patients";
var appSettings = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
var uri = appSettings["MongoDbUri"];
  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este valor con los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca este valor "medicalRecords" en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

kmsProviderName := "<KMS provider name>"
uri := os.Getenv("MONGODB_URI") // Your connection URI
keyVaultDatabaseName := "encryption"
keyVaultCollectionName := "__keyVault"
keyVaultNamespace := keyVaultDatabaseName + "." + keyVaultCollectionName
encryptedDatabaseName := "medicalRecords"
encryptedCollectionName := "patients"
  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este valor con los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca este valor "medicalRecords" en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

String kmsProviderName = "<KMS provider name>";
String uri = QueryableEncryptionHelpers.getEnv("MONGODB_URI"); // Your connection URI
String keyVaultDatabaseName = "encryption";
String keyVaultCollectionName = "__keyVault";
String keyVaultNamespace = keyVaultDatabaseName + "." + keyVaultCollectionName;
String encryptedDatabaseName = "medicalRecords";
String encryptedCollectionName = "patients";
  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este valor con los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca este valor "medicalRecords" en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

const kmsProviderName = "<Your KMS Provider Name>";
const uri = process.env.MONGODB_URI; // Your connection URI
const keyVaultDatabaseName = "encryption";
const keyVaultCollectionName = "__keyVault";
const keyVaultNamespace = `${keyVaultDatabaseName}.${keyVaultCollectionName}`;
const encryptedDatabaseName = "medicalRecords";
const encryptedCollectionName = "patients";
  • $kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure la KMS_PROVIDER variable de entorno con su proveedor de'aws' claves:,, 'azure' 'gcp' 'kmip'o.

  • $uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno.

  • $keyVaultDatabaseName: La base de datos en MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establezca el valor de $keyVaultDatabaseName 'encryption'en.

  • $keyVaultCollectionName - La colección de MongoDB donde se almacenarán tus DEK. Establece esta variable en '__keyVault', que es la convención para ayudar a evitar confundirla con una colección de usuario.

  • $keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca esta variable con los valores de las $keyVaultDatabaseName $keyVaultCollectionName variables y, separados por un punto.

  • $encryptedDatabaseName: La base de datos en MongoDB donde se almacenarán sus datos cifrados. Establezca esta variable 'medicalRecords' en.

  • $encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establezca esta variable 'patients' en.

Puede declarar estas variables utilizando el siguiente código:

$kmsProviderName = getenv('KMS_PROVIDER');
$uri = getenv('MONGODB_URI'); // Your connection URI
$keyVaultDatabaseName = 'encryption';
$keyVaultCollectionName = '__keyVault';
$keyVaultNamespace = $keyVaultDatabaseName . '.' . $keyVaultCollectionName;
$encryptedDatabaseName = 'medicalRecords';
$encryptedCollectionName = 'patients';
  • kms_provider_name: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor como su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • key_vault_database_name: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • key_vault_collection_name: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • key_vault_namespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este espacio con los valores de las key_vault_database_name key_vault_collection_name variables y, separados por un punto.

  • encrypted_database_name: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establézcalo "medicalRecords" en.

  • encrypted_collection_name: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

kms_provider_name = "<KMS provider name>"
uri = os.environ['MONGODB_URI'] # Your connection URI
key_vault_database_name = "encryption"
key_vault_collection_name = "__keyVault"
key_vault_namespace = f"{key_vault_database_name}.{key_vault_collection_name}"
encrypted_database_name = "medicalRecords"
encrypted_collection_name = "patients"
  • kms_provider_name: El KMS que utiliza para almacenar su clave maestra de cliente. Establezca esta variable en "local" para este tutorial.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno.

  • key_vault_database_name: La base de datos de MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establezca esta variable "encryption" en.

  • key_vault_collection_name: La colección en MongoDB donde se almacenarán sus DEK. Establezca esta variable "__keyVault" en, que es la convención para evitar que se confunda con una colección de usuario.

  • key_vault_namespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca esta variable en una Namespace estructura y pase los valores de las key_vault_database_name key_vault_collection_name variables y.

  • encrypted_database_name: La base de datos en MongoDB donde se almacenarán sus datos cifrados. Establezca esta variable "medicalRecords" en.

  • encrypted_collection_name: La colección en MongoDB donde se almacenarán sus datos cifrados. Establezca esta variable "patients" en.

Puede declarar estas variables utilizando el siguiente código:

let kms_provider_name = "<KMS provider name>";
let uri = env::var("MONGODB_URI").expect("Set MONGODB_URI environment variable to your connection string");
let key_vault_database_name = "encryption";
let key_vault_collection_name = "__keyVault";
let key_vault_namespace = Namespace::new(key_vault_database_name, key_vault_collection_name);
let encrypted_database_name = "medicalRecords";
let encrypted_collection_name = "patients";

Importante

Permisos del espacio de nombres de la colección Key Vault

La colección Key Vault se encuentra en el encryption.__keyVault espacio de nombres. Asegúrese de que el usuario de la base de datos que su aplicación usa para conectarse a MongoDB tenga permisos de lectura y escritura en este espacio de nombres.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

2

Cree una variable que contenga sus credenciales KMS con la siguiente estructura.

kmsProviderCredentials = {
gcp: {
email: process.env["GCP_EMAIL"], // Your GCP email
privateKey: process.env["GCP_PRIVATE_KEY"], // Your GCP private key
},
};

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puede nombrar su proveedor de KMS de GCP "my_gcp_provider" en su variable de credenciales de KMS como se muestra en el siguiente código:

kmsProviderCredentials = {
"gcp:my_gcp_provider": {
email: process.env["GCP_EMAIL"], // Your GCP email
privateKey: process.env["GCP_PRIVATE_KEY"], // Your GCP private key
},
};

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"gcp" predeterminada,.

var kmsProviderCredentials = new Dictionary<string, IReadOnlyDictionary<string, object>>();
var kmsOptions = new Dictionary<string, object>
{
{ "email", _appSettings["Gcp:Email"] }, // Your GCP email
{ "privateKey", _appSettings["Gcp:PrivateKey"] } // Your GCP private key
};
kmsProviderCredentials.Add("gcp", kmsOptions);

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puede nombrar su proveedor de KMS de GCP "my_gcp_provider" en su variable de credenciales de KMS como se muestra en el siguiente código:

var kmsProviderCredentials = new Dictionary<string, IReadOnlyDictionary<string, object>>();
var kmsOptions = new Dictionary<string, object>
{
{ "email", _appSettings["Gcp:Email"] }, // Your GCP email
{ "privateKey", _appSettings["Gcp:PrivateKey"] } // Your GCP private key
};
kmsProviderCredentials.Add("gcp:my_gcp_provider", kmsOptions);

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"gcp" predeterminada,.

kmsProviderCredentials := map[string]map[string]interface{}{
"gcp": {
"email": os.Getenv("GCP_EMAIL"), // GCP email
"privateKey": os.Getenv("GCP_PRIVATE_KEY"), // GCP private key
},
}
Map<String, Object> kmsProviderDetails = new HashMap<>();
kmsProviderDetails.put("email", getEnv("GCP_EMAIL")); // Your GCP email
kmsProviderDetails.put("privateKey", getEnv("GCP_PRIVATE_KEY")); // Your GCP private key
Map<String, Map<String, Object>> kmsProviderCredentials = new HashMap<String, Map<String, Object>>();
kmsProviderCredentials.put("gcp", kmsProviderDetails);

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puede nombrar su proveedor de KMS de GCP "my_gcp_provider" en su variable de credenciales de KMS como se muestra en el siguiente código:

Map<String, Object> kmsProviderDetails = new HashMap<>();
kmsProviderDetails.put("email", getEnv("GCP_EMAIL")); // Your GCP email
kmsProviderDetails.put("privateKey", getEnv("GCP_PRIVATE_KEY")); // Your GCP private key
Map<String, Map<String, Object>> kmsProviderCredentials = new HashMap<String, Map<String, Object>>();
kmsProviderCredentials.put("gcp:my_gcp_provider", kmsProviderDetails);

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"gcp" predeterminada,.

kmsProviders = {
gcp: {
email: process.env.GCP_EMAIL, // Your GCP email
privateKey: process.env.GCP_PRIVATE_KEY, // Your GCP private key
},
};

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puede nombrar su proveedor de KMS de GCP "my_gcp_provider" en su variable de credenciales de KMS como se muestra en el siguiente código:

kmsProviders = {
"gcp:my_gcp_provider": {
email: process.env.GCP_EMAIL, // Your GCP email
privateKey: process.env.GCP_PRIVATE_KEY, // Your GCP private key
},
};

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"gcp" predeterminada,.

$kmsProviders = [
'gcp' => [
'email' => getenv('GCP_EMAIL'), // Your GCP email
'privateKey' => getenv('GCP_PRIVATE_KEY'), // Your GCP private key
],
];

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puede nombrar su proveedor de KMS de GCP 'my_gcp_provider' en su variable de credenciales de KMS como se muestra en el siguiente código:

$kmsProviders = [
'gcp:my_gcp_provider' => [
'email' => getenv('GCP_EMAIL'), // Your GCP email
'privateKey' => getenv('GCP_PRIVATE_KEY'), // Your GCP private key
],
];

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS'gcp' predeterminada,.

kms_provider_credentials = {
"gcp": {
"email": os.environ['GCP_EMAIL'], # Your GCP email
"privateKey": os.environ['GCP_PRIVATE_KEY'] # Your GCP private key
}
}

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puede nombrar su proveedor de KMS de GCP "my_gcp_provider" en su variable de credenciales de KMS como se muestra en el siguiente código:

kms_provider_credentials = {
"gcp:my_gcp_provider": {
"email": os.environ['GCP_EMAIL'], # Your GCP email
"privateKey": os.environ['GCP_PRIVATE_KEY'] # Your GCP private key
}
}

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"gcp" predeterminada,.

kms_providers = vec![(
KmsProvider::gcp(),
doc! {
"email": env::var("GCP_EMAIL").expect("Set GCP_EMAIL environment variable"),
"privateKey": env::var("GCP_PRIVATE_KEY").expect("Set GCP_PRIVATE_KEY environment variable"),
},
None,
)];

También puede proporcionar un nombre personalizado para su proveedor de KMS pasándolo como una cadena a la función with_name(). Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores de KMS del mismo tipo.

Por ejemplo, puede nombrar su proveedor de KMS de GCP "my_gcp_provider" en su variable de credenciales de KMS como se muestra en el siguiente código:

kms_providers = vec![(
KmsProvider::gcp().with_name("my_gcp_provider"),
doc! {
"email": env::var("GCP_EMAIL").expect("Set GCP_EMAIL environment variable"),
"privateKey": env::var("GCP_PRIVATE_KEY").expect("Set GCP_PRIVATE_KEY environment variable"),
},
None,
)];

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"gcp" predeterminada,.

3

Crea una variable que contenga tus credenciales de llave maestra de cliente con la siguiente estructura. Utiliza las credenciales que registraste cuando creaste una llave maestra de cliente.

customerMasterKeyCredentials = {
projectId: process.env["GCP_PROJECT_ID"], // Your GCP Project ID
location: process.env["GCP_LOCATION"], // Your GCP Key Location
keyRing: process.env["GCP_KEY_RING"], // Your GCP Key Ring
keyName: process.env["GCP_KEY_NAME"], // Your GCP Key Name
};
var customerMasterKeyCredentials = new BsonDocument
{
{ "projectId", _appSettings["Gcp:ProjectId"] }, // Your GCP Project ID
{ "location", _appSettings["Gcp:Location"] }, // Your GCP Key Location
{ "keyRing", _appSettings["Gcp:KeyRing"] }, // Your GCP Key Ring
{ "keyName", _appSettings["Gcp:KeyName"] } // Your GCP Key Name
};
customerMasterKeyCredentials := map[string]string{
"projectId": os.Getenv("GCP_PROJECT_ID"), // Your GCP Project ID
"location": os.Getenv("GCP_LOCATION"), // Your GCP Key Location
"keyRing": os.Getenv("GCP_KEY_RING"), // Your GCP Key Ring
"keyName": os.Getenv("GCP_KEY_NAME"), // Your GCP Key Name
}
BsonDocument customerMasterKeyCredentials = new BsonDocument();
customerMasterKeyCredentials.put("provider", new BsonString(kmsProviderName));
customerMasterKeyCredentials.put("projectId", new BsonString(getEnv("GCP_PROJECT_ID"))); // Your GCP Project ID
customerMasterKeyCredentials.put("location", new BsonString(getEnv("GCP_LOCATION"))); // Your GCP Key Location
customerMasterKeyCredentials.put("keyRing", new BsonString(getEnv("GCP_KEY_RING"))); // Your GCP Key Ring
customerMasterKeyCredentials.put("keyName", new BsonString(getEnv("GCP_KEY_NAME"))); // Your GCP Key Name
customerMasterKeyCredentials = {
projectId: process.env.GCP_PROJECT_ID, // Your GCP Project ID
location: process.env.GCP_LOCATION, // Your GCP Key Location
keyRing: process.env.GCP_KEY_RING, // Your GCP Key Ring
keyName: process.env.GCP_KEY_NAME, // Your GCP Key Name
};
$customerMasterKeyCredentials = [
'projectId' => getenv('GCP_PROJECT_ID'), // Your GCP Project ID
'location' => getenv('GCP_LOCATION'), // Your GCP Key Location
'keyRing' => getenv('GCP_KEY_RING'), // Your GCP Key Ring
'keyName' => getenv('GCP_KEY_NAME'), // Your GCP Key Name
];
customer_master_key_credentials = {
"projectId": os.environ['GCP_PROJECT_ID'], # Your GCP email
"location": os.environ['GCP_LOCATION'], # Your GCP private key
"keyRing": os.environ['GCP_KEY_RING'], # Your GCP private key
"keyName": os.environ['GCP_KEY_NAME'] # Your GCP private key
}
let gcp_master_key = GcpMasterKey::builder()
.project_id(env::var("GCP_PROJECT_ID").expect("Set the GCP_PROJECT_ID environment variable"))
.location(env::var("GCP_LOCATION").expect("Set the GCP_LOCATION environment variable"))
.key_ring(env::var("GCP_KEY_RING").expect("Set the GCP_KEY_RING environment variable"))
.key_name(env::var("GCP_KEY_NAME").expect("Set the GCP_KEY_NAME environment variable"))
.build();
4

Para crear un cliente para cifrar y descifrar datos en colecciones cifradas, cree una instancia de MongoClient nueva usando su URI de conexión y las opciones de cifrado automático.

const encryptedClient = Mongo(uri, autoEncryptionOptions);

IMPORTANTE: Si está utilizando la versión del controlador .NET/C# 3.0 o posterior, debe agregar el siguiente código a su aplicación antes de crear una instancia de un MongoClient nuevo:

MongoClientSettings.Extensions.AddAutoEncryption(); // .NET/C# Driver v3.0 or later only

Cree una instancia nueva de MongoClient mediante su URI de conexión y las opciones de cifrado automático:

var clientSettings = MongoClientSettings.FromConnectionString(uri);
clientSettings.AutoEncryptionOptions = qeHelpers.GetAutoEncryptionOptions(
keyVaultNamespace,
kmsProviderCredentials);
var encryptedClient = new MongoClient(clientSettings);
opts := options.Client().
ApplyURI(uri).
SetAutoEncryptionOptions(autoEncryptionOptions)
encryptedClient, err := mongo.Connect(opts)
if err != nil {
panic(fmt.Sprintf("Unable to connect to MongoDB: %v\n", err))
}
defer func() {
_ = encryptedClient.Disconnect(context.TODO())
}()
MongoClientSettings clientSettings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString(uri))
.autoEncryptionSettings(autoEncryptionSettings)
.build();
try (MongoClient encryptedClient = MongoClients.create(clientSettings)) {
const encryptedClient = new MongoClient(uri, {
autoEncryption: autoEncryptionOptions,
});
$encryptedClient = new \MongoDB\Client($uri, [], [
'autoEncryption' => $autoEncryptionOptions,
]);
encrypted_client = MongoClient(
uri, auto_encryption_opts=auto_encryption_options)
let encrypted_client = encrypted_client_builder
.extra_options(Some(doc!{
"cryptSharedLibPath": env::var("SHARED_LIB_PATH").expect("Set SHARED_LIB_PATH environment variable to path to crypt_shared library")
}))
.key_vault_client(Client::with_uri_str(uri).await.unwrap())
.build()
.await
.unwrap();
1

Los ejemplos de código de este tutorial utilizan las siguientes variables para realizar el flujo de trabajo de cifrado consultable:

  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este valor con los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca este valor "medicalRecords" en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

const kmsProviderName = "<Your KMS Provider Name>";
const uri = process.env.MONGODB_URI; // Your connection URI
const keyVaultDatabaseName = "encryption";
const keyVaultCollectionName = "__keyVault";
const keyVaultNamespace = `${keyVaultDatabaseName}.${keyVaultCollectionName}`;
const encryptedDatabaseName = "medicalRecords";
const encryptedCollectionName = "patients";
  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establezca keyVaultDatabaseName "encryption"en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establezca keyVaultCollectionName "__keyVault"en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca keyVaultNamespace como un nuevo CollectionNamespace objeto cuyo nombre contenga los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca encryptedDatabaseName "medicalRecords"en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establezca encryptedCollectionName "patients"en.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en el appsettings.json archivo o reemplace el valor directamente.

Puede declarar estas variables utilizando el siguiente código:

const string kmsProviderName = "<your KMS provider name>";
const string keyVaultDatabaseName = "encryption";
const string keyVaultCollectionName = "__keyVault";
var keyVaultNamespace =
CollectionNamespace.FromFullName($"{keyVaultDatabaseName}.{keyVaultCollectionName}");
const string encryptedDatabaseName = "medicalRecords";
const string encryptedCollectionName = "patients";
var appSettings = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
var uri = appSettings["MongoDbUri"];
  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este valor con los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca este valor "medicalRecords" en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

kmsProviderName := "<KMS provider name>"
uri := os.Getenv("MONGODB_URI") // Your connection URI
keyVaultDatabaseName := "encryption"
keyVaultCollectionName := "__keyVault"
keyVaultNamespace := keyVaultDatabaseName + "." + keyVaultCollectionName
encryptedDatabaseName := "medicalRecords"
encryptedCollectionName := "patients"
  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este valor con los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca este valor "medicalRecords" en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

String kmsProviderName = "<KMS provider name>";
String uri = QueryableEncryptionHelpers.getEnv("MONGODB_URI"); // Your connection URI
String keyVaultDatabaseName = "encryption";
String keyVaultCollectionName = "__keyVault";
String keyVaultNamespace = keyVaultDatabaseName + "." + keyVaultCollectionName;
String encryptedDatabaseName = "medicalRecords";
String encryptedCollectionName = "patients";
  • kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor con su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • keyVaultDatabaseName: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • keyVaultCollectionName: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este valor con los valores de las keyVaultDatabaseName keyVaultCollectionName variables y, separados por un punto.

  • encryptedDatabaseName: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establezca este valor "medicalRecords" en.

  • encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

const kmsProviderName = "<Your KMS Provider Name>";
const uri = process.env.MONGODB_URI; // Your connection URI
const keyVaultDatabaseName = "encryption";
const keyVaultCollectionName = "__keyVault";
const keyVaultNamespace = `${keyVaultDatabaseName}.${keyVaultCollectionName}`;
const encryptedDatabaseName = "medicalRecords";
const encryptedCollectionName = "patients";
  • $kmsProviderName: El KMS que utiliza para almacenar su clave maestra de cliente. Configure la KMS_PROVIDER variable de entorno con su proveedor de'aws' claves:,, 'azure' 'gcp' 'kmip'o.

  • $uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno.

  • $keyVaultDatabaseName: La base de datos en MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establezca el valor de $keyVaultDatabaseName 'encryption'en.

  • $keyVaultCollectionName - La colección de MongoDB donde se almacenarán tus DEK. Establece esta variable en '__keyVault', que es la convención para ayudar a evitar confundirla con una colección de usuario.

  • $keyVaultNamespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca esta variable con los valores de las $keyVaultDatabaseName $keyVaultCollectionName variables y, separados por un punto.

  • $encryptedDatabaseName: La base de datos en MongoDB donde se almacenarán sus datos cifrados. Establezca esta variable 'medicalRecords' en.

  • $encryptedCollectionName: La colección en MongoDB donde se almacenarán sus datos cifrados. Establezca esta variable 'patients' en.

Puede declarar estas variables utilizando el siguiente código:

$kmsProviderName = getenv('KMS_PROVIDER');
$uri = getenv('MONGODB_URI'); // Your connection URI
$keyVaultDatabaseName = 'encryption';
$keyVaultCollectionName = '__keyVault';
$keyVaultNamespace = $keyVaultDatabaseName . '.' . $keyVaultCollectionName;
$encryptedDatabaseName = 'medicalRecords';
$encryptedCollectionName = 'patients';
  • kms_provider_name: El KMS que utiliza para almacenar su clave maestra de cliente. Configure este valor como su proveedor de"aws" claves:,, "azure" "gcp" "kmip"o.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno o reemplace el valor directamente.

  • key_vault_database_name: La base de datos MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establézcalo "encryption" en.

  • key_vault_collection_name: La colección en MongoDB donde se almacenarán sus DEK. Establézcalo "__keyVault" en.

  • key_vault_namespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca este espacio con los valores de las key_vault_database_name key_vault_collection_name variables y, separados por un punto.

  • encrypted_database_name: La base de datos MongoDB donde se almacenarán sus datos cifrados. Establézcalo "medicalRecords" en.

  • encrypted_collection_name: La colección en MongoDB donde se almacenarán sus datos cifrados. Establézcalo "patients" en.

Puede declarar estas variables utilizando el siguiente código:

kms_provider_name = "<KMS provider name>"
uri = os.environ['MONGODB_URI'] # Your connection URI
key_vault_database_name = "encryption"
key_vault_collection_name = "__keyVault"
key_vault_namespace = f"{key_vault_database_name}.{key_vault_collection_name}"
encrypted_database_name = "medicalRecords"
encrypted_collection_name = "patients"
  • kms_provider_name: El KMS que utiliza para almacenar su clave maestra de cliente. Establezca esta variable en "local" para este tutorial.

  • uri: la URI de conexión de su implementación de MongoDB. Establezca la URI de conexión en la MONGODB_URI variable de entorno.

  • key_vault_database_name: La base de datos de MongoDB donde se almacenarán sus claves de cifrado de datos (DEK). Establezca esta variable "encryption" en.

  • key_vault_collection_name: La colección en MongoDB donde se almacenarán sus DEK. Establezca esta variable "__keyVault" en, que es la convención para evitar que se confunda con una colección de usuario.

  • key_vault_namespace: El espacio de nombres en MongoDB donde se almacenarán sus DEK. Establezca esta variable en una Namespace estructura y pase los valores de las key_vault_database_name key_vault_collection_name variables y.

  • encrypted_database_name: La base de datos en MongoDB donde se almacenarán sus datos cifrados. Establezca esta variable "medicalRecords" en.

  • encrypted_collection_name: La colección en MongoDB donde se almacenarán sus datos cifrados. Establezca esta variable "patients" en.

Puede declarar estas variables utilizando el siguiente código:

let kms_provider_name = "<KMS provider name>";
let uri = env::var("MONGODB_URI").expect("Set MONGODB_URI environment variable to your connection string");
let key_vault_database_name = "encryption";
let key_vault_collection_name = "__keyVault";
let key_vault_namespace = Namespace::new(key_vault_database_name, key_vault_collection_name);
let encrypted_database_name = "medicalRecords";
let encrypted_collection_name = "patients";

Importante

Permisos del espacio de nombres de la colección Key Vault

La colección Key Vault se encuentra en el encryption.__keyVault espacio de nombres. Asegúrese de que el usuario de la base de datos que su aplicación usa para conectarse a MongoDB tenga permisos de lectura y escritura en este espacio de nombres.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

Tip

Variables de entorno

El código de ejemplo de este tutorial hace referencia a las variables de entorno que debe configurar. También puede reemplazar los valores directamente en el código.

Para saber cómo configurar estas variables de entorno, consulte el archivo README.md incluido en la aplicación de muestra en GitHub.

2

Cree una variable que contenga el punto final de su proveedor de claves compatible con KMIP con la siguiente estructura:

kmsProviderCredentials = {
kmip: {
endpoint: process.env["KMIP_KMS_ENDPOINT"], // Your KMIP KMS endpoint
},
};

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puede nombrar a su proveedor KMS de KMIP "my_kmip_provider" en su variable de credenciales KMS como se muestra en el siguiente código:

kmsProviderCredentials = {
"kmip:my_kmip_provider": {
endpoint: process.env["KMIP_KMS_ENDPOINT"], // Your KMIP KMS endpoint
},
};

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"kmip" predeterminada,.

var kmsProviderCredentials = new Dictionary<string, IReadOnlyDictionary<string, object>>();
var kmsOptions = new Dictionary<string, object>
{
{ "endpoint", _appSettings["Kmip:KmsEndpoint"] } // Your KMIP KMS endpoint
};
kmsProviderCredentials.Add("kmip", kmsOptions);

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puede nombrar a su proveedor KMS de KMIP "my_kmip_provider" en su variable de credenciales KMS como se muestra en el siguiente código:

var kmsProviderCredentials = new Dictionary<string, IReadOnlyDictionary<string, object>>();
var kmsOptions = new Dictionary<string, object>
{
{ "endpoint", _appSettings["Kmip:KmsEndpoint"] } // Your KMIP KMS endpoint
};
kmsProviderCredentials.Add("kmip:my_kmip_provider", kmsOptions);

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"kmip" predeterminada,.

kmsProviderCredentials := map[string]map[string]interface{}{
"kmip": {
"endpoint": os.Getenv("KMIP_KMS_ENDPOINT"), // KMIP KMS endpoint
},
}
Map<String, Object> kmsProviderDetails = new HashMap<>();
kmsProviderDetails.put("endpoint", getEnv("KMIP_KMS_ENDPOINT")); // Your KMIP KMS endpoint
Map<String, Map<String, Object>> kmsProviderCredentials = new HashMap<String, Map<String, Object>>();
kmsProviderCredentials.put("kmip", kmsProviderDetails);

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puede nombrar a su proveedor KMS de KMIP "my_kmip_provider" en su variable de credenciales KMS como se muestra en el siguiente código:

Map<String, Object> kmsProviderDetails = new HashMap<>();
kmsProviderDetails.put("endpoint", getEnv("KMIP_KMS_ENDPOINT")); // Your KMIP KMS endpoint
Map<String, Map<String, Object>> kmsProviderCredentials = new HashMap<String, Map<String, Object>>();
kmsProviderCredentials.put("kmip:my_kmip_provider", kmsProviderDetails);

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"kmip" predeterminada,.

kmsProviders = {
kmip: {
endpoint: process.env.KMIP_KMS_ENDPOINT, // Your KMIP KMS endpoint
},
};

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puede nombrar a su proveedor KMS de KMIP "my_kmip_provider" en su variable de credenciales KMS como se muestra en el siguiente código:

kmsProviders = {
"kmip:my_kmip_provider": {
endpoint: process.env.KMIP_KMS_ENDPOINT, // Your KMIP KMS endpoint
},
};

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"kmip" predeterminada,.

$kmsProviders = [
'kmip' => [
'endpoint' => getenv('KMIP_ENDPOINT'), // Your KMIP endpoint
],
];

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puede nombrar a su proveedor KMS KMIP 'my_kmip_provider' en su variable de credenciales KMS como se muestra en el siguiente código:

$kmsProviders = [
'kmip:my_kmip_provider' => [
'endpoint' => getenv('KMIP_ENDPOINT'), // Your KMIP endpoint
],
];

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS'kmip' predeterminada,.

kms_provider_credentials = {
"kmip": {
"endpoint": os.environ['KMIP_KMS_ENDPOINT'] # Your KMIP KMS endpoint
}
}

También puede proporcionar un nombre personalizado para su proveedor de KMS. Para ello, introduzca una cadena que incluya el nombre del proveedor, seguido de dos puntos y el nombre personalizado. Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores del mismo tipo.

Por ejemplo, puede nombrar a su proveedor KMS de KMIP "my_kmip_provider" en su variable de credenciales KMS como se muestra en el siguiente código:

kms_provider_credentials = {
"kmip:my_kmip_provider": {
"endpoint": os.environ['KMIP_KMS_ENDPOINT'] # Your KMIP KMS endpoint
}
}

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"kmip" predeterminada,.

kms_providers = vec![(
KmsProvider::kmip(),
doc! {
"endpoint": env::var("KMIP_KMS_ENDPOINT").expect("Set KMIP_KMS_ENDPOINT environment variable")
},
Some(get_kmip_tls_options()),
)];

También puede proporcionar un nombre personalizado para su proveedor de KMS pasándolo como una cadena a la función with_name(). Al proporcionar un nombre único para un proveedor de KMS, podrá especificar varios proveedores de KMS del mismo tipo.

Por ejemplo, puede nombrar a su proveedor KMS de KMIP "my_kmip_provider" en su variable de credenciales KMS como se muestra en el siguiente código:

kms_providers = vec![(
KmsProvider::kmip().with_name("my_kmip_provider"),
doc! {
"endpoint": env::var("KMIP_KMS_ENDPOINT").expect("Set KMIP_KMS_ENDPOINT environment variable")
},
Some(get_kmip_tls_options()),
)];

NOTA: Los pasos restantes de este tutorial utilizan la cadena de proveedor KMS"kmip" predeterminada,.

3

Cree un objeto vacío como se muestra en el siguiente ejemplo de código. Esto solicitará a su proveedor de claves compatible con KMIPque genere una nueva clave maestra de cliente.

customerMasterKeyCredentials = {};
var customerMasterKeyCredentials = new BsonDocument();
cmkCredentials := map[string]string{}
BsonDocument customerMasterKeyCredentials = new BsonDocument();
customerMasterKeyCredentials = {};
$customerMasterKeyCredentials = [];
customer_master_key_credentials = {}
let kmip_master_key = KmipMasterKey::builder().build();
4

Para crear un cliente para cifrar y descifrar datos en colecciones cifradas, cree una instancia de MongoClient nueva usando su URI de conexión y las opciones de cifrado automático.

const encryptedClient = Mongo(uri, autoEncryptionOptions);

IMPORTANTE: Si está utilizando la versión del controlador .NET/C# 3.0 o posterior, debe agregar el siguiente código a su aplicación antes de crear una instancia de un MongoClient nuevo:

MongoClientSettings.Extensions.AddAutoEncryption(); // .NET/C# Driver v3.0 or later only

Cree una instancia nueva de MongoClient mediante su URI de conexión y las opciones de cifrado automático:

var clientSettings = MongoClientSettings.FromConnectionString(uri);
clientSettings.AutoEncryptionOptions = qeHelpers.GetAutoEncryptionOptions(
keyVaultNamespace,
kmsProviderCredentials);
var encryptedClient = new MongoClient(clientSettings);
opts := options.Client().
ApplyURI(uri).
SetAutoEncryptionOptions(autoEncryptionOptions)
encryptedClient, err := mongo.Connect(opts)
if err != nil {
panic(fmt.Sprintf("Unable to connect to MongoDB: %v\n", err))
}
defer func() {
_ = encryptedClient.Disconnect(context.TODO())
}()
MongoClientSettings clientSettings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString(uri))
.autoEncryptionSettings(autoEncryptionSettings)
.build();
try (MongoClient encryptedClient = MongoClients.create(clientSettings)) {
const encryptedClient = new MongoClient(uri, {
autoEncryption: autoEncryptionOptions,
});
$encryptedClient = new \MongoDB\Client($uri, [], [
'autoEncryption' => $autoEncryptionOptions,
]);
encrypted_client = MongoClient(
uri, auto_encryption_opts=auto_encryption_options)
let encrypted_client = encrypted_client_builder
.extra_options(Some(doc!{
"cryptSharedLibPath": env::var("SHARED_LIB_PATH").expect("Set SHARED_LIB_PATH environment variable to path to crypt_shared library")
}))
.key_vault_client(Client::with_uri_str(uri).await.unwrap())
.build()
.await
.unwrap();

Después de instalar un controlador y sus dependencias, crear una clave maestra de cliente y crear su aplicación, consulte Descripción general: usar cifrado consultable para cifrar y consultar datos.

Volver

Crear una clave maestra de cliente

En esta página