Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ /
Centro de Arquitetura Atlas
/

Orientações para Criptografia de Dados do Atlas

O Atlas oferece diversos recursos de criptografia para proteger dados em trânsito, em repouso e em uso, garantindo a segurança dos dados durante todo o seu ciclo de vida.

A criptografia em trânsito protege os dados durante a transmissão entre clientes e servidores, garantindo que seus dados não possam ser inspecionados enquanto estão em movimento. No Atlas, todo o tráfego de rede para clusters é protegido pelo TLS (Transport Layer Security), que está habilitado por padrão e não pode ser desabilitado. Os dados transmitidos para e entre nós são criptografados em trânsito usando TLS, garantindo uma comunicação segura por toda parte.

Você pode selecionar qual versão do TLS usar no Atlas. TLS 1.2 e um comprimento mínimo de chave de 128 bits são as configurações padrão recomendadas. Toda criptografia em trânsito é suportada pelo módulo de objetoFIPS do OpenSSL .

Uma imagem mostrando criptografia em trânsito com TLS entre aplicativos cliente e MongoDB Atlas.
clique para ampliar

A encryption at rest garante que todos os dados em disco sejam criptografados e visíveis apenas quando descriptografados por um processo ou aplicação autorizado.

No Atlas, os dados do cliente são automaticamente criptografados em repouso usando AES-256. Esse processo utiliza a criptografia de disco do seu fornecedor de nuvem, com o fornecedor gerenciando as chaves de criptografia. Este processo não pode ser desabilitado.

Por padrão, a criptografia em descanso é feita em nível de volume.

Além disso, você pode habilitar a criptografia em nível de banco de dados trazer sua própria chave (BYOK). Essa é a chave gerenciada pelo cliente (CMK) que você adiciona com um serviço de gerenciamento de chaves (KMS), como AWS KMS, Google Cloud KMS ou Azure Key Vault. O recurso BYOK oferece criptografia em nível de arquivo e é equivalente à criptografia de dados transparente (TDE), atendendo aos requisitos de TDE corporativos. A criptografia com gerenciamento de chaves de cliente adiciona outra camada de segurança para maior confidencialidade e segmentação de dados.

Para saber mais, consulte Encryption at Rest usando o Gerenciamento de chaves do cliente.

Uma imagem mostrando a criptografia em descanso com uma chave adicional gerenciada pelo cliente.
clique para ampliar

A criptografia em uso protege os dados enquanto estão sendo processados. O MongoDB possui dois recursos de criptografia em uso para atender às suas necessidades de proteção de dados: criptografia no nível do campo do lado do cliente e Queryable Encryption.

A criptografia no nível do campo do lado do cliente (CSFLE) é um recurso de criptografia em uso que permite que um aplicação cliente criptografe dados confidenciais antes de armazená-los no banco de dados MongoDB . Os dados confidenciais são criptografados de forma transparente, permanecem criptografados durante todo o seu ciclo de vida e só são descriptografados no lado do cliente .

Você pode criptografar seletivamente campos individuais dentro de um documento, vários campos dentro do documento ou o documento inteiro. Você pode, opcionalmente, proteger cada campo com sua própria chave e descriptografá-los de forma transparente no cliente usando um driver do MongoDB. O CSFLE utiliza AES-256 no modo CBC autenticado para criptografar dados.

Além disso, você pode selecionar a criptografia aleatória, que não pode ser consultada, mas pode ser necessária para determinados requisitos de segurança.

O diagrama a seguir demonstra um fluxo de trabalho CSFLE em que os registros de usuário são armazenados em um banco de dados MongoDB e consultados pelo cliente. O número de segurança social (SSN) do usuário é criptografado antes de ser armazenado no banco de dados. Quando o aplicação envia uma query básica de igualdade no campo, o driver do MongoDB usa a chave para criptografar a query no lado do cliente e envia a query criptografada para o servidor. O servidor retorna os resultados criptografados para o cliente, que descriptografa os resultados antes de devolvê-los ao cliente autenticado como texto simples legível.

O CSFLE é compatível com todos os principais serviços de gerenciamento de chaves na nuvem e on-premises.

Uma imagem mostrando um fluxo de trabalho de criptografia no nível do campo do lado do cliente (CSFLE) de exemplo.
clique para ampliar

Queryable Encryption ajuda as organizações a proteger dados sensíveis quando são consultados. Assim como o CSFLE, ela permite que os aplicativos criptografem seus dados no lado do cliente antes de armazená-los no banco de dados do MongoDB. Também permite que os aplicativos executem consultas expressivas, como as de igualdade, diretamente nos dados criptografados, utilizando um algoritmo de pesquisa criptografado. A Queryable Encryption garante a proteção de informações confidenciais sem sacrificar a capacidade de realizar consultas sobre elas. A Queryable Encryption sempre utiliza criptografia não determinística.

