Para supervisar las actividades de la plataforma Atlas, utilice auditoría.
Nota
El Modelo de Responsabilidad Compartida de MongoDB Atlas define los deberes complementarios de MongoDB y sus clientes en el mantenimiento de un entorno de datos seguro y resiliente. Bajo este marco, MongoDB gestiona la seguridad y la integridad operativa de la plataforma subyacente, mientras que los clientes son responsables de la configuración, gestión y políticas de datos de sus implementaciones específicas. Para obtener un desglose detallado de la propiedad en materia de seguridad y excelencia operativa, consulta el Modelo de Responsabilidad Compartida.
Funcionalidades para la auditoría de Atlas
Disponible en M10+ clústeres, la auditoría de bases de datos te permite rastrear la actividad del sistema para implementaciones con múltiples 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 la configuración de auditoría manual, puedes supervisar casi todas las acciones de eventos del sistema documentadas en Atlas.
Las capacidades integrales de auditoría de bases de datos ofrecen un seguimiento detallado de:
Operaciones DDL (Lenguaje de definición de datos)
Operaciones DML (Lenguaje de Manipulación de Datos)
Operaciones de 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
Puedes crear filtros de auditoría para limitar las auditorías solo a determinadas operaciones de interés. Cuando habilitas la auditoría de operaciones, Atlas registra todas las operaciones auditables según lo detallado en Acciones, detalles y resultados de eventos 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 activar un filtro de auditoría, se ejecuta el comando Atlas auditing update con la bandera --enabled y se especifica el documento del filtro de auditoría entre comillas simples para pasar el documento como un string:
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 query que coincida con uno o más campos en el mensaje de evento de auditoría.
Puede usar combinaciones de operadores del query y condiciones de igualdad para encontrar los mensajes de auditoría deseados.
Atlas ofrece soporte para especificar un filtro de auditoría en formato JSON para personalizar la auditoría de MongoDB.
Configurar un archivo de configuración JSON para tu filtro personalizado también es útil porque, si necesitas crear un filtro grande, resulta más fácil administrar y mantener el filtro si almacenas la configuración del filtro en un archivo separado.
El siguiente comando de Atlas CLI activa un filtro de auditoría que está definido en el archivo de configuración JSON especificado:
atlas auditing update --enabled -f filter.json
Recomendaciones para la auditoría de Atlas
Las siguientes recomendaciones se aplican a todos los 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, considera 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
Alterar la seguridad
Ejecutando comandos de inicio y detención de la base de datos
Ejemplos de automatización: Auditorías 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 supervisa:
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 administradores y usuarios externos de la base de datos, mientras realiza un seguimiento de las operaciones críticas, como los intentos de autenticación, las modificaciones de roles y los comandos comunes de la base de datos, como las 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.this.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.this.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.this.id } output "auditing_enabled" { description = "Whether auditing is enabled" value = mongodbatlas_auditing.atlas-auditing.enabled }