Menu Docs
Página inicial do Docs
/
Manual do banco de dados
/ / / / / /

Crie seu aplicativo habilitado para Queryable Encryption

Este guia mostra como criar um aplicação que implemente o Queryable Encryption para criptografar e descriptografar automaticamente os campos de documento .

Depois de concluir as etapas deste guia, você deve ter um aplicação cliente em funcionamento que esteja pronto para inserir documentos com campos criptografados com sua Chave mestre do cliente.

Certifique-se de ter concluído as seguintes tarefas de pré-requisito antes de criar seu aplicativo:

  1. Instale um driver e dependências compatíveis com a Queryable Encryption

  2. Instalar e configurar uma biblioteca de Queryable Encryption

  3. Criar uma chave mestra do cliente

Para ver o código completo do aplicação de amostra , selecione sua linguagem de programação no seletor de idioma.

Aplicação mongosh completa

Cada repositório de aplicação de amostra inclui um arquivo README.md que você pode usar para saber como configurar seu ambiente e executar o aplicação.

Selecione a guia do seu provedor de chaves abaixo.

1

Os exemplos de código neste tutorial usam as seguintes variáveis para executar o fluxo de trabalho com Queryable Encryption:

  • kmsProviderName - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um período.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina keyVaultDatabaseName como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina keyVaultCollectionName como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina keyVaultNamespace para um novo objeto CollectionNamespace cujo nome são os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um ponto.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina encryptedDatabaseName como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina encryptedCollectionName como "patients".

  • uri - URI de conexão de implantação do MongoDB. Defina seu URI de conexão no arquivo appsettings.json ou substitua o valor diretamente.

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um período.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um período.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um período.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você está usando para armazenar sua Chave Mestre do Cliente. Configure a variável de ambiente do KMS_PROVIDER para seu provedor de chave: 'aws', 'azure', 'gcp' ou 'kmip'.

  • $uri - URI de conexão do MongoDB deployment. Defina seu URI de conexão na variável de ambiente MONGODB_URI .

  • $keyVaultDatabaseName - O banco de dados no MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina o valor de $keyVaultDatabaseName para 'encryption'.

  • $keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina essa variável como '__keyVault', que é a convenção para ajudar a evitar dúvidas sobre uma collection de usuário.

  • $keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina esta variável para os valores das variáveis $keyVaultDatabaseName e $keyVaultCollectionName, separados por um período.

  • $encryptedDatabaseName - O banco de dados no MongoDB onde seus dados criptografados serão armazenados. Defina esta variável como 'medicalRecords'.

  • $encryptedCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina esta variável como 'patients'.

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • key_vault_database_name - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • key_vault_collection_name - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • key_vault_namespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis key_vault_database_name e key_vault_collection_name , separados por um período.

  • encryption_database_name - O banco de banco de dados do MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryption_collection_name - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você está usando para armazenar sua Chave Mestre do Cliente. Defina esta variável como "local" para este tutorial.

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI .

  • key_vault_database_name - O banco de dados de dados no MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina esta variável como "encryption".

  • key_vault_collection_name - A coleção no MongoDB onde seus DEKs serão armazenados. Defina essa variável como "__keyVault", que é a convenção para ajudar a evitar dúvidas sobre uma collection de usuário.

  • key_vault_namespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina essa variável como uma estrutura Namespace e passe os valores das variáveis key_vault_database_name e key_vault_collection_name.

  • encryption_database_name - O banco de dados de dados no MongoDB onde seus dados criptografados serão armazenados. Defina esta variável como "medicalRecords".

  • encryption_collection_name - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina esta variável como "patients".

Você pode declarar essas variáveis usando o seguinte 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

Permissões de namespace da coleção de cofre de chaves

A collection de cofre de chaves está no namespace encryption.__keyVault . Certifique-se de que o trigger de banco de dados que sua aplicação usa para se conectar ao MongoDB tenha permissões de ReadWrite nesse namespace.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

2

