Para supervisar las actividades de la plataforma Atlas, utilice auditoría.
Funcionalidades para la auditoría de Atlas
Disponible en M10+ clusters, la auditoría de base de datos te permite rastrear la actividad del sistema para implementaciones con varios usuarios.
Como administrador de Atlas, puedes crear un filtro de auditoría JSON personalizado en MongoDB para controlar de manera precisa lo que se audita en todo tu sistema.
Este enfoque permite especificar exactamente qué acciones, usuarios de base de datos y roles de Atlas deben ser supervisados, lo que le da 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 de esquema de la base de datos, las modificaciones de datos y los ajustes de permisos.
Para obtener orientación sobre la implementación, incluidas listas completas de eventos y ejemplos prácticos de configuración, consulta la documentación sobre auditoría de MongoDB y filtros de auditoría de ejemplo. Las instrucciones de configuración adicionales están disponibles en la sección Configurar auditoría de base de datos.
Cree y habilite 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, puedes 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 que ocurren contra la base de datos test. Para obtener más información consulta 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 JSON archivo de configuración:
atlas auditing update --enabled -f filter.json
Recomendaciones para la auditoría de Atlas
Las siguientes recomendaciones aplican a todos paradigmas de implementación.
Recomendamos que configures la auditoría de la base de datos al aprovisionar tus clústeres.
La auditoría de la base 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.
Ciertas industrias, como la atención sanitaria y los servicios financieros, pueden optar por mantener la auditoría habilitada en entornos de desarrollo por motivos de cumplimiento.
Recomendamos auditar al menos los siguientes eventos:
Inicio de sesión fallido
Actividad de sesión
Inicio y cierre de sesión
Intentos de realizar funciones no autorizadas
Cambio de contraseña
Cambios en el acceso de usuario de base de datos
DDL y procedimientos almacenados de configuración del sistema
Modificación de la auditoría nativa
Ejecutando una operación de copia de seguridad o restauración
Alterando la configuración de auditoría nativa del DBMS
Alterando la seguridad
Ejecutando comandos de inicio y detención de la base de datos
Ejemplos de automatización: auditoría de Atlas
Tip
Para ejemplos de Terraform que aplican nuestras recomendaciones en todos los pilares, consulta uno de los siguientes ejemplos en GitHub:
Los siguientes ejemplos muestran cómo recuperar y descargar registros y configurar la auditoría usando las herramientas de Atlas para automatización.
Actualizar configuración de auditoría
Para actualizar la configuración de auditoría de tu proyecto, utiliza el comando atlas auditing update y especifica el nuevo filtro de auditoría. El siguiente comando reemplaza la configuración existente del filtro de auditoría con un nuevo filtro que audita todos los eventos de autenticación de usuarios reconocidos en el 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 demuestra cómo habilitar la auditoría para tu implementación. Antes de que puedas crear recursos con Terraform, debes:
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 MongoDB Atlas Terraform proveedor versión 2.x (~> 2.2). Si estás actualizando desde la versión 1.x del proveedor, consulta la 2.0.0 Guía de actualización para cambios disruptivos y pasos de migración. Los ejemplos utilizan el recurso mongodbatlas_advanced_cluster con la versión v2.x sintaxis.
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 creando filtros de auditoría. Para obtener más información sobre cómo configurar filtros de auditoría, consulta 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 provisiona un clúster con set 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 }