Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
/ / /

Orientación para la auditoría de Atlas

Para supervisar las actividades de la plataforma Atlas, utilice auditoría.

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.

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

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

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.

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"}'

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>"
  • Instala Terraform.

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.

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
}

Volver

Auditoría y registro

En esta página