MongoDB Academy · Lección

Mecanismos de autenticación: SCRAM y x.509

Active la autenticación SCRAM-SHA-256, cree usuarios de base de datos y configure la autenticación basada en certificados x.509 para la autenticación interna del clúster.

Lección 1 de 413 pasos

Mecanismos de autenticación: SCRAM y x.509 es una lección gratuita de MongoDB Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de MongoDB Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de MongoDB Academy incluye 4 lecciones en total.

Por qué la autenticación es fundamental

De forma predeterminada, una instancia de MongoDB recién instalada escucha en 0.0.0.0:27017 y no requiere autenticación. Innumerables filtraciones de seguridad reales se han producido porque los desarrolladores dejaron MongoDB expuesto a Internet sin habilitar la autenticación. Las implementaciones de producción deben habilitar siempre la autenticación para que solo puedan conectarse los usuarios y servicios con credenciales. MongoDB admite varios mecanismos de autenticación; los dos más importantes son SCRAM y los certificados x.509.

Habilitar la autenticación en mongod

La autenticación se habilita añadiendo security.authorization: enabled al archivo de configuración mongod.conf (o pasando --auth en la línea de comandos). Una vez habilitada, cada intento de conexión debe proporcionar credenciales válidas. Antes de habilitar la autenticación en una implementación existente, cree siempre primero un usuario administrador; de lo contrario, se bloqueará el acceso.

# mongod.conf snippet
security:
  authorization: enabled

# Or start mongod with --auth flag
# mongod --auth --dbpath /data/db

Crear el primer usuario administrador

Conéctese a MongoDB sin autenticación mientras se encuentre todavía en modo no autenticado (o en modo de excepción de localhost) para crear el primer usuario. Asígnele el rol userAdminAnyDatabase para que pueda crear usuarios adicionales. Después, habilite --auth y vuelva a conectarse con credenciales. La excepción de localhost permite una conexión local sin autenticación únicamente hasta que se crea el primer usuario.

// Connect without auth, create admin user first
use admin
db.createUser({
  user: 'adminUser',
  pwd: 'StrongPassword123!',
  roles: [
    { role: 'userAdminAnyDatabase', db: 'admin' },
    { role: 'readWriteAnyDatabase', db: 'admin' }
  ]
})

// Reconnect with auth
// mongosh 'mongodb://adminUser:StrongPassword123!@localhost:27017'

SCRAM: el mecanismo de autenticación predeterminado

SCRAM (Salted Challenge Response Authentication Mechanism) es el protocolo de autenticación mediante contraseña predeterminado de MongoDB. MongoDB utiliza de forma predeterminada SCRAM-SHA-256, la variante más nueva y segura. SCRAM evita enviar la contraseña real a través de la red: el cliente y el servidor realizan un intercambio criptográfico mediante hashes con salt. Los clientes negocian automáticamente la variante SCRAM más segura que admita el servidor.

// Explicitly connect with SCRAM in Node.js
const { MongoClient } = require('mongodb')

const client = new MongoClient(
  'mongodb://myUser:myPassword@localhost:27017/mydb?authSource=admin',
  { authMechanism: 'SCRAM-SHA-256' }  // default, usually omitted
)

await client.connect()

Crear usuarios de aplicaciones con privilegios mínimos

Cada servicio de aplicación debe tener su propio usuario de MongoDB con únicamente los permisos que necesita. Un servicio de informes de solo lectura solo debe tener el rol read en la base de datos específica. Una API con un alto volumen de escrituras solo debe tener readWrite. Asignar root o dbOwner a cuentas de aplicación infringe el principio de mínimo privilegio y amplifica el impacto de una filtración.

// Read-only reporting user
use myApp
db.createUser({
  user: 'reportingSvc',
  pwd: 'SecurePass!456',
  roles: [{ role: 'read', db: 'myApp' }]
})

// API service user with read/write access
db.createUser({
  user: 'apiSvc',
  pwd: 'AnotherPass!789',
  roles: [{ role: 'readWrite', db: 'myApp' }]
})

Autenticación basada en certificados x.509

Los certificados x.509 proporcionan una autenticación más sólida que las contraseñas mediante el uso de pares de claves criptográficas. El cliente presenta un certificado firmado por una Autoridad de certificación (CA) de confianza en lugar de un nombre de usuario y una contraseña. MongoDB asigna el Subject Distinguished Name (DN) del certificado a un usuario de MongoDB. Este es el mecanismo preferido para la autenticación interna de los miembros del clúster (los nodos del conjunto de réplicas se autentican entre sí).

Configuración de x.509 en mongod.conf

Para habilitar x.509, debe configurar TLS (el transporte subyacente) y establecer security.clusterAuthMode: x509 para la autenticación entre los miembros del clúster. Para la autenticación de clientes, establezca net.tls.CAFile en el certificado de su CA para que MongoDB pueda verificar los certificados de los clientes. Esto requiere generar una CA, firmar certificados para cada miembro y cliente, y distribuirlos de forma segura.

