Para supervisar las actividades de la plataforma Atlas, utilice auditoría.
Funciones para la auditoría de Atlas
Disponible en M10+ clústeres, la auditoría de bases de datos le permite rastrear la actividad del sistema para implementaciones con múltiples usuarios.
Como administrador de Atlas, puede crear un filtro de auditoría JSON personalizado en MongoDB para controlar con precisión qué se audita en su sistema.
Este enfoque le permite especificar exactamente qué acciones, usuarios de base de datos y roles de Atlas se deben monitorear, lo que le brinda un control más granular sobre su proceso de auditoría en comparación con el generador de filtros estándar en la interfaz de usuario de Atlas.
Con Configuración de auditoría manual: puede supervisar casi todas las acciones de eventos del sistema documentadas en Atlas.
Las capacidades integrales de auditoría de bases de datos proporcionan un seguimiento detallado de:
Operaciones DDL (lenguaje de definición de datos)
Operaciones DML (lenguaje de manipulación de datos)
Operaciones DCL (lenguaje de control de datos).
Esto proporciona visibilidad completa de los cambios en el esquema de la base de datos, modificaciones de datos y ajustes de permisos.
Para obtener instrucciones de implementación, incluyendo listas completas de eventos y ejemplos prácticos de configuración, consulte la documentación de auditoría de MongoDB y los filtros de auditoría de ejemplo. Encontrará instrucciones de configuración adicionales en la sección "Configurar la auditoría de la base de datos".
Crear y habilitar un filtro de auditoría en Atlas
Puede crear filtros de auditoría para limitar las auditorías a ciertas operaciones relevantes. Al habilitar la auditoría de operaciones, Atlas registra todas las operaciones auditables, tal como se detalla en Acciones, Detalles y Resultados del Evento de Auditoría.
Para limitar qué eventos debe registrar Atlas, puede especificar filtros de auditoría de eventos.
El siguiente documento define un filtro de auditoría que restringe las auditorías únicamente a las operaciones de autenticación realizadas en la test base de datos. Para obtener más información, consulte Configurar filtros de auditoría.
{ "atype": "authenticate", "param.db": "test" }
Para habilitar un filtro de auditoría, ejecute el comando atlas auditing update con el --enabled indicador y especifique el documento de filtro de auditoría entre comillas simples para pasar el documento como una cadena:
atlas auditing update --enabled --auditFilter '{"atype": "authenticate", "param.db": "test"}'
Los filtros de auditoría personalizados le permiten prescindir del generador gestionado de filtros de auditoría {atlas-ui+} en favor de un control detallado hecho a mano de la auditoría de eventos. Atlas solo comprueba que el filtro personalizado use una sintaxis JSON válida y no valida ni prueba la funcionalidad del filtro.
El documento de filtro de auditoría:
Debe resolverse en una consulta que coincida con uno o más campos en el mensaje de evento de auditoría.
Puede utilizar combinaciones de operadores de consulta y condiciones de igualdad para hacer coincidir los mensajes de auditoría deseados.
Atlas admite la especificación de un filtro de auditoría con formato JSON para personalizar la auditoría de MongoDB.
Configurar un archivo de configuración JSON para su filtro personalizado también es útil porque si necesita crear un filtro grande, es más fácil administrarlo y mantenerlo si almacena la configuración del filtro en un archivo separado.
El siguiente comando CLI de Atlas habilita un filtro de auditoría que está definido en el especificado Archivo de configuración JSON:
atlas auditing update --enabled -f filter.json
Recomendaciones para la auditoría Atlas
Las siguientes recomendaciones se aplican a todos paradigmas de implementación.
Le recomendamos que configure la auditoría de la base de datos cuando aprovisione sus clústeres.
La auditoría de bases de datos aumenta el uso de recursos del clúster y los gastos operativos.
Para mantener un rendimiento óptimo y controlar los costos, considere auditar solo a los usuarios esenciales y desactivar la auditoría en entornos de desarrollo donde no sea necesaria.
Algunas industrias, como la atención médica y los servicios financieros, pueden optar por mantener la auditoría habilitada en los entornos de desarrollo por razones de cumplimiento.
Le recomendamos que audite como mínimo los siguientes eventos:
Inicio de sesión fallido
Actividad de la sesión
Inicio y cierre de sesión
Intentos de realizar funciones no autorizadas
Cambio de contraseña
Cambios en el acceso de los usuarios a la base de datos
Procedimientos almacenados de configuración del sistema y DDL
Modificación de la auditoría nativa
Ejecutar una operación de copia de seguridad o restauración
Modificación de la configuración de auditoría nativa del DBMS
Alterando la seguridad
Ejecución de comandos de inicio y detención de la base de datos
Ejemplos de automatización: auditoría de Atlas
Tip
Para ver ejemplos de Terraform que aplican nuestras recomendaciones en todos los pilares, consulte uno de los siguientes ejemplos en GitHub:
Los siguientes ejemplos muestran cómo recuperar y descargar registros y configurar la auditoría utilizando herramientas Atlas para la automatización.
Actualizar la configuración de auditoría
Para actualizar la configuración de auditoría de su proyecto, utilice el comando atlas auditing update y especifique el nuevo filtro de auditoría. El siguiente comando reemplaza la configuración del filtro de auditoría existente con un nuevo filtro que audita todos los eventos de autenticación de los usuarios conocidos del proyecto:
atlas auditing update --enabled --auditFilter '{"atype": "authenticate"}'
Describir la configuración de auditoría
Ejecute el comando atlas auditing describe para devolver la configuración de auditoría para el proyecto especificado:
atlas auditing describe --output json
El siguiente ejemplo muestra cómo habilitar la auditoría para su implementación. Antes de crear recursos con Terraform, debe:
Cree su organización pagadora y crear una clave API a la organización pagadora. Almacena tus claves públicas y privadas como variables de entorno ejecutando los siguientes comandos en la terminal:
export MONGODB_ATLAS_PUBLIC_KEY="<insert your public key here>" export MONGODB_ATLAS_PRIVATE_KEY="<insert your private key here>"
Importante
Los siguientes ejemplos utilizan la 2 versión.x () del proveedor Terraform de MongoDB Atlas.~> 2.2 Si actualiza desde 1 la versión.x del proveedor, consulte la 2.0.0 Guía de actualización para conocer los cambios importantes y los pasos de migración. Los ejemplos utilizan el mongodbatlas_advanced_cluster recurso con la2 sintaxis v.x.
Habilitar auditoría y crear un filtro de auditoría
Puede configurar la auditoría manual de la mayoría de las acciones de eventos del sistema documentadas mediante la creación de filtros de auditoría. Para obtener más información sobre la configuración de filtros de auditoría, consulte Configurar filtros de auditoría.
El siguiente script de Terraform configura una infraestructura completa de MongoDB Atlas con una auditoría exhaustiva de la base de datos. El script:
Crea un nuevo proyecto dentro de una organización y aprovisiona un clúster de conjunto de réplicas de tres nodos (instancias M10) implementado en AWS en la región Este de EE. UU.
Permite capacidades de auditoría detalladas utilizando un filtro JSON que monitorea:
eventos de autenticación
operaciones de gestión de usuarios
varios comandos de base de datos, incluyendo operaciones de manipulación de datos y queries
La configuración de auditoría se dirige específicamente a los usuarios administradores y de bases de datos externas, al tiempo que rastrea operaciones críticas, como intentos de autenticación, modificaciones de roles y comandos de base de datos comunes, como operaciones find, insert, update y delete.
Add the MongoDB Atlas Provider terraform { required_providers { mongodbatlas = { source = "mongodb/mongodbatlas" version = "~> 2.2" } } required_version = ">= 1.0" } Configure the MongoDB Atlas Provider provider "mongodbatlas" { Legacy API key authentication (backward compatibility) public_key = var.mongodbatlas_public_key private_key = var.mongodbatlas_private_key Recommended: Service account authentication Uncomment and configure the following for service account auth: service_account_id = var.mongodb_service_account_id private_key_file = var.mongodb_service_account_key_file } 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 }