Overview
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.
Antes de empezar
Asegúrese de haber completado las siguientes tareas previas antes de crear su solicitud:
Instalar un controlador compatible con Queryable Encryption y sus dependencias
Instalar y configurar un componente de análisis de consultas
Si estas usando mongocryptd, su aplicación requiere permisos de escritura en el directorio de trabajo para crear el archivo mongocryptd.pid.
Código completo de la aplicación
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.
Procedimiento
Seleccione la pestaña correspondiente a su proveedor de claves a continuación.
Asignar variables de aplicación
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_URIvariable 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
keyVaultDatabaseNamekeyVaultCollectionNamevariables 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
keyVaultNamespacecomo un nuevoCollectionNamespaceobjeto cuyo nombre contenga los valores de laskeyVaultDatabaseNamekeyVaultCollectionNamevariables 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.jsonarchivo 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_URIvariable 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
keyVaultDatabaseNamekeyVaultCollectionNamevariables 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_URIvariable 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
keyVaultDatabaseNamekeyVaultCollectionNamevariables 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_URIvariable 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
keyVaultDatabaseNamekeyVaultCollectionNamevariables 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_PROVIDERvariable 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_URIvariable 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$keyVaultCollectionNamevariables 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_URIvariable 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_namekey_vault_collection_namevariables 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_URIvariable 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
Namespaceestructura y pase los valores de laskey_vault_database_namekey_vault_collection_namevariables 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.
Agregue sus credenciales KMS
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.
Agregue sus credenciales de CMK
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();
Establecer opciones de cifrado automático
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 KMSEl 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 KMSEl 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 KMSEl 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 KMSEl 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 KMSEl 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
ClientOptionsEl 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("");
Crear un cliente para configurar una colección cifrada
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();
Asignar variables de aplicación
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_URIvariable 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
keyVaultDatabaseNamekeyVaultCollectionNamevariables 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
keyVaultNamespacecomo un nuevoCollectionNamespaceobjeto cuyo nombre contenga los valores de laskeyVaultDatabaseNamekeyVaultCollectionNamevariables 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.jsonarchivo 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_URIvariable 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
keyVaultDatabaseNamekeyVaultCollectionNamevariables 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_URIvariable 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
keyVaultDatabaseNamekeyVaultCollectionNamevariables 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_URIvariable 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
keyVaultDatabaseNamekeyVaultCollectionNamevariables 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_PROVIDERvariable 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_URIvariable 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$keyVaultCollectionNamevariables 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_URIvariable 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_namekey_vault_collection_namevariables 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_URIvariable 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
Namespaceestructura y pase los valores de laskey_vault_database_namekey_vault_collection_namevariables 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.
Agregue sus credenciales KMS
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,.
Agregue sus credenciales de CMK
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();
Crea un cliente de cifrado
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();
Asignar variables de aplicación
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_URIvariable 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
keyVaultDatabaseNamekeyVaultCollectionNamevariables 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
keyVaultNamespacecomo un nuevoCollectionNamespaceobjeto cuyo nombre contenga los valores de laskeyVaultDatabaseNamekeyVaultCollectionNamevariables 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.jsonarchivo 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_URIvariable 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
keyVaultDatabaseNamekeyVaultCollectionNamevariables 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_URIvariable 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
keyVaultDatabaseNamekeyVaultCollectionNamevariables 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_URIvariable 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
keyVaultDatabaseNamekeyVaultCollectionNamevariables 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_PROVIDERvariable 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_URIvariable 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$keyVaultCollectionNamevariables 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_URIvariable 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_namekey_vault_collection_namevariables 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_URIvariable 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
Namespaceestructura y pase los valores de laskey_vault_database_namekey_vault_collection_namevariables 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.
Agregue sus credenciales KMS
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,.
Agregue sus credenciales de CMK
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();
Crea un cliente de cifrado
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();
Asignar variables de aplicación
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_URIvariable 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
keyVaultDatabaseNamekeyVaultCollectionNamevariables 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
keyVaultNamespacecomo un nuevoCollectionNamespaceobjeto cuyo nombre contenga los valores de laskeyVaultDatabaseNamekeyVaultCollectionNamevariables 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.jsonarchivo 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_URIvariable 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
keyVaultDatabaseNamekeyVaultCollectionNamevariables 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_URIvariable 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
keyVaultDatabaseNamekeyVaultCollectionNamevariables 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_URIvariable 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
keyVaultDatabaseNamekeyVaultCollectionNamevariables 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_PROVIDERvariable 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_URIvariable 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$keyVaultCollectionNamevariables 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_URIvariable 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_namekey_vault_collection_namevariables 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_URIvariable 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
Namespaceestructura y pase los valores de laskey_vault_database_namekey_vault_collection_namevariables 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.
Agregue sus credenciales KMS
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,.
Agregue sus credenciales de CMK
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();
Crea un cliente de cifrado
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();
Próximos pasos
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.