Tus datos en Couchbase son ahora más seguros.
Couchbase Server 7.0 introdujo Scopes y Collections para mejorar el mapeo entre modelos de datos relacionales y NoSQL. Pero la versión 7.0 también incluye algunas mejoras adicionales para reforzar la seguridad de la plataforma de datos. Más concretamente, la seguridad de control de acceso basado en roles (RBAC) se soporta ahora a nivel de Ámbitos y Colecciones individuales.
¿Qué significa todo esto para tus despliegues de Couchbase? Vamos a ello.
Roles de seguridad RBAC existentes en Couchbase
Couchbase Server ha permitido controles detallados del acceso de los usuarios a la plataforma con seguridad de control de acceso basado en roles (RBAC). para administradores desde la versión 4.5 y para todos los usuarios desde la versión 5.0. Couchbase Collections se introdujeron como una función de vista previa para desarrolladores en Couchbase Server 6.5 y son ahora totalmente compatible con Couchbase Server 7.0.
Couchbase Roles de seguridad RBAC antes se dividían en dos categorías:
- Administración y Global: Estos roles están asociados con privilegios para todo el cluster. Algunos de estos roles son para administradores que pueden gestionar configuraciones de clúster, leer estadísticas o reforzar la seguridad. Otros son para usuarios y aplicaciones definidas por el usuario que requieren acceso a recursos específicos de todo el clúster.
- Por cubo: Estos roles están asociados a uno o más Buckets y soportan la lectura y escritura de la configuración del Bucket, el acceso a los datos y la gestión de servicios, índices y procedimientos de replicación.
Ejemplo de RBAC con ámbitos y colecciones
Por ejemplo, puede haber dado acceso de lectura a un Bucket llamado Viajar a un buscador de hoteles de confianza llamado Acme Co. con un usuario llamado acme utilizando un comando como este en la interfaz de línea de comandos de un clúster basado en Linux. (Es posible que tengas que ajustar las rutas si utilizas otra plataforma).
|
1 2 3 |
/op/couchbase/papelera/couchbase-cli usuario-gestionar -c localhost:8091 -u Administrador -p contraseña \ --configure --rbac-nombre de usuario acme --rbac-contraseña cbpass7beta --rbac-nombre "Acme Co. (Hotel)" \ --papeles lector_de_datos[Viajar] --auth-dominio local |
Lo que esto haría es permitir a su socio de búsqueda de hoteles Acme Co. acceder a todos los datos que su empresa está almacenando en el Viajar Couchbase Bucket. Esto podría incluir pedidos, inventario y otros datos no sólo de hoteles, sino también de aerolíneas y otros productos de viaje. Siguiendo el principio del menor privilegio, ¿qué pasaría si quisiéramos limitar a qué datos tiene acceso Acme Co., en lugar de permitirles el acceso a todos datos de viajes en nuestra empresa?
Las colecciones permiten organizar los documentos JSON en un bucket de Couchbase, primero en ámbitos, donde un ámbito es similar a un esquema en una base de datos relacional (RDBMS). A continuación, el ámbito se subdivide en colecciones individuales, de forma similar a cómo se estructuraría una tabla en una base de datos relacional tradicional.
El espacio de nombres dentro de cada ámbito es independiente de los demás, por lo que puede tener los mismos nombres de colecciones dentro de ámbitos diferentes. Del mismo modo, las claves de los documentos sólo deben ser únicas dentro de una colección, por lo que pueden existir documentos con la misma clave en distintas colecciones.
Antes de la introducción de Scopes y Collections, era común organizar los documentos de Couchbase basándose en prefijos clave, como por ejemplo Pedidos::Europa::Cliente1. Las colecciones ofrecen mucha más flexibilidad en las claves de los documentos que antes.
A continuación se muestra un diagrama visual de la relación entre Buckets, Scopes y Collections para un ejemplo de conjunto de datos de viajes.
Para que las actualizaciones sean fluidas y compatibles con las versiones anteriores, todos los cubos tienen ahora una etiqueta Por defecto Ámbito de aplicación Por defecto Scope tiene un Por defecto Colección. En Por defecto Collection proporciona compatibilidad con versiones anteriores y una referencia directa al Bucket se asigna automáticamente a la colección Por defecto Recogida. Además, al actualizar, todos los datos existentes se añaden automáticamente a la colección Por defecto Colección.
Mientras que el Por defecto Collection se proporciona como un mecanismo de compatibilidad con versiones anteriores, las nuevas aplicaciones deben escribirse utilizando Colecciones con nombre. Como puede ver, las Colecciones permiten opciones adicionales para organizar los datos en un entorno Servidor Couchbase racimo.
Volviendo al ejemplo anterior, ¿qué pasaría si quisiéramos permitir que Acme Co. sólo viera los datos del hotel, en lugar de todos los datos de viajes de la empresa? Con Colecciones, ahora puede limitar el acceso de Acme a sólo el Ámbito de su elección.
Por ejemplo, supongamos que Acme Co. necesita comprobar el inventario de habitaciones de hotel disponibles, podemos reducir su función RBAC a la función Hotel Colección dentro del Inventario Ámbito dentro del Viajar Cubo.
Explicación de la seguridad del control de acceso basado en funciones (RBAC)
¿Cómo funcionan los ámbitos y las colecciones con el control de acceso basado en funciones en la base de datos?
Un usuario con acceso a un Bucket hereda el acceso a los Scopes y Collections hijos de ese Bucket. Del mismo modo, un usuario con acceso a un ámbito hereda el acceso a las colecciones secundarias, pero no al cubo principal.
Aquí tienes un desglose de cómo funciona la nueva seguridad basada en roles con Colecciones:
| Papel | Descripción |
lector_datos[*] |
Puede leer datos en cada Bucket, incluyendo cada Scope y Collection, en todo el cluster. |
lector_datos[foo] |
Puede leer datos en todos los Ámbitos y Colecciones sólo dentro del Cubo foo. |
lector_datos[foo:bar] |
Puede leer los datos de todas las colecciones del ámbito de aplicación. bar del Cubo foo. |
lector_datos[foo:bar:baz] |
Sólo puede leer datos en la colección baz que se encuentra en el Ámbito bar del Cubo foo. |
Para Acme Co, el comando CLI es similar al ejemplo anterior, pero en lugar de establecer el RBAC en un Bucket, es necesario ajustarlo para permitir sólo un único Scope y/o Collection.
En nuestro ejemplo anterior, queremos permitir que el acme acceso del usuario al Hotel Colección dentro del Inventario Scope, por lo que en este caso la función sería data_reader[Viaje:Inventario:Hotel].
|
1 2 3 |
/op/couchbase/papelera/couchbase-cli usuario-gestionar -c localhost:8091 -u Administrador -p contraseña \ --configure --rbac-nombre de usuario acme --rbac-contraseña cbpass7beta --rbac-nombre "Acme Co. (Hotel)" \ --papeles lector_de_datos[Viajar:Inventario:Hotel] --auth-dominio local |
Probablemente se esté preguntando, ¿qué funciones de acceso de usuario pueden tener un Ámbito y una Colección definidos? Aquí está la lista completa:
Ejemplo práctico de seguridad RBAC con Couchbase Server 7.0
Ahora es el momento de ver otros ejemplos prácticos que puedes pruébelo usted mismo en Couchbase Server 7.0. Como antes, estoy usando un cluster basado en Linux, así que puede que necesites ajustar las rutas si usas otra plataforma. Necesitarás ejecutar los Servicios de Datos, Consultas e Índices de Couchbase para este ejemplo.
En primer lugar, cargue el viaje-muestra Bucket en su clúster.
|
1 2 |
rizo -X POST -u Administrador:contraseña http://localhost:8091/sampleBuckets/install -d '["viaje-muestra"]' [] |
A continuación, cree algunas colecciones adicionales en el cubo. Utilizaremos la colección Por defecto Alcance. Deberá utilizar un usuario administrador de Bucket (o privilegios superiores) para crear las nuevas colecciones.
|
1 2 |
$ /op/couchbase/papelera/couchbase-cli colección-gestionar --crear-colección Por defecto.hotel -c localhost \ -u Administrador -p contraseña --cubo viaje-muestra |
|
1 |
ÉXITO: Colección creado |
|
1 2 |
$ /op/couchbase/papelera/couchbase-cli colección-gestionar --crear-colección Por defecto.aeropuerto -c localhost \ -u Administrador -p contraseña --cubo viaje-muestra |
|
1 |
ÉXITO: Colección creado |
|
1 2 |
$ /op/couchbase/papelera/couchbase-cli colección-gestionar --crear-colección Por defecto.aerolínea -c localhost \ -u Administrador -p contraseña --cubo viaje-muestra |
|
1 |
ÉXITO: Colección creado |
|
1 2 |
$ /op/couchbase/papelera/couchbase-cli colección-gestionar --crear-colección Por defecto.hito -c localhost \ -u Administrador -p contraseña --cubo viaje-muestra |
|
1 |
ÉXITO: Colección creado |
También puede ver estas colecciones en la interfaz web del servidor Couchbase, como se muestra a continuación.
A continuación, cargaremos datos en cada una de las colecciones basándonos en un campo que ya existe en los documentos, denominado tipo. El documento tipo coincide con la nueva colección que acabamos de crear. Los datos se copian en la colección utilizando el lenguaje de consulta N1QL desde la línea de comandos. Nota: Debemos tener cuidado con los caracteres de escape que el intérprete de comandos intentaría ejecutar, como los puntos suspensivos.
Si tienes algún problema con el formato o con la ejecución del comando, aquí tienes una imagen de ejemplo de cómo debería ser el comando.
|
1 2 3 |
/op/couchbase/papelera/cbq -u=Administrador -p=contraseña --script=\ "INSERT INTO ``viajes-muestra``._default.hotel (KEY _key, VALUE _value)\ SELECT meta().id _key, _value FROM ``viajes-muestra`` _value WHERE type='hotel'" |
|
1 2 3 |
/op/couchbase/papelera/cbq -u=Administrador -p=contraseña --script=\ "INSERT INTO ``viajes-muestra``._default.airport (KEY _key, VALUE _value)\ SELECT meta().id _key, _value FROM ``viajes-muestra`` _value WHERE type='aeropuerto'" |
|
1 2 3 |
/op/couchbase/papelera/cbq -u=Administrador -p=contraseña --script=\ "INSERT INTO ``viajes-muestra``._default.airline (KEY _key, VALUE _value)\ SELECT meta().id _key, _value FROM ``viajes-muestra`` _value WHERE type='aerolínea'" |
|
1 2 3 |
/op/couchbase/papelera/cbq -u=Administrador -p=contraseña --script=\ "INSERT INTO ``viajes-muestra``._default.landmark (KEY _key, VALUE _value)\ SELECT meta().id _key, _value FROM ``muestra-de-viajes`` _value WHERE type='landmark'" |
Vamos a crear un índice primario en hotel Recaudación como administrador:
|
1 2 |
/op/couchbase/papelera/cbq -u=Administrador -p=contraseña --script=\ "CREATE PRIMARY INDEX `hotel-primary` ON \`viajes-muestra`._default.hotel" |
Ahora, vamos a obtener una lista de todos los usuarios y roles:
|
1 |
/op/couchbase/papelera/couchbase-cli usuario-gestionar -c localhost:8091 -u Administrador -p contraseña --lista |
|
1 |
[] |
Como puede ver arriba, actualmente sólo tenemos el Administrador incorporado y ningún usuario adicional. Así que la salida del comando está vacía, como era de esperar.
A continuación, vamos a crear un usuario, John Doe. Le daremos a John un rol de lector de datos y un rol de selección de consulta en el directorio hotel Colección, que se encuentra en la Por defecto Alcance.
|
1 2 3 4 |
/op/couchbase/papelera/couchbase-cli usuario-gestionar -c localhost:8091 -u Administrador -p contraseña \ --configure --rbac-nombre de usuario jdoe --rbac-contraseña cbpass7beta --rbac-nombre "John Doe" \ --papeles lector_de_datos[viaje-muestra:Por defecto:hotel],query_select[viaje-muestra:Por defecto:hotel] \ --auth-dominio local |
|
1 |
ÉXITO: Usuario jdoe configure |
También puede hacerlo desde la interfaz web.
A continuación, verificamos que John Doe dispone de los permisos específicos para el hotel Recogida. Cuando John intenta leer todo el Cubo de muestras de viajes, obtiene un error de permiso denegado.
|
1 |
/op/couchbase/papelera/couchbase-cli usuario-gestionar -c localhost:8091 -u Administrador -p contraseña --lista |
|
1 2 |
/op/couchbase/papelera/cbq -u=jdoe -p=cbpass7beta --script=\ "SELECT type, name, hotel.country FROM ``viajes-muestra`` LIMIT 5;" |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
SELECCIONE tipo, nombre, hotel.país DESDE `viaje-muestra` LÍMITE 5; { .... "resultados": [ ], "errores": [ { "código": 13014, "msg": "El usuario no tiene credenciales para ejecutar consultas SELECT en default:travel-sample. Añada el rol query_select en default:travel-sample para permitir la ejecución de la consulta." } ], "status": "fatal", ... |
Esta vez, como John, vamos a seleccionar cinco hoteles de entre sólo los hotel Colección del viaje-muestra Bucket, que John hace tener acceso.
|
1 2 |
/op/couchbase/papelera/cbq -u=jdoe -p=cbpass7beta --script=\ "SELECT type, name, hotel.country FROM ``viajes-muestra``._default.hotel LIMIT 5;" |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
SELECCIONE tipo, nombre, hotel.país DESDE `viaje-muestra`.Por defecto.hotel LÍMITE 5; { "requestID": "3cdc2fa8-b0cf-411a-a325-a1534280087a", "firma": { "país": "json", "nombre": "json", "tipo": "json" }, "resultados": [ { "país": "Reino Unido", "nombre": "Albergue Juvenil Medway", "tipo": "hotel" }, { "país": "Reino Unido", "nombre": "La pensión Balmoral", "tipo": "hotel" }, { "país": "Francia, "nombre": "Los petirrojos", "tipo": "hotel" }, { "país": "Francia, "nombre": "Le Clos Fleuri", "tipo": "hotel" }, { "país": "Reino Unido", "nombre": "Glasgow Grand Central", "tipo": "hotel" } ], "status": "éxito", ... } |
Como se muestra en los ejemplos anteriores, puede calificar un rol de Lector de Datos y Selección de Consulta con un confinamiento de Alcance y Colección.
Diviértete y protege tus colecciones con nuestra nueva función de control de acceso basado en roles.
Más recursos sobre la versión 7.0 de Couchbase
- Novedades de Couchbase Server 7.0
- Notas de la versión de Couchbase 7.0
- Cómo los ámbitos y las colecciones simplifican el despliegue de aplicaciones multiusuario en Couchbase
- La asistencia al cliente de Enterprise Edition está disponible a través de sus canales de asistencia habituales. El soporte de la comunidad está disponible a través de los foros de Couchbase
¿Quieres probar por ti mismo la seguridad RBAC en Couchbase?
Pruebe Couchbase hoy mismo
- Novedades de Couchbase Server 7.0
- Notas de la versión de Couchbase 7.0
- Cómo los ámbitos y las colecciones simplifican el despliegue de aplicaciones multiusuario en Couchbase
- La asistencia al cliente de Enterprise Edition está disponible a través de sus canales de asistencia habituales. El soporte de la comunidad está disponible a través de los foros de Couchbase
Pruebe Couchbase hoy mismo





Hola~ Gracias por tu post.
Creo que hay un error tipográfico, así que dejo un comentario.
//
Vamos a crear un usuario, John Doe que tiene un rol de lector de datos y query select sobre la colección hotel, que se encuentra en la colección _default.
//
Creo que _default Collection >>> _default Scope
¿Está bien?
Una vez más, gracias por su útil mensaje.
Hola ckdgur. Me alegra saber que la entrada del blog es útil. Bien visto, efectivamente se trata de una errata. Ya lo he corregido. Muchas gracias también por probar Couchbase 7 Beta.
Hola
¿Puede confirmar que "Application Access" puede tener un Alcance y una Colección definidos?
De la documentación Application Access se traduce como full_bucket_access y está obsoleto y cuando lo probé sólo se admitía el nombre del cubo.
No se pueden asignar roles al usuario porque los siguientes roles son desconocidos, están mal formados o los parámetros de rol no están definidos: [bucket_full_access[muestra-viaje:inventario]]"