Gestión distribuida de subvenciones mediante MongoDDBAuthorizationGrant

MongoDB admite varios mecanismos de autenticación, incluidos SCRAM, LDAP, Kerberos y autenticación de certificados x.509 predeterminados.

En el sistema X.509, que será el punto principal de esta publicación de blog, una organización puede identificar sus entidades con un par de certificados y claves privadas firmadas y confiables por una determinada Autoridad de Certificación (CA).

Este modelo es bien conocido en la industria y es lo suficientemente popular como para delegar la autenticación a servicios de terceros. La otra forma similar de delegar la autenticación es LDAP, que también forma parte del mismo grupo X.500 estándar denominado servicios de directorio.

Si bien la autenticación funciona bien para MongoDB, y en general para todos los sistemas de bases de datos, el problema con la autorización persiste. Un clúster de MongoDB siempre necesita obtener información sobre los recursos a los que tiene acceso un usuario. Los roles ayudan mucho aquí, pero en un modelo de confianza cero, la práctica requiere información duplicada: los datos de autenticación se almacenan en LDAP, X.509 o cualquier otro sistema, y ​​los modelos de autorización residen en MongoDB.

Y aquí, entra en juego una característica genial de X.509 y… una característica no documentada de MongoDB.

Un certificado X.509 es de facto un objeto serializado. Utiliza la Notación de sintaxis abstracta uno (ASN.1), que es un lenguaje de descripción de interfaz estándar para definir estructuras de datos que se pueden serializar y deserializar de manera multiplataforma. Es ampliamente utilizado en criptografía.

Un certificado de muestra deserializado se ve así:

La principal ventaja de lo anterior es que casi cualquier información se puede almacenar en un certificado. Dado que la Autoridad de Certificación debe firmar, un usuario que presente el certificado no podrá modificarlo. Lo que lo hace seguro. También le permite almacenar información de autorización en él.

¿Cómo utilizar?

1) Comenzamos con la preparación de la Autoridad de Certificación

2) Crear un certificado de servidor

Configuración OpenSSL:

3) Creamos un Certificado de Cliente

La configuración anterior utilizará MongoDBAuthorizationGrant OID 1.3.6.1.4.1.34601.2.1.1 y otorgará al titular del certificado dos funciones: copia de seguridad para el administrador de la base de datos y readAnyDatabase para el administrador de la base de datos.

Es importante recordar que el asunto del Certificado de Cliente x.509, que contiene el Nombre Distinguido (DN), debe ser diferente al de un Certificado de Miembro x.509. Además, al menos uno de los atributos Organización (O), Unidad organizativa (OU) o Componente de dominio (DC) del certificado de cliente debe diferir de los del certificado de cliente. net.tls.clusterFile y net.tls.certificateKeyFile certificados de servidor.

Además, un certificado de cliente debe contener los siguientes campos:

  • keyUsage = digitalSignature
  • extendedKeyUsage = clientAuth

Si no se cumplen los requisitos anteriores, MongoDB denegará cualquier autenticación del cliente x509 con un error:

Continuaremos generando la aplicación y firmando el certificado:

4) Probemos

En esta etapa MongoDB debe permitir la autenticación y autorización con certificados generados previamente:

¡Funciona sin agregar un solo usuario!

Conclusiones

  • MongoDB permite la incorporación de concesiones en un archivo de certificado x.509.
  • Es especialmente útil en entornos de nube porque saca la capa de autorización de MongoDB.
  • Los certificados se pueden reutilizar para diferentes clústeres.
  • Forzar el uso de PKI, que es mucho más seguro que una simple contraseña.

Percona Distribution for MongoDB es una alternativa de base de datos MongoDB disponible gratuitamente, que le brinda una solución única que combina los mejores y más importantes componentes comerciales de la comunidad de código abierto, diseñada y probada para trabajar en conjunto.

¡Descarga Percona Distribution para MongoDB hoy!

Author: Ing. Luis

A lo largo de conocer Windows y otros sistemas operativos me eh encontrado con diversos tipos de error, ahora brindo soluciones según mi experiencia-

Deja un comentario