Crie uma variável contendo suas credenciais KMS com a seguinte estrutura. Use o ID da chave de acesso e a chave de acesso secreta que você usou na etapa 2.2 quando criou um usuário Amazon Web Services 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
},
};

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu fornecedor do Amazon Web Services KMS como "my_aws_provider" na variável de credenciais do KMS, conforme mostrado no código a seguir:

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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "aws".

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);

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu fornecedor do Amazon Web Services KMS como "my_aws_provider" na variável de credenciais do KMS, conforme mostrado no código a seguir:

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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "aws".

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);

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu fornecedor do Amazon Web Services KMS como "my_aws_provider" na variável de credenciais do KMS, conforme mostrado no código a seguir:

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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "aws".

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
},
};

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu fornecedor do Amazon Web Services KMS como "my_aws_provider" na variável de credenciais do KMS, conforme mostrado no código a seguir:

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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "aws".

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

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu fornecedor do Amazon Web Services KMS de "my_aws_provider" em sua variável de credenciais do KMS, conforme mostrado no código a seguir:

$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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "aws".

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
}
}

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu fornecedor do Amazon Web Services KMS como "my_aws_provider" na variável de credenciais do KMS, conforme mostrado no código a seguir:

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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "aws".

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,
)];

Você também pode fornecer um nome personalizado para seu provedor de KMS passando o nome como uma string para a função with_name(). Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu fornecedor do Amazon Web Services KMS como "my_aws_provider" na variável de credenciais do KMS, conforme mostrado no código a seguir:

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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "aws".

Importante

Lembrete: autenticar com funções IAM em produção

Para utilizar um papelIAM do em vez de um usuário IAM para autenticar seu aplicação, especifique um objeto vazio para suas credenciais em seu objeto do provedor de KMS. Isto instrui o condutor a recuperar automaticamente as credenciais do ambiente:

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,
)];

Não é possível recuperar as credenciais automaticamente se estiver usando um provedor de KMS nomeado.

3

Crie uma variável contendo suas credenciais da Chave Mestre do Cliente com a seguinte estrutura. Use o ARN e a região que você registrou na etapa 1.3 quando criou uma CMK.

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

Observação

Opções de criptografia automática

As opções de criptografia automática fornecem informações de configuração para a Biblioteca compartilhada de criptografia automática, que modifica o comportamento do aplicativo ao acessar campos criptografados.

Para saber mais sobre a Biblioteca compartilhada de criptografia automática, consulte a página Biblioteca compartilhada de criptografia automática .

Crie um objeto autoEncryptionOptions com as seguintes opções:

  • O namespace da sua coleção do Key Vault

  • O objeto kmsProviderCredentials , que contém suas credenciais do Amazon Web Services KMS

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

Crie um objeto AutoEncryptionOptions com as seguintes opções:

  • O namespace da sua coleção do Key Vault

  • O objeto kmsProviderCredentials , que contém suas credenciais do Amazon Web Services KMS

  • O objeto extraOptions, que contém o caminho para sua Biblioteca Compartilhada de Criptografia Automática

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

Crie um objeto AutoEncryption com as seguintes opções:

  • O namespace da sua coleção do Key Vault

  • O objeto kmsProviderCredentials , que contém suas credenciais do Amazon Web Services KMS

  • O objeto cryptSharedLibraryPath, que contém o caminho para sua Biblioteca Compartilhada de Criptografia Automática

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)

Crie um objeto AutoEncryptionSettings com as seguintes opções:

  • O namespace da sua coleção do Key Vault

  • O objeto kmsProviderCredentials , que contém suas credenciais do Amazon Web Services KMS

  • O objeto extraOptions, que contém o caminho para sua Biblioteca Compartilhada de Criptografia Automática

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();

Se omitir keyVaultClient ou definir bypassAutomaticEncryption como falso no seu objeto AutoEncryptionSettings, o driver cria um MongoClient interno separado. A configuração interna MongoClient difere da MongoClient mãe definindo minPoolSize como 0 e omitindo AutoEncryptionSettings.

Crie um objeto autoEncryptionOptions com as seguintes opções:

  • O namespace da sua coleção do Key Vault

  • O objeto kmsProviders , que contém suas credenciais do Amazon Web Services KMS

  • O objeto sharedLibraryPathOptions, que contém o caminho para sua Biblioteca Compartilhada de Criptografia Automática

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

Crie um objeto $autoEncryptionOptions que contenha as seguintes opções:

  • O namespace da sua coleção do Key Vault

  • O objeto $kmsProviders , definido na etapa anterior

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

Crie um objeto AutoEncryptionOpts com as seguintes opções:

  • O objeto kms_provider_credentials , que contém suas credenciais do Amazon Web Services KMS

  • O namespace da sua coleção do Key Vault

  • O caminho para sua biblioteca compartilhada de criptografia automática

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>
)