Para saber mais sobre os algoritmos usados na Queryable Encryption, consulte o whitepaper da Queryable Encryption.

O diagrama a seguir demonstra um fluxo de trabalho de Queryable Encryption em que os registros do usuário são armazenados em um banco de dados MongoDB e consultados pelo cliente. A data de nascimento (DOB) do usuário é criptografada antes de ser armazenada no banco de dados. Quando o aplicativo submete uma consulta de intervalo expressiva no campo, o driver do MongoDB utiliza a chave para criptografar a consulta e envia um token criptográfico junto com ela para o servidor MongoDB. O servidor utiliza o algoritmo de pesquisa criptografada para processar a query sem ter acesso aos dados reais. Por fim, o driver utiliza a chave para decifrar os resultados da consulta e os devolve ao cliente autenticado como texto simples legível.

Uma imagem mostrando um exemplo de fluxo de trabalho de Queryable Encryption.
clique para ampliar

Recomendações que se aplicam apenas a sistemas em uma única região

As implantações de região única não têm considerações exclusivas para criptografia de dados. Consulte a próxima seção para "Todas as recomendações de paradigma de sistema".

Recomendações que se aplicam apenas a implementações em várias regiões ou vários fornecedores de nuvem

Em sistemas de multirregional e multinuvem , você pode habilitar a criptografia em nível de banco de dados levando sua própria chave gerenciada pelo cliente (BYOK).

Alguns fornecedores de KMS oferecem suporte a recursos multirregional . Por exemplo:

No entanto, no evento de uma interrupção regional que afete o endpoint KMS configurado, a integração do Atlas com um provedor de KMS não fornece failover automático da conexão ou mecanismo de acesso para o KMS entre regiões.

Se o provedor KMS configurado ficar indisponível, o Atlas realizará uma validação periódica de sua configuração KMS. Se as credenciais do seu provedor de KMS se tornarem inválidas ou se a chave de criptografia for excluída ou desativada, o Atlas encerrará os processos mongod e mongos na próxima verificação de validação agendada e notificará você por e-mail, indicando o status na interface do usuário do Atlas .

Quando o Atlas não consegue se conectar ao seu provedor de gerenciamento de chaves, ele não desliga seus processos. Portanto, se o acesso ao KMS for interrompido devido a um problema regional, o cluster poderá continuar em execução até que você o reinicie manualmente ou até que a validação falhe de forma mais crítica.

Por isso, se o KMS ficar inativo, você poderá alterar a configuração. Para recuperar o acesso à chave de criptografia em um cenário de interrupção de multirregional , você deve alterar manualmente a configuração no Atlas para ponto para uma instância ou configuração KMS diferente e acessível.

Se você utilizar Endpoints Privados para conectar ao KMS, você deverá estabelecer um endpoint privado de cada região onde os nós do Atlas são implantados de volta ao KMS primário. Isso é para garantir que a configuração ainda seja válida durante as verificações periódicas e, durante as configurações iniciais ou rotações de chaves, cada nó precisa acessar a chave mestra do cliente armazenada no KMS primário.

Em resumo, a integração do Atlas com os provedores BYOK para Encryption at Rest não oferece suporte a failover de multirregional automaticamente e você deve alterar manualmente a configuração.

As recomendações a seguir se aplicam a todos os paradigmas de implantação do.

Você habilita a criptografia com o gerenciamento de chaves de cliente no nível do projeto. Depois de habilitá-la, a configuração é aplicada automaticamente a todos os clusters criados no projeto, o que garante uma proteção de dados consistente em seu ambiente. Recomendamos que você use um KMS (KMS) como Amazon Web Services KMS, Google Cloud Platform KMS ou Azure Key Vault.

Para ambientes de preparo e produção, recomendamos que você habilite a criptografia com o gerenciamento de chaves do cliente ao provisionar seus clusters para evitar depender de equipes de desenvolvimento de aplicação para configurá-la posteriormente.

Para ambientes de desenvolvimento e teste, considere ignorar a criptografia com o gerenciamento de chaves do cliente para economizar custos. No entanto, se você armazenar dados confidenciais no Atlas, como para os setores de saúde ou serviços financeiros, considere habilitar a criptografia com o gerenciamento de chaves do cliente também em ambientes de desenvolvimento e teste.

Use os seguintes métodos para habilitar a criptografia com gerenciamento de chaves de cliente:

Para aprender a configurar a criptografia com o gerenciamento de chaves do cliente no provisionamento de uma nova organização, projeto e cluster do Atlas, consulte Exemplos de Automação: Organizações, Projetos e Clusters do Atlas.

