Para monitorar as atividades da plataforma Atlas, utilize auditoria.
Recursos para auditoria do Atlas
Disponível em clusters M10+, a auditoria de banco de dados permite que você acompanhe a atividade do sistema para implantações com vários usuários.
Como administrador do Atlas, você pode criar um filtro de auditoria JSON personalizado no MongoDB para controlar com precisão o que é auditado em todo o seu sistema.
Essa abordagem permite especificar exatamente quais ações, usuários de banco de dados e funções do Atlas devem ser monitorados, dando a você um controle mais granular sobre o processo de auditoria em comparação com o construtor de filtros padrão na IU do Atlas.
Com configuração de auditoria manual, você pode monitorar quase todas as ações de eventos do sistema documentadas no Atlas.
As funcionalidades abrangentes de auditoria de banco de dados fornecem rastreamento detalhado de:
Operações DDL (Linguagem de definição de dados)
operações em Linguagem de manipulação de dados (DML)
Operações de DCL (Linguagem de controle de dados).
Isso oferece visibilidade completa sobre as alterações no esquema do banco de dados, modificações de dados e ajustes de permissões.
Para obter orientação de implementação, incluindo listas completas de eventos e exemplos práticos de configuração, consulte a documentação de auditoria do MongoDB e Filtros de auditoria de exemplo. Instruções adicionais de configuração estão disponíveis na seção Configurar auditoria de banco de dados.
Criar e habilitar um filtro de auditoria no Atlas
Você pode criar filtros de auditoria para limitar as auditorias a apenas determinadas operações de interesse. Quando você habilita a auditoria de operações, o Atlas registra todas as operações auditáveis, conforme detalhado em Ações, detalhes e resultados do evento de auditoria.
Para limitar quais eventos o Atlas deve registrar, você pode especificar filtros de auditoria de eventos.
O documento a seguir define um filtro de auditoria que restringe as auditorias apenas às operações de autenticação que ocorrem no banco de dados test. Para saber mais, consulte Configurar filtros de auditoria.
{ "atype": "authenticate", "param.db": "test" }
Para habilitar um filtro de auditoria, execute o comando atualização de auditoria do Atlas com a flag --enabled e especifique o documento do filtro de auditoria entre aspas simples para passar o documento como uma string:
atlas auditing update --enabled --auditFilter '{"atype": "authenticate", "param.db": "test"}'
Os filtros de auditoria personalizados permitem que você prescinda do construtor de filtros de auditoria gerenciado {atlas-ui+}, oferecendo um controle granular feito sob medida para a auditoria de eventos. O Atlas verifica apenas se o filtro personalizado utiliza uma sintaxe JSON válida, e não valida ou testa a funcionalidade do filtro.
O documento do filtro de auditoria:
O resultado deve ser uma query que corresponda a um ou mais campos na mensagem do evento de auditoria.
Pode usar combinações de operadores de query e condições de igualdade para corresponder às mensagens de auditoria desejadas.
O Atlas oferece suporte à especificação de um filtro de auditoria formatado em JSON para personalizar a auditoria do MongoDB.
Configurar um arquivo de configuração JSON para seu filtro personalizado é útil, pois, se precisar criar um filtro grande, será mais fácil gerenciá-lo e mantê-lo ao armazenar a configuração em um arquivo separado.
O seguinte comando Atlas CLI habilita um filtro de auditoria que é definido no arquivo de configuração JSON especificado:
atlas auditing update --enabled -f filter.json
Recomendações para auditoria do Atlas
As seguintes recomendações se aplicam a todos os paradigmas de implantação.
Recomendamos que você configure a auditoria de banco de dados ao fazer o provisionamento de seus clusters.
A auditoria de banco de dados aumenta o uso de recursos do cluster e as despesas operacionais.
Para manter o desempenho ideal e controlar os custos, considere auditar apenas os usuários essenciais e desativar a auditoria em ambientes de desenvolvimento onde não é necessária.
Certas indústrias, como a de saúde e a de serviços financeiros, podem optar por manter a auditoria habilitada em ambientes de desenvolvimento por razões de compliance.
Recomendamos que você auditar, no mínimo, os seguintes eventos:
Falha no logon
Atividade da sessão
Logon e logoff
Tentativas de executar funções não autorizadas
Alteração de senha
Alterações no acesso do usuário do banco de dados
Procedimentos armazenados de configuração do DDL e do sistema
Modificação de auditoria nativa
Execução de uma operação de backup ou restauração
Alterar as configurações nativas de auditoria do DBMS
Modificar a segurança
Executando comandos de início e parada do banco de dados
Exemplos de automação: auditoria do Atlas
Dica
Para exemplos de Terraform que impõem nossas recomendações em todos os colunas, consulte um dos seguintes exemplos no Github:
Os exemplos a seguir mostram como recuperar e baixar logs e configurar a auditoria usando as ferramentas do Atlas para automação.
Atualizar configuração de auditoria
Para atualizar a configuração de auditoria do seu projeto, use o comando atualização de auditoria do Atlas e especifique o novo filtro de auditoria. O comando a seguir substitui a configuração de filtro de auditoria existente por um novo filtro que audita todos os eventos de autenticação de usuários conhecidos no projeto:
atlas auditing update --enabled --auditFilter '{"atype": "authenticate"}'
Descrever a configuração de auditoria
Execute o comando descrever auditoria do Atlas para retornar a configuração de auditoria do projeto especificado:
atlas auditing describe --output json
O exemplo a seguir demonstra como habilitar a auditoria para seu sistema. Antes de criar recursos com Terraform, você deve:
Crie sua organização pagadora e crie uma chave de API para a organização pagadora. Armazene suas chaves públicas e privadas como variáveis de ambiente executando os seguintes comandos no terminal:
export MONGODB_ATLAS_PUBLIC_KEY="<insert your public key here>" export MONGODB_ATLAS_PRIVATE_KEY="<insert your private key here>"
Habilitar auditoria e criar um filtro de auditoria
Você pode configurar a auditoria manual da maioria das ações de evento do sistema documentadas criando filtros de auditar. Para saber mais sobre como configurar filtros de auditar, consulte Configurar filtros de auditoria.
O script Terraform a seguir configura uma infraestrutura completa do MongoDB Atlas com auditoria abrangente de banco de dados. O script:
Cria um novo projeto dentro de uma organização e provisiona um cluster de conjunto de réplicas de três nós (instâncias M10) implantado na AWS na região Leste dos EUA.
Habilita funcionalidades detalhadas de auditoria usando um filtro JSON que monitora eventos de autenticação, operações de gerenciamento de usuários e vários comandos de banco de dados, incluindo manipulação de dados e operações de query.
A configuração de auditoria tem como alvo específico os usuários de banco de dados administradores e externos, enquanto monitora operações críticas, como tentativas de autenticação, modificações de função e comandos de banco de dados comuns, como operações find, insert, update e delete.
Add the MongoDB Atlas Provider terraform { required_providers { mongodbatlas = { source = "mongodb/mongodbatlas" version = "1.34.0" } } } Configure the MongoDB Atlas Provider provider "mongodbatlas" { public_key = var.mongodbatlas_public_key private_key = var.mongodbatlas_private_key } Create a Project resource "mongodbatlas_project" "this" { org_id = var.atlas_org_id name = var.atlas_project_name } Create an Atlas Advanced Cluster resource "mongodbatlas_advanced_cluster" "atlas-cluster" { project_id = mongodbatlas_project.atlas-project.id name = "ClusterPortalProd" cluster_type = "REPLICASET" mongo_db_major_version = "8.0" replication_specs { region_configs { electable_specs { instance_size = "M10" node_count = 1 } provider_name = "AWS" priority = 7 region_name = "US_WEST_1" } } Advanced configuration backup_enabled = true pit_enabled = true version_release_system = "LTS" } Create comprehensive auditing configuration to capture all possible audit events resource "mongodbatlas_auditing" "atlas-auditing" { project_id = mongodbatlas_project.atlas-project.id Comprehensive audit filter to capture all possible audit events audit_filter = jsonencode({ "$or" = [ # Capture all authentication events { "atype" = { "$in" = [ "authenticate", "authCheck", "logout" ] } }, # Capture all authorization events { "atype" = "authCheck" }, # Capture all CRUD operations { "atype" = "authCheck", "param.command" = { "$in" = [ # Read operations "find", "getMore", "count", "distinct", "aggregate", "group", "mapReduce", "geoNear", "geoSearch", "parallelCollectionScan", "eval", "getLastError", "getPrevError", "resetError", # Write operations "insert", "update", "delete", "findAndModify", "save", # Index operations "createIndexes", "dropIndexes", "listIndexes", "reIndex", # Collection operations "create", "drop", "listCollections", "collMod", "convertToCapped", "emptycapped", "renameCollection", # Database operations "dropDatabase", "listDatabases", "copydb", "clone", # GridFS operations "filemd5" ] } }, # Capture all DDL (Data Definition Language) operations { "atype" = "authCheck", "param.command" = { "$in" = [ "create", "drop", "createIndexes", "dropIndexes", "collMod", "renameCollection", "dropDatabase", "createCollection", "dropCollection" ] } }, # Capture all user and role management operations { "atype" = "authCheck", "param.command" = { "$in" = [ "createUser", "dropUser", "dropAllUsersFromDatabase", "updateUser", "grantRolesToUser", "revokeRolesFromUser", "createRole", "updateRole", "dropRole", "dropAllRolesFromDatabase", "grantRolesToRole", "revokeRolesFromRole", "grantPrivilegesToRole", "revokePrivilegesFromRole" ] } }, # Capture replica set operations { "atype" = "authCheck", "param.command" = { "$in" = [ "replSetGetStatus", "replSetInitiate", "replSetReconfig", "replSetStepDown", "replSetSyncFrom", "replSetFreeze", "replSetMaintenance", "replSetGetConfig" ] } }, # Capture sharding operations { "atype" = "authCheck", "param.command" = { "$in" = [ "shardCollection", "addShard", "removeShard", "movePrimary", "enableSharding", "split", "moveChunk", "mergeChunks" ] } }, # Capture administrative operations { "atype" = "authCheck", "param.command" = { "$in" = [ "shutdown", "fsync", "getParameter", "setParameter", "serverStatus", "dbStats", "collStats", "currentOp", "killOp", "listCommands", "buildInfo", "hostInfo", "connectionStatus", "getCmdLineOpts", "logRotate", "planCacheClear", "planCacheListFilters", "planCacheSetFilter", "planCacheClearFilters" ] } }, # Capture diagnostic operations { "atype" = "authCheck", "param.command" = { "$in" = [ "explain", "profile", "validate", "dbHash", "ping", "ismaster", "isMaster", "hello" ] } }, # Capture connection and session events { "atype" = { "$in" = [ "createSession", "endSession", "refreshSession" ] } }, # Capture transaction events { "atype" = "authCheck", "param.command" = { "$in" = [ "abortTransaction", "commitTransaction", "startTransaction" ] } }, # Capture change stream events { "atype" = "authCheck", "param.command" = { "$in" = [ "aggregate" ] }, "param.pipeline" = { "$elemMatch" = { "$changeStream" = { "$exists" = true } } } } ] }) Enable comprehensive auditing settings audit_authorization_success = true # Audit both successful and failed operations enabled = true # Enable auditing } Variables variable "mongodbatlas_public_key" { default = "" description = "MongoDB Atlas Public Key" type = string sensitive = true } variable "mongodbatlas_private_key" { default = "" description = "MongoDB Atlas Private Key" type = string sensitive = true } variable "atlas_org_id" { default = "" description = "MongoDB Atlas Organization ID" type = string } variable "atlas_project_name" { description = "MongoDB Atlas Project Name" type = string default = "Atlas Auditing Example" } Outputs output "cluster_connection_string" { description = "Connection string for the Atlas cluster" value = mongodbatlas_advanced_cluster.atlas-cluster.connection_strings[0].standard_srv sensitive = true } output "cluster_id" { description = "Atlas cluster ID" value = mongodbatlas_advanced_cluster.atlas-cluster.cluster_id } output "project_id" { description = "Atlas project ID" value = mongodbatlas_project.atlas-project.id } output "auditing_enabled" { description = "Whether auditing is enabled" value = mongodbatlas_auditing.atlas-auditing.enabled }