En este módulo, aprenderemos sobre las mejores prácticas de seguridad en MongoDB. La seguridad es un aspecto crucial en cualquier sistema de bases de datos, y MongoDB no es una excepción. Asegurarse de que los datos estén protegidos contra accesos no autorizados y ataques es fundamental para mantener la integridad y confidencialidad de la información.

Contenido

Autenticación y Autorización

Autenticación

La autenticación es el proceso de verificar la identidad de un usuario o una aplicación. MongoDB soporta varios métodos de autenticación, incluyendo:

  • SCRAM (Salted Challenge Response Authentication Mechanism): Es el método de autenticación predeterminado en MongoDB.
  • LDAP (Lightweight Directory Access Protocol): Permite la autenticación contra un servidor LDAP.
  • Kerberos: Utilizado en entornos corporativos para la autenticación de usuarios.

Ejemplo de Configuración de Autenticación SCRAM

# Crear un usuario administrador
use admin
db.createUser({
  user: "admin",
  pwd: "password123",
  roles: [{ role: "userAdminAnyDatabase", db: "admin" }]
})

# Habilitar autenticación en el archivo de configuración mongod.conf
security:
  authorization: "enabled"

Autorización

La autorización determina qué operaciones puede realizar un usuario autenticado. MongoDB utiliza un modelo basado en roles para la autorización.

Ejemplo de Asignación de Roles

# Crear un usuario con permisos de lectura y escritura en una base de datos específica
use mydatabase
db.createUser({
  user: "appUser",
  pwd: "appPassword",
  roles: [{ role: "readWrite", db: "mydatabase" }]
})

Cifrado de Datos

Cifrado en Tránsito

El cifrado en tránsito protege los datos mientras se mueven entre el cliente y el servidor. MongoDB soporta TLS/SSL para cifrar las conexiones.

Ejemplo de Configuración de TLS/SSL

# Configuración en el archivo mongod.conf
net:
  ssl:
    mode: requireSSL
    PEMKeyFile: /etc/ssl/mongodb.pem
    CAFile: /etc/ssl/ca.pem

Cifrado en Reposo

El cifrado en reposo protege los datos almacenados en disco. MongoDB Enterprise ofrece cifrado en reposo nativo.

Ejemplo de Configuración de Cifrado en Reposo

# Configuración en el archivo mongod.conf
security:
  enableEncryption: true
  encryptionKeyFile: /etc/mongodb/encryption_key

Configuración de Red Segura

Acceso Restringido

Restringir el acceso a la base de datos solo a las IPs necesarias es una práctica esencial.

Ejemplo de Configuración de Acceso IP

# Configuración en el archivo mongod.conf
net:
  bindIp: 127.0.0.1,192.168.1.100

Firewalls y VPNs

Utilizar firewalls y VPNs para proteger el acceso a la red donde se encuentra MongoDB.

Auditoría y Monitoreo

Auditoría

La auditoría permite rastrear las operaciones realizadas en la base de datos, lo cual es crucial para detectar y responder a actividades sospechosas.

Ejemplo de Configuración de Auditoría

# Configuración en el archivo mongod.conf
auditLog:
  destination: file
  format: JSON
  path: /var/log/mongodb/audit.log

Monitoreo

El monitoreo continuo ayuda a identificar problemas de seguridad y rendimiento.

Herramientas de Monitoreo

  • MongoDB Cloud Manager
  • Prometheus y Grafana
  • Nagios

Prácticas Adicionales de Seguridad

  • Actualizaciones Regulares: Mantener MongoDB y sus dependencias actualizadas.
  • Principio de Mínimos Privilegios: Asignar solo los permisos necesarios a los usuarios.
  • Revisiones de Seguridad: Realizar auditorías de seguridad periódicas.

Ejercicio Práctico

Ejercicio 1: Configuración de Autenticación y Autorización

  1. Configura un usuario administrador en tu instancia de MongoDB.
  2. Habilita la autenticación en el archivo de configuración mongod.conf.
  3. Crea un usuario con permisos de lectura y escritura en una base de datos específica.

Solución

# Paso 1: Crear un usuario administrador
use admin
db.createUser({
  user: "admin",
  pwd: "password123",
  roles: [{ role: "userAdminAnyDatabase", db: "admin" }]
})

# Paso 2: Habilitar autenticación en mongod.conf
# Añadir las siguientes líneas en el archivo mongod.conf
security:
  authorization: "enabled"

# Paso 3: Crear un usuario con permisos de lectura y escritura
use mydatabase
db.createUser({
  user: "appUser",
  pwd: "appPassword",
  roles: [{ role: "readWrite", db: "mydatabase" }]
})

Ejercicio 2: Configuración de Cifrado en Tránsito

  1. Configura TLS/SSL en tu instancia de MongoDB.

Solución

# Añadir las siguientes líneas en el archivo mongod.conf
net:
  ssl:
    mode: requireSSL
    PEMKeyFile: /etc/ssl/mongodb.pem
    CAFile: /etc/ssl/ca.pem

Conclusión

En esta sección, hemos cubierto las mejores prácticas de seguridad en MongoDB, incluyendo autenticación y autorización, cifrado de datos, configuración de red segura, auditoría y monitoreo, y prácticas adicionales de seguridad. Implementar estas prácticas ayudará a proteger tus datos y a mantener la integridad y confidencialidad de la información en tu base de datos MongoDB. En el próximo módulo, exploraremos cómo integrar MongoDB con diferentes lenguajes de programación.

© Copyright 2024. Todos los derechos reservados