Durante o processo de provisionamento, também recomendamos avaliar a sensibilidade de determinados campos em seus dados e classificá-los para determinar quais dados exigem criptografia e quais restrições globais devem ser aplicadas a esses grupos. Como diretriz geral, recomendamos que você aplique a Queryable Encryption em todos os campos sensíveis, além de seguir as práticas recomendadas de modelagem de dados.

Considere os seguintes níveis de classificação de dados como ponto de partida :

  • Dados públicos: dados que representam pouco ou nenhum risco para a empresa se ocorrer difusão, alteração ou destruição não autorizada de dados. Embora a confidencialidade seja menos preocupação, você ainda deve aplicar controles de autorização para evitar a modificação ou destruição não autorizada de dados públicos.

    Exemplos: produtos, livretos, informações de treinamento

  • Dados Privados: dados que representam um risco moderado para a empresa caso ocorra divulgação, alteração ou destruição não autorizada de dados. Por padrão, todos os dados institucionais que não são explicitamente classificados como dados restritos ou públicos devem ser considerados como dados privados. Aplique CSFLE ou Queryable Encryption em quaisquer campos que contenham dados privados, como PII.

    Exemplos: informações do cliente, contratos, custos do produto

  • Dados restritos: dados que representam um risco significativo para a empresa se ocorrer difusão, alteração ou destruição não autorizada de dados. Aplique o mais alto nível de controles de segurança a dados restritos, incluindo CSFLE ou Queryable Encryption em todos os campos e criptografia com gerenciamento de chaves do cliente para segurança adicional.

    Exemplos: informações de receita, folha de pagamento, riscos de segurança

Dica

Para exemplos de Terraform que impõem nossas recomendações em todos os colunas, consulte um dos seguintes exemplos no GitHub:

Os exemplos seguintes configuram a criptografia com o gerenciamento de chaves do cliente usando as ferramentas Atlas para automação.

Antes de configurar a criptografia com o gerenciamento de chaves do cliente, é necessário criar suas organizações, projetos e clusters. Para aprender mais, veja Exemplos de automação: organizações, projetos e clusters do Atlas.

Para seus ambientes de desenvolvimento e teste, considere omitir a criptografia com gerenciamento de chaves do cliente para reduzir custos, a menos que você esteja em um setor altamente regulamentado ou armazene dados sensíveis. Para aprender mais, veja Recomendações para organizações, projetos e clusters do Atlas.

Para habilitar a criptografia com o gerenciamento de chaves do cliente usando o Terraform, crie os seguintes recursos. Altere os IDs e nomes para usar os seus valores:

Dica

Para um exemplo de configuração completo, consulte Exemplo do Provedor de Terraformes do Atlas .

Como alternativa, para simplificar o processo de configuração, você pode usar o módulo Terraform criptografia em descanso .

resource "mongodbatlas_cloud_provider_access_setup" "setup_only" {
project_id = var.atlas_project_id
provider_name = "AWS"
}
resource "mongodbatlas_cloud_provider_access_authorization" "auth_role" {
project_id = var.atlas_project_id
role_id = mongodbatlas_cloud_provider_access_setup.setup_only.role_id
aws {
iam_assumed_role_arn = aws_iam_role.test_role.arn
}
}
resource "mongodbatlas_encryption_at_rest" "test" {
project_id = var.atlas_project_id
aws_kms_config {
enabled = true
customer_master_key_id = aws_kms_key.kms_key.id
region = var.atlas_region
role_id = mongodbatlas_cloud_provider_access_authorization.auth_role.role_id
}
}
data "mongodbatlas_encryption_at_rest" "test" {
project_id = mongodbatlas_encryption_at_rest.test.project_id
}
output "is_aws_kms_encryption_at_rest_valid" {
value = data.mongodbatlas_encryption_at_rest.test.aws_kms_config.valid
}

Dica

Para um exemplo de configuração completo, consulte Exemplo do Provedor de Terraformes do Atlas .

