Para monitorar as atividades da plataforma Atlas , use auditoria.
Recursos para auditoria do Atlas
Disponível em M10+
clusters, a auditoria de banco de dados permite rastrear a atividade do sistema para implementações com vários usuários.
Como administrador do Atlas , você pode criar um filtro de auditar JSON personalizado no MongoDB para controlar com precisão o que é auditado em seu sistema.
Essa abordagem permite especificar exatamente quais ações, usuários do banco de dados e roles do Atlas devem ser monitorados, dando a você um controle mais granular sobre seu processo de auditoria em comparação com o construtor de filtros padrão na UI do Atlas .
Com a configuração de auditoria manual, você pode monitorar quase todas as ações de evento do sistema documentadas no Atlas.
Os recursos abrangentes de auditoria de banco de dados fornecem rastreamento detalhado de:
Operações de DDL (Data definition language)
Operações de DML (Data Manipulation Language)
Operações DCL (Data Control Language).
Isso fornece visibilidade completa das alterações no esquema do banco de dados , das modificações de dados e dos ajustes de permissão.
Para obter orientações de implementação, incluindo listas completas de evento e exemplos práticos de configuração, consulte a documentação de auditoria do MongoDB e filtros de auditoria de exemplo. Instruções de configuração adicionais 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 auditar para limitar as auditorias a apenas determinadas operações de preocupação. 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 auditar de evento .
O documento a seguir define um filtro de auditar que restringe as auditorias apenas às operações de autenticação que ocorrem no test
banco de dados . Para saber mais, consulte Configurar filtros de auditoria.
{ "atype": "authenticate", "param.db": "test" }
Para habilitar um filtro de auditar , execute o comando atlas auditing update com o sinalizador --enabled
e especifique o documento do filtro de auditar entre aspas simples para passar o documento como uma string:
atlas auditing update --enabled --auditFilter '{"atype": "authenticate", "param.db": "test"}'
Os filtros de auditar personalizados permitem que você renuncie ao construtor gerenciado de filtros de auditoria {atlas-ui+} em favor do controle granular personalizado da auditoria de evento . 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 auditar :
Deve resolver para uma query que corresponda a um ou mais campos na mensagem do evento de auditar .
Pode usar combinações de operadores de consulta e condições de igualdade para corresponder às mensagens de auditar desejadas.
O Atlas oferece suporte à especificação de um filtro de auditar formatado em JSON para personalizar a auditoria do MongoDB .
Configurar um arquivo de configuração JSON para seu filtro personalizado também é útil porque se você precisar criar um filtro grande, é mais fácil gerenciar e manter o filtro se você armazenar a configuração do filtro em um arquivo separado.
O seguinte comando do Atlas CLI habilita um filtro de auditar que é definido no arquivo de configuraçãoJSON do especificado:
atlas auditing update --enabled -f filter.json
Recomendações para auditoria do Atlas
As recomendações a seguir se aplicam a todos os paradigmas de implantação do.
Recomendamos que você configure a auditoria de banco de dados ao provisionar seus clusters.
A auditoria do banco de dados aumenta o uso de recursos do cluster e as despesas operacionais.
Para manter o desempenho ideal e os custos de controle, considere auditar apenas os usuários essenciais e desativar a auditoria em ambientes de desenvolvimento em que ela não seja necessária.
Alguns setores, como o de saúde e o de serviços financeiros, podem optar por manter a auditoria habilitada em ambientes de desenvolvimento por motivos 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 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 auditar do seu projeto, utilize o comando atlas auditing update e especifique o novo filtro de auditar . O comando a seguir substitui a configuração do filtro de auditar existente por um novo filtro que audita todos os eventos de autenticação para usuários conhecidos no projeto:
atlas auditing update --enabled --auditFilter '{"atype": "authenticate"}'
Descrever a configuração de auditoria
Execute o comando atlas auditing describe 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 roteiro:
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 no AWS na região leste dos EUA.
Habilita recursos de auditoria detalhados 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 usuários administradores e usuários externos do banco de dados , enquanto rastreia operações críticas, como tentativas de autenticação, modificações de role e comandos comuns do banco de dados , como find
, insert
, update
e delete
operações.
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 }