En un mundo en el que las fugas de datos son cada vez más frecuentes, la necesidad de reforzar las bases de datos y las aplicaciones web es cada vez más importante. Yo, como muchos otros desarrolladores, vengo de trabajar con bases de datos relacionales como MySQL y Oracle, en las que se podían establecer permisos de control de acceso a las bases de datos y a las tablas que contienen. Ahora, con Couchbase 5.0, este mismo control de grano fino puede aplicarse a clústeres, cubos y mucho más.
Vamos a ver algunos ejemplos de cómo el control de acceso basado en roles (RBAC) de Couchbase Server se puede utilizar para bloquear la base de datos y protegerla mejor de los usuarios maliciosos que intentan explotarla.
Seamos claros desde el principio, tener cuentas con control de acceso en tu base de datos no va a ser una solución definitiva cuando se trata de proteger tus datos. Todavía debes seguir las mejores prácticas cuando se trata de diseñar tu aplicación web, pero tener el control de acceso a nivel de base de datos ayudará significativamente a tu causa.
Con el RBAC de Couchbase Server, puedes tener cualquier número de cuentas que puedan ser usadas para acceder a tu base de datos.
Estas cuentas tendrán privilegios de lectura, escritura, ejecución, gestión y descarga.
Juguemos a crear una cuenta y averigüemos qué ocurre cuando tenemos y no tenemos los privilegios correctos para realizar determinadas tareas.
Creación de un nuevo usuario para Couchbase Server
Asumiendo que ya ha obtenido una copia de Couchbase Server 5.0 o más reciente, inicie sesión en el clúster o instancia utilizando su nombre de usuario y contraseña de administrador.
El nombre de usuario y contraseña administrativos no van a desaparecer ahora que está disponible el control de acceso basado en roles. Piense en él como su usuario raíz para el clúster de base de datos.
Cuando haya iniciado sesión, busque la opción Seguridad y seleccione AÑADIR USUARIO.
Cuando añada un usuario, asegúrese de elegir una combinación segura de nombre de usuario y contraseña.
Hay bastantes roles entre los que elegir a la hora de crear un nuevo usuario. Por ahora, elija el rol Lector de datos papel del Funciones de datos sección. Hacemos esto porque queremos ver qué ocurre cuando intentamos utilizar una cuenta de usuario con muy pocos permisos. Para obtener la máxima seguridad, asegúrese de asignar al usuario sólo los Buckets que necesite, y no utilice la opción todos [*] opción.
Ahora vamos a intentar utilizar esta nueva cuenta con Couchbase.
Realización de tareas con Couchbase Shell
Al instalar Couchbase se le da el Couchbase Shell que es una herramienta CLI que puede hacer bastantes cosas contra la base de datos.
Si utilizas un Mac, ejecuta el siguiente comando:
1 |
/Aplicaciones/Couchbase Servidor.aplicación/Contenido/Recursos/couchbase-núcleo/papelera/cbq -u nombre de usuario -p contraseña |
El comando anterior lanzará el Couchase Shell (CBQ) utilizando el nombre de usuario y la contraseña especificados. Asegúrese de utilizar el nombre de usuario y la contraseña del usuario RBAC que había creado anteriormente.
Si utiliza Microsoft Windows, CBQ debería encontrarse en la siguiente dirección:
1 |
C:\Programa Archivos\Couchbase\Servidor\papelera\cbq.exe -u nombre de usuario -p contraseña |
Del mismo modo, si utilizas Linux, busca CBQ aquí:
1 |
/op/couchbase/papelera/cbq -u nombre de usuario -p contraseña |
Si desea obtener más información sobre Couchbase Shell, consulte la página documentación oficial.
Con una conexión exitosa a Couchbase Server usando CBQ, intentemos ejecutar una consulta:
1 |
SELECCIONAR * DESDE `por defecto`; |
Por supuesto, estamos asumiendo que tienes un Bucket llamado por defecto y su usuario tiene acceso a él. Recuerde que sólo tenemos el Lector de datos en nuestro usuario, no uno de los Funciones de consulta. Esto significa que probablemente recibirá un error parecido al siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
{ "requestID": "aca002c6-58d5-4754-9e33-325eef47f46b", "firma": { "*": "*" }, "resultados": [ ], "errores": [ { "código": 13014, "msg": "El usuario no tiene credenciales para ejecutar consultas SELECT en el bucket por defecto. Añada el rol query_select en default para permitir la ejecución de la consulta". } ], "status": "parado", "métricas": { "tiempo transcurrido": "1.703462ms", "executionTime": "1.690334ms", "resultCount": 0, "resultSize": 0, "errorCount": 1 } } |
Esto es genial porque no queremos que nuestro usuario pueda ejecutar consultas. El Funciones de datos Los privilegios son sólo para operaciones clave-valor, no para N1QL.
Vuelve al panel de administración de Couchbase y modifica los roles de tu usuario. Esta vez dale al usuario el rol Seleccionar consulta papel de Funciones de consulta. Si intentas ejecutar la consulta de nuevo desde CBQ debería tener éxito.
Incluir controles de acceso basados en funciones en una aplicación
En algún momento vas a necesitar construir una aplicación web que se comunique con Couchbase usando uno de los muchos SDKs de Couchbase. A partir de Couchbase 5.0, un usuario RBAC debe estar disponible y el SDK debe autenticarse con él, de lo contrario habrá un error al intentar abrir un Bucket.
Si eres un desarrollador Node.js, podrías hacer algo como esto:
1 2 3 |
var grupo = nuevo Couchbase.Grupo("couchbase://host"); grupo.autentifique("nombre de usuario", "contraseña"); var cubo = grupo.openBucket("por defecto"); |
Obsérvese que el openBucket
ya no toma una contraseña de Bucket. En su lugar, confiamos en la función autentifique
y nuestros controles de acceso.
Cada uno de los SDK sigue un enfoque muy similar para la autenticación. Para más información, consulte la documentación de los SDK en la sección Portal para desarrolladores de Couchbase.
Conclusión
Ser capaz de definir privilegios basados en clusters, Buckets, e incluso servicios es una gran victoria cuando se trata de asegurar tu base de datos NoSQL. Al dar a los usuarios lo mínimo que necesitan para funcionar, estás ayudando a eliminar la posibilidad de una fuga de datos o alguna otra actividad maliciosa.