Seguridad

Introducción a la seguridad de control de acceso basado en roles (RBAC) para colecciones en Couchbase 7.0

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).

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.

Buckets, Scopes and Collections within Couchbase

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.
Role-based access control on Couchbase Scopes and Collections Example An example of RBAC security on Scopes and Collections in Couchbase

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].

Probablemente se esté preguntando, ¿qué funciones de acceso de usuario pueden tener un Ámbito y una Colección definidos? Aquí está la lista completa:

  • Acceso a la aplicación
  • Lector de datos
  • Redactor de datos
  • Lector DCP de datos
  • Supervisión de datos
  • Lector de búsqueda de texto completo (FTS)
  • Seleccionar consulta
  • Actualización de consultas
  • Insertar consulta
  • Consulta Borrar
  • Consulta Gestionar índice
  • Selección de análisis
  • También hemos añadido la función Gestionar colecciones en el ámbito para que un usuario pueda añadir y eliminar colecciones en un ámbito específico de un cubo.
  • 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.

    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.

    También puede ver estas colecciones en la interfaz web del servidor Couchbase, como se muestra a continuación.

    Screenshot of Couchbase Server 7.0 Buckets

    La vista Bucket en Couchbase Server 7.0

    Couchbase Server 7.0 Scopes and Collections Screenshot

    La vista de Ámbitos y Colecciones en Couchbase Server 7.0

    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.

    Screenshot of N1QL query for Hotel Collection Populate

    Vamos a crear un índice primario en hotel Recaudación como administrador:

    Ahora, vamos a obtener una lista de todos los usuarios y roles:

    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.

    También puede hacerlo desde la interfaz web.

    Couchbase Server 7.0 screenshot of user roles

    Roles de usuario RBAC en Couchbase Server 7.0

    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.

    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.

    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

    ¿Quieres probar por ti mismo la seguridad RBAC en Couchbase?
    Pruebe Couchbase hoy mismo

     
     
     

    Comparte este artículo
    Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
    Este campo es obligatorio.

    Autor

    Publicado por Ian McCloy, Director de Gestión de Productos

    Ian McCloy es el Director del Grupo de Gestión de Productos de Plataforma y Seguridad de Couchbase y vive en el Reino Unido. Su equipo dedicado es responsable de la arquitectura de Fiabilidad, Disponibilidad, Capacidad de Servicio y Seguridad de Couchbase Server y la Base de Datos SaaS, Capella. Este equipo también es propietario de plataformas nativas de la nube como el Operador Autónomo Couchbase Kubernetes. Ian tiene una amplia experiencia como Ingeniero de Software, Ingeniero de Soporte Técnico, Ingeniero de Control de Calidad y Administrador de Sistemas. Ian ha dirigido equipos técnicos globales durante la mayor parte de sus 20 años de carrera profesional y es titular de varias patentes en las áreas de seguridad de la información, virtualización y diseño de hardware. https://www.linkedin.com/in/ianmccloy/

    3 Comentarios

    1. 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.

    2. Ian McCloy, Director Principal de Producto, Couchbase noviembre 20, 2020 a 5:25 am

      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.

    3. 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]]"

    Deja un comentario

    ¿Listo para empezar con Couchbase Capella?

    Empezar a construir

    Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

    Utilizar Capella gratis

    Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

    Póngase en contacto

    ¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.