resource "mongodbatlas_encryption_at_rest" "test" {
project_id = var.atlas_project_id
azure_key_vault_config {
enabled = true
azure_environment = "AZURE"
tenant_id = var.azure_tenant_id
subscription_id = var.azure_subscription_id
client_id = var.azure_client_id
secret = var.azure_client_secret
resource_group_name = var.azure_resource_group_name
key_vault_name = var.azure_key_vault_name
key_identifier = var.azure_key_identifier
}
}
data "mongodbatlas_encryption_at_rest" "test" {
project_id = mongodbatlas_encryption_at_rest.test.project_id
}
output "is_azure_encryption_at_rest_valid" {
value = data.mongodbatlas_encryption_at_rest.test.azure_key_vault_config.valid
}
resource "mongodbatlas_encryption_at_rest" "test" {
project_id = var.atlas_project_id
google_cloud_kms_config {
enabled = true
service_account_key = "{\"type\": \"service_account\",\"project_id\": \"my-project-common-0\",\"private_key_id\": \"e120598ea4f88249469fcdd75a9a785c1bb3\",\"private_key\": \"-----BEGIN PRIVATE KEY-----\\nMIIEuwIBA(truncated)SfecnS0mT94D9\\n-----END PRIVATE KEY-----\\n\",\"client_email\": \"my-email-kms-0@my-project-common-0.iam.gserviceaccount.com\",\"client_id\": \"10180967717292066\",\"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\"token_uri\": \"https://accounts.google.com/o/oauth2/token\",\"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/my-email-kms-0%40my-project-common-0.iam.gserviceaccount.com\"}"
key_version_resource_id = "projects/my-project-common-0/locations/us-east4/keyRings/my-key-ring-0/cryptoKeys/my-key-0/cryptoKeyVersions/1"
}
}

Para mais opções de configuração e informações sobre este exemplo, consulte a documentação do Terraform.

Para seus ambientes de staging e produção, recomendamos habilitar a criptografia com gerenciamento de chaves do cliente ao provisionar seus clusters. Para aprender mais, veja Recomendações para organizações, projetos e clusters do Atlas.

Para habilitar a criptografia com o gerenciamento de chaves do cliente usando o Terraform, crie os seguintes recursos. Altere os IDs e nomes para usar os seus valores:

Dica

Para um exemplo de configuração completo, consulte Exemplo do Provedor de Terraformes do Atlas .

Como alternativa, para simplificar o processo de configuração, você pode usar o módulo Terraform criptografia em descanso .

resource "mongodbatlas_cloud_provider_access_setup" "setup_only" {
project_id = var.atlas_project_id
provider_name = "AWS"
}
resource "mongodbatlas_cloud_provider_access_authorization" "auth_role" {
project_id = var.atlas_project_id
role_id = mongodbatlas_cloud_provider_access_setup.setup_only.role_id
aws {
iam_assumed_role_arn = aws_iam_role.test_role.arn
}
}
resource "mongodbatlas_encryption_at_rest" "test" {
project_id = var.atlas_project_id
aws_kms_config {
enabled = true
customer_master_key_id = aws_kms_key.kms_key.id
region = var.atlas_region
role_id = mongodbatlas_cloud_provider_access_authorization.auth_role.role_id
}
}
data "mongodbatlas_encryption_at_rest" "test" {
project_id = mongodbatlas_encryption_at_rest.test.project_id
}
output "is_aws_kms_encryption_at_rest_valid" {
value = data.mongodbatlas_encryption_at_rest.test.aws_kms_config.valid
}

Dica

Para um exemplo de configuração completo, consulte Exemplo do Provedor de Terraformes do Atlas .

resource "mongodbatlas_encryption_at_rest" "test" {
project_id = var.atlas_project_id
azure_key_vault_config {
enabled = true
azure_environment = "AZURE"
tenant_id = var.azure_tenant_id
subscription_id = var.azure_subscription_id
client_id = var.azure_client_id
secret = var.azure_client_secret
resource_group_name = var.azure_resource_group_name
key_vault_name = var.azure_key_vault_name
key_identifier = var.azure_key_identifier
}
}
data "mongodbatlas_encryption_at_rest" "test" {
project_id = mongodbatlas_encryption_at_rest.test.project_id
}
output "is_azure_encryption_at_rest_valid" {
value = data.mongodbatlas_encryption_at_rest.test.azure_key_vault_config.valid
}
resource "mongodbatlas_encryption_at_rest" "test" {
project_id = var.atlas_project_id
google_cloud_kms_config {
enabled = true
service_account_key = "{\"type\": \"service_account\",\"project_id\": \"my-project-common-0\",\"private_key_id\": \"e120598ea4f88249469fcdd75a9a785c1bb3\",\"private_key\": \"-----BEGIN PRIVATE KEY-----\\nMIIEuwIBA(truncated)SfecnS0mT94D9\\n-----END PRIVATE KEY-----\\n\",\"client_email\": \"my-email-kms-0@my-project-common-0.iam.gserviceaccount.com\",\"client_id\": \"10180967717292066\",\"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\"token_uri\": \"https://accounts.google.com/o/oauth2/token\",\"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/my-email-kms-0%40my-project-common-0.iam.gserviceaccount.com\"}"
key_version_resource_id = "projects/my-project-common-0/locations/us-east4/keyRings/my-key-ring-0/cryptoKeys/my-key-0/cryptoKeyVersions/1"
}
}

Para mais opções de configuração e informações sobre este exemplo, consulte a documentação do Terraform.

Voltar

Exemplos de autenticação