Crie um objeto EncryptedClientBuilder que contenha as seguintes opções:

  • Um objeto ClientOptions

  • O namespace da sua coleção do Key Vault

  • O objeto kms_providers , que contém suas credenciais do Amazon Web Services KMS

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

Para criar um cliente utilizado para criptografar e descriptografar dados em sua coleção, instancie um novo MongoClient usando seu URI de conexão e suas opções de criptografia automática.

const encryptedClient = Mongo(uri, autoEncryptionOptions);

IMPORTANTE: se você estiver usando o .NET/C# Driver versão 3.0 ou posterior, deverá adicionar o seguinte código ao seu aplicação antes de instanciar um novo MongoClient:

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

Instancie um novo MongoClient usando seu URI de conexão e as opções de criptografia automática :

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

Os exemplos de código neste tutorial usam as seguintes variáveis para executar o fluxo de trabalho com Queryable Encryption:

  • kmsProviderName - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um período.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina keyVaultDatabaseName como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina keyVaultCollectionName como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina keyVaultNamespace para um novo objeto CollectionNamespace cujo nome são os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um ponto.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina encryptedDatabaseName como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina encryptedCollectionName como "patients".

  • uri - URI de conexão de implantação do MongoDB. Defina seu URI de conexão no arquivo appsettings.json ou substitua o valor diretamente.

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um período.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um período.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um período.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você está usando para armazenar sua Chave Mestre do Cliente. Configure a variável de ambiente do KMS_PROVIDER para seu provedor de chave: 'aws', 'azure', 'gcp' ou 'kmip'.

  • $uri - URI de conexão do MongoDB deployment. Defina seu URI de conexão na variável de ambiente MONGODB_URI .

  • $keyVaultDatabaseName - O banco de dados no MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina o valor de $keyVaultDatabaseName para 'encryption'.

  • $keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina essa variável como '__keyVault', que é a convenção para ajudar a evitar dúvidas sobre uma collection de usuário.

  • $keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina esta variável para os valores das variáveis $keyVaultDatabaseName e $keyVaultCollectionName, separados por um período.

  • $encryptedDatabaseName - O banco de dados no MongoDB onde seus dados criptografados serão armazenados. Defina esta variável como 'medicalRecords'.

  • $encryptedCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina esta variável como 'patients'.

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • key_vault_database_name - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • key_vault_collection_name - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • key_vault_namespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis key_vault_database_name e key_vault_collection_name , separados por um período.

  • encryption_database_name - O banco de banco de dados do MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryption_collection_name - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você está usando para armazenar sua Chave Mestre do Cliente. Defina esta variável como "local" para este tutorial.

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI .

  • key_vault_database_name - O banco de dados de dados no MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina esta variável como "encryption".

  • key_vault_collection_name - A coleção no MongoDB onde seus DEKs serão armazenados. Defina essa variável como "__keyVault", que é a convenção para ajudar a evitar dúvidas sobre uma collection de usuário.

  • key_vault_namespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina essa variável como uma estrutura Namespace e passe os valores das variáveis key_vault_database_name e key_vault_collection_name.

  • encryption_database_name - O banco de dados de dados no MongoDB onde seus dados criptografados serão armazenados. Defina esta variável como "medicalRecords".

  • encryption_collection_name - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina esta variável como "patients".

Você pode declarar essas variáveis usando o seguinte 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

Permissões de namespace da coleção de cofre de chaves

A collection de cofre de chaves está no namespace encryption.__keyVault . Certifique-se de que o trigger de banco de dados que sua aplicação usa para se conectar ao MongoDB tenha permissões de ReadWrite nesse namespace.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

2

Crie uma variável contendo suas credenciais KMS com a seguinte estrutura. Use as credenciais do Azure Key Vault que você registrou no quando registrou seu aplicação no 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
},
};

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor Azure KMS de " my_azure_provider " na variável de credenciais KMS , conforme mostrado no código a seguir:

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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "azure".

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);

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor Azure KMS de " my_azure_provider " na variável de credenciais KMS , conforme mostrado no código a seguir:

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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "azure".

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);

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor Azure KMS de " my_azure_provider " na variável de credenciais KMS , conforme mostrado no código a seguir:

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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "azure".

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
},
};

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor Azure KMS de " my_azure_provider " na variável de credenciais KMS , conforme mostrado no código a seguir:

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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "azure".

$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
],
];

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor Azure KMS de "my_azure_provider" em sua variável de credenciais KMS, conforme mostrado no código a seguir:

$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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, 'azure'.

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
}
}

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor Azure KMS de " my_azure_provider " na variável de credenciais KMS , conforme mostrado no código a seguir:

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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "azure".

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,
)];

Você também pode fornecer um nome personalizado para seu provedor de KMS passando o nome como uma string para a função with_name(). Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor Azure KMS de " my_azure_provider " na variável de credenciais KMS , conforme mostrado no código a seguir:

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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "azure".

3

Crie uma variável contendo suas credenciais da Chave Mestre do Cliente com a seguinte estrutura. Use os detalhes da CMK que você registrou ao criar uma CMK.

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

Para criar um cliente para criptografar e descriptografar dados em coleções criptografadas, instancie um novo MongoClient usando seu URI de conexão e opções de criptografia automática .

const encryptedClient = Mongo(uri, autoEncryptionOptions);

IMPORTANTE: se você estiver usando o .NET/C# Driver versão 3.0 ou posterior, deverá adicionar o seguinte código ao seu aplicação antes de instanciar um novo MongoClient:

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

Instancie um novo MongoClient usando seu URI de conexão e as opções de criptografia automática :

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

Os exemplos de código neste tutorial usam as seguintes variáveis para executar o fluxo de trabalho com Queryable Encryption:

  • kmsProviderName - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um período.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina keyVaultDatabaseName como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina keyVaultCollectionName como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina keyVaultNamespace para um novo objeto CollectionNamespace cujo nome são os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um ponto.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina encryptedDatabaseName como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina encryptedCollectionName como "patients".

  • uri - URI de conexão de implantação do MongoDB. Defina seu URI de conexão no arquivo appsettings.json ou substitua o valor diretamente.

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um período.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um período.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um período.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você está usando para armazenar sua Chave Mestre do Cliente. Configure a variável de ambiente do KMS_PROVIDER para seu provedor de chave: 'aws', 'azure', 'gcp' ou 'kmip'.

  • $uri - URI de conexão do MongoDB deployment. Defina seu URI de conexão na variável de ambiente MONGODB_URI .

  • $keyVaultDatabaseName - O banco de dados no MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina o valor de $keyVaultDatabaseName para 'encryption'.

  • $keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina essa variável como '__keyVault', que é a convenção para ajudar a evitar dúvidas sobre uma collection de usuário.

  • $keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina esta variável para os valores das variáveis $keyVaultDatabaseName e $keyVaultCollectionName, separados por um período.

  • $encryptedDatabaseName - O banco de dados no MongoDB onde seus dados criptografados serão armazenados. Defina esta variável como 'medicalRecords'.

  • $encryptedCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina esta variável como 'patients'.

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • key_vault_database_name - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • key_vault_collection_name - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • key_vault_namespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis key_vault_database_name e key_vault_collection_name , separados por um período.

  • encryption_database_name - O banco de banco de dados do MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryption_collection_name - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você está usando para armazenar sua Chave Mestre do Cliente. Defina esta variável como "local" para este tutorial.

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI .

  • key_vault_database_name - O banco de dados de dados no MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina esta variável como "encryption".

  • key_vault_collection_name - A coleção no MongoDB onde seus DEKs serão armazenados. Defina essa variável como "__keyVault", que é a convenção para ajudar a evitar dúvidas sobre uma collection de usuário.

  • key_vault_namespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina essa variável como uma estrutura Namespace e passe os valores das variáveis key_vault_database_name e key_vault_collection_name.

  • encryption_database_name - O banco de dados de dados no MongoDB onde seus dados criptografados serão armazenados. Defina esta variável como "medicalRecords".

  • encryption_collection_name - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina esta variável como "patients".

Você pode declarar essas variáveis usando o seguinte 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

Permissões de namespace da coleção de cofre de chaves

A collection de cofre de chaves está no namespace encryption.__keyVault . Certifique-se de que o trigger de banco de dados que sua aplicação usa para se conectar ao MongoDB tenha permissões de ReadWrite nesse namespace.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

2

Crie uma variável contendo suas credenciais KMS com a seguinte estrutura.

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

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor GCP KMS "my_gcp_provider" na variável de credenciais KMS, conforme mostrado no código a seguir:

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

NOTA: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "gcp".

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);

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor GCP KMS "my_gcp_provider" na variável de credenciais KMS, conforme mostrado no código a seguir:

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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "gcp".

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);

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor GCP KMS "my_gcp_provider" na variável de credenciais KMS, conforme mostrado no código a seguir:

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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "gcp".

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

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor GCP KMS "my_gcp_provider" na variável de credenciais KMS, conforme mostrado no código a seguir:

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

NOTA: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "gcp".

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

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor GCP KMS como "my_gcp_provider" na variável de credenciais KMS, conforme mostrado no código a seguir:

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

NOTA: as etapas restantes deste tutorial usam a string do provedor KMS padrão, 'gcp'.

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

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor GCP KMS "my_gcp_provider" na variável de credenciais KMS, conforme mostrado no código a seguir:

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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "gcp".

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,
)];

Você também pode fornecer um nome personalizado para seu provedor de KMS passando o nome como uma string para a função with_name(). Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor GCP KMS "my_gcp_provider" na variável de credenciais KMS, conforme mostrado no código a seguir:

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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "gcp".

3

Crie uma variável contendo suas credenciais da Chave Mestre do Cliente com a seguinte estrutura. Use as credenciais que você registrou ao criar uma CMK.

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

Para criar um cliente para criptografar e descriptografar dados em coleções criptografadas, instancie um novo MongoClient usando seu URI de conexão e opções de criptografia automática .

const encryptedClient = Mongo(uri, autoEncryptionOptions);

IMPORTANTE: se você estiver usando o .NET/C# Driver versão 3.0 ou posterior, deverá adicionar o seguinte código ao seu aplicação antes de instanciar um novo MongoClient:

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

Instancie um novo MongoClient usando seu URI de conexão e as opções de criptografia automática :

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

Os exemplos de código neste tutorial usam as seguintes variáveis para executar o fluxo de trabalho com Queryable Encryption:

  • kmsProviderName - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um período.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina keyVaultDatabaseName como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina keyVaultCollectionName como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina keyVaultNamespace para um novo objeto CollectionNamespace cujo nome são os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um ponto.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina encryptedDatabaseName como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina encryptedCollectionName como "patients".

  • uri - URI de conexão de implantação do MongoDB. Defina seu URI de conexão no arquivo appsettings.json ou substitua o valor diretamente.

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um período.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um período.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • keyVaultDatabaseName - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis keyVaultDatabaseName e keyVaultCollectionName , separados por um período.

  • encryptionDatabaseName - O banco de banco de dados MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryptionCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você está usando para armazenar sua Chave Mestre do Cliente. Configure a variável de ambiente do KMS_PROVIDER para seu provedor de chave: 'aws', 'azure', 'gcp' ou 'kmip'.

  • $uri - URI de conexão do MongoDB deployment. Defina seu URI de conexão na variável de ambiente MONGODB_URI .

  • $keyVaultDatabaseName - O banco de dados no MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina o valor de $keyVaultDatabaseName para 'encryption'.

  • $keyVaultCollectionName - A coleção no MongoDB onde seus DEKs serão armazenados. Defina essa variável como '__keyVault', que é a convenção para ajudar a evitar dúvidas sobre uma collection de usuário.

  • $keyVaultNamespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina esta variável para os valores das variáveis $keyVaultDatabaseName e $keyVaultCollectionName, separados por um período.

  • $encryptedDatabaseName - O banco de dados no MongoDB onde seus dados criptografados serão armazenados. Defina esta variável como 'medicalRecords'.

  • $encryptedCollectionName - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina esta variável como 'patients'.

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você usa para armazenar sua Chave Mestre do Cliente. Defina isso como seu provedor de chaves: "aws", "azure", "gcp" ou "kmip".

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI ou substitua o valor diretamente.

  • key_vault_database_name - O banco de banco de dados MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina isso como "encryption".

  • key_vault_collection_name - A coleção no MongoDB onde seus DEKs serão armazenados. Defina isso como "__keyVault".

  • key_vault_namespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina isso para os valores das variáveis key_vault_database_name e key_vault_collection_name , separados por um período.

  • encryption_database_name - O banco de banco de dados do MongoDB onde seus dados criptografados serão armazenados. Defina isso como "medicalRecords".

  • encryption_collection_name - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina isso como "patients".

Você pode declarar essas variáveis usando o seguinte 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 - O KMS que você está usando para armazenar sua Chave Mestre do Cliente. Defina esta variável como "local" para este tutorial.

  • uri - URI de conexão do sistema do MongoDB . Defina seu URI de conexão na variável de ambiente MONGODB_URI .

  • key_vault_database_name - O banco de dados de dados no MongoDB onde suas chaves de criptografia de dados (DEKs) serão armazenadas. Defina esta variável como "encryption".

  • key_vault_collection_name - A coleção no MongoDB onde seus DEKs serão armazenados. Defina essa variável como "__keyVault", que é a convenção para ajudar a evitar dúvidas sobre uma collection de usuário.

  • key_vault_namespace - O namespace no MongoDB onde seus DEKs serão armazenados. Defina essa variável como uma estrutura Namespace e passe os valores das variáveis key_vault_database_name e key_vault_collection_name.

  • encryption_database_name - O banco de dados de dados no MongoDB onde seus dados criptografados serão armazenados. Defina esta variável como "medicalRecords".

  • encryption_collection_name - A coleção no MongoDB onde seus dados criptografados serão armazenados. Defina esta variável como "patients".

Você pode declarar essas variáveis usando o seguinte 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

Permissões de namespace da coleção de cofre de chaves

A collection de cofre de chaves está no namespace encryption.__keyVault . Certifique-se de que o trigger de banco de dados que sua aplicação usa para se conectar ao MongoDB tenha permissões de ReadWrite nesse namespace.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

Dica

Variáveis de ambiente

O código de exemplo neste tutorial faz referência a variáveis de ambiente que você precisa definir. Como alternativa, você pode substituir os valores diretamente no código.

Para saber como configurar essas variáveis de ambiente, consulte o readme.md incluído na aplicação de amostra no Github.

2

Crie uma variável contendo o endpoint do seu provedor de chaves compatível com KMIP com a seguinte estrutura:

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

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor KMIP KMS "my_kmip_provider" em sua variável de credenciais KMS , conforme mostrado no código a seguir:

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

NOTA: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "kmip".

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);

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor KMIP KMS "my_kmip_provider" em sua variável de credenciais KMS , conforme mostrado no código a seguir:

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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "kmip".

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);

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor KMIP KMS "my_kmip_provider" em sua variável de credenciais KMS , conforme mostrado no código a seguir:

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: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "kmip".

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

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor KMIP KMS "my_kmip_provider" em sua variável de credenciais KMS , conforme mostrado no código a seguir:

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

NOTA: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "kmip".

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

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor KMIP KMS como "my_kmip_provider" em sua variável de credenciais KMS, conforme mostrado no código a seguir:

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

NOTA: as etapas restantes deste tutorial usam a string do provedor KMS padrão, 'kmip'.

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

Você também pode fornecer um nome personalizado para seu provedor de KMS passando uma string que inclua o nome do provedor de KMS, seguido por dois pontos e o nome personalizado. Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor KMIP KMS "my_kmip_provider" em sua variável de credenciais KMS , conforme mostrado no código a seguir:

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

NOTA: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "kmip".

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

Você também pode fornecer um nome personalizado para seu provedor de KMS passando o nome como uma string para a função with_name(). Fornecer um nome exclusivo para um provedor de KMS permite especificar vários provedores de KMS do mesmo tipo.

Por exemplo, você pode nomear seu provedor KMIP KMS "my_kmip_provider" em sua variável de credenciais KMS , conforme mostrado no código a seguir:

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

NOTA: as etapas restantes deste tutorial usam a string do provedor KMS padrão, "kmip".

3

Crie um objeto vazio, conforme mostrado no exemplo de código a seguir. Isso solicita que seu fornecedor de chaves compatível com KMIPgere uma nova chave mestre do cliente.

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

Para criar um cliente para criptografar e descriptografar dados em coleções criptografadas, instancie um novo MongoClient usando seu URI de conexão e opções de criptografia automática .

const encryptedClient = Mongo(uri, autoEncryptionOptions);

IMPORTANTE: se você estiver usando o .NET/C# Driver versão 3.0 ou posterior, deverá adicionar o seguinte código ao seu aplicação antes de instanciar um novo MongoClient:

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

Instancie um novo MongoClient usando seu URI de conexão e as opções de criptografia automática :

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();

Depois de instalar um driver e dependências, criar uma chave mestra do cliente e criar seu aplicativo, consulte Visão geral: usar a Queryable Encryption para criptografar e consultar dados.

Voltar

Criar uma chave mestra do cliente

Nesta página