# mongod.conf for x.509 client + cluster auth
net:
  tls:
    mode: requireTLS
    certificateKeyFile: /etc/ssl/server.pem
    CAFile: /etc/ssl/ca.pem

security:
  authorization: enabled
  clusterAuthMode: x509

Creación de un usuario asociado a un certificado x.509

Al utilizar la autenticación de clientes x.509, el nombre de usuario de MongoDB debe coincidir exactamente con el Subject DN del certificado del cliente. Cree el usuario en la base de datos $external (no en la base de datos normal admin ni en la de la aplicación), ya que las credenciales se validan externamente mediante el certificado y no mediante el almacén interno de credenciales de MongoDB.

// Create user mapped to certificate Subject DN
use $external
db.createUser({
  user: 'CN=apiService,OU=services,O=MyCompany,L=Istanbul,C=TR',
  roles: [{ role: 'readWrite', db: 'myApp' }]
})

// Connect using certificate in Node.js
const client = new MongoClient('mongodb://localhost:27017', {
  tls: true,
  tlsCertificateKeyFile: '/etc/ssl/client.pem',
  tlsCAFile: '/etc/ssl/ca.pem',
  authMechanism: 'MONGODB-X509'
})

Comparación entre SCRAM y x.509

SCRAM es más sencillo de configurar: cree un usuario con nombre de usuario y contraseña, y conéctese. Es adecuado para la mayoría de los servicios de aplicaciones y para el acceso de desarrolladores. x.509 es más complejo (requiere una infraestructura de PKI), pero ofrece garantías más sólidas: no hay contraseñas que rotar ni que puedan filtrarse, permite usar listas de revocación de certificados (CRL) para revocar el acceso de inmediato y es obligatorio para la autenticación de miembros de conjuntos de réplicas en entornos de alta seguridad.

Rotación de contraseñas y actualización de usuarios

MongoDB proporciona db.updateUser() para cambiar la contraseña de un usuario existente sin eliminar ni volver a crear la cuenta. En Atlas, rote las credenciales mediante la interfaz de Atlas o la API. Al rotar las credenciales, actualice la cadena de conexión de su aplicación antes de cambiar la contraseña para evitar un periodo de interrupción de la conectividad. Use variables de entorno de URI de cadena de conexión para que la rotación de contraseñas solo requiera actualizar una variable de entorno y reiniciar la aplicación.

// Rotate password for an existing user
use admin
db.updateUser('apiSvc', {
  pwd: 'NewStrongerPassword!2024'
})

// Or use changeUserPassword shorthand
db.changeUserPassword('apiSvc', 'NewStrongerPassword!2024')

Visualización y eliminación de usuarios

Audite periódicamente los usuarios de MongoDB. Use db.getUsers() para enumerar todos los usuarios de una base de datos y db.getUser('name') para consultar los detalles de una cuenta específica, incluidos los roles asignados. Elimine de inmediato las cuentas obsoletas o comprometidas con db.dropUser(). En Atlas, la sección Users del panel Database Access proporciona un inventario centralizado de todos los usuarios de todos los clústeres.

// List all users in current database
use myApp
db.getUsers()

// Get details of a specific user
db.getUser('apiSvc')

// Remove a user
db.dropUser('oldReportingService')

Comprobación rápida

Compruebe su comprensión de los conceptos de MongoDB y las bases de datos NoSQL de esta lección.

Resumen de la lección

En esta lección ha aprendido que SCRAM-SHA-256 es el mecanismo de autenticación predeterminado de MongoDB basado en contraseñas y es adecuado para la mayoría de los casos de uso de aplicaciones; que los certificados x.509 proporcionan una autenticación criptográfica más sólida y son preferibles para la autenticación interna de los miembros del clúster; y que debe crear siempre usuarios con roles de privilegios mínimos: las cuentas de aplicaciones nunca deben tener permisos de nivel administrativo. A continuación, profundizaremos en el control de acceso basado en roles.

Gratis para empezar

Aprende JavaScript con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
30
Lecciones
120

Preguntas frecuentes

¿La lección «Mecanismos de autenticación: SCRAM y x.509» es gratis?

Sí — el texto completo de «Mecanismos de autenticación: SCRAM y x.509» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de MongoDB Academy, actualiza a CoddyKit PRO. El curso de MongoDB Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Mecanismos de autenticación: SCRAM y x.509»?

Active la autenticación SCRAM-SHA-256, cree usuarios de base de datos y configure la autenticación basada en certificados x.509 para la autenticación interna del clúster. Practicas MongoDB Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar MongoDB Academy?

No se requiere experiencia previa. MongoDB Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Mecanismos de autenticación: SCRAM y x.509»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de MongoDB Academy?

Sí. Cada lección de MongoDB Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Mecanismos de autenticación: SCRAM y x.509
  2. Control de acceso basado en roles: roles integrados y personalizados
  3. Cifrado en reposo y TLS en tránsito
  4. Cifrado a nivel de campo del lado del cliente
← Volver a MongoDB Academy