sql >> Base de Datos >  >> NoSQL >> HBase

Procedimiento:habilitar la autenticación y autorización de usuarios en Apache HBase

Con la configuración predeterminada de Apache HBase, todos pueden leer y escribir en todas las tablas disponibles en el sistema. Para muchas configuraciones empresariales, este tipo de política es inaceptable.

Los administradores pueden configurar firewalls que decidan qué máquinas pueden comunicarse con HBase. Sin embargo, las máquinas que pueden pasar el firewall aún pueden leer y escribir en todas las tablas. Este tipo de mecanismo es efectivo pero insuficiente porque HBase todavía no puede diferenciar entre múltiples usuarios que usan las mismas máquinas cliente, y todavía no hay granularidad con respecto al acceso a la tabla HBase, la familia de columnas o el calificador de columna.

En esta publicación, analizaremos cómo se usa Kerberos con Hadoop y HBase para proporcionar autenticación de usuario , y cómo HBase implementa Autorización de usuario para otorgar permisos a los usuarios para acciones particulares en un conjunto específico de datos.

HBase seguro:autenticación y autorización

Un HBase seguro tiene como objetivo proteger contra rastreadores, usuarios no autenticados/no autorizados y ataques basados ​​en la red. No protege contra usuarios autorizados que eliminan accidentalmente todos los datos.

HBase se puede configurar para proporcionar autenticación de usuario , lo que garantiza que solo los usuarios autorizados puedan comunicarse con HBase. El sistema de autorización se implementa a nivel RPC y se basa en Simple Authentication and Security Layer (SASL), que admite (entre otros mecanismos de autenticación) Kerberos. SASL permite la autenticación, la negociación del cifrado y/o la verificación de la integridad del mensaje por conexión (propiedad de configuración “hbase.rpc.protection”).

El siguiente paso después de habilitar Autenticación de usuario es dar a un administrador la capacidad de definir una serie de reglas de autorización de usuario que permitan o denieguen acciones particulares. El sistema de Autorización, también conocido como Coprocesador del controlador de acceso o Lista de control de acceso (ACL), está disponible desde HBase 0.92 (CDH4) en adelante y brinda la capacidad de definir la política de autorización (Lectura/Escritura/Creación/Administración), con tabla/familia /granularidad del calificador, para un usuario específico.

Kerberos

Kerberos es un protocolo de autenticación en red. Está diseñado para proporcionar una autenticación sólida para las aplicaciones cliente/servidor mediante el uso de criptografía de clave secreta. El protocolo Kerberos utiliza una fuerte criptografía (AES, 3DES,...) para que un cliente pueda demostrar su identidad a un servidor (y viceversa) a través de una conexión de red insegura. Después de que un cliente y un servidor hayan utilizado Kerberos para probar sus identidades, también pueden cifrar todas sus comunicaciones para garantizar la privacidad y la integridad de los datos mientras se ocupan de sus negocios.

Protocolo de intercambio de entradas

En un nivel alto, para acceder a un servicio usando Kerberos, cada cliente debe seguir tres pasos:

  • Autenticación de Kerberos:el cliente se autentica en el servidor de autenticación de Kerberos y recibe un vale de concesión de vales (TGT).
  • Autorización Kerberos:El cliente solicita un ticket de servicio del Ticket Granting Server, que emite un ticket y una clave de sesión si el TGT del cliente enviado con la solicitud es válido.
  • Solicitud de servicio:el cliente utiliza el vale de servicio para autenticarse en el servidor que proporciona el servicio que utiliza el cliente (por ejemplo, HDFS, HBase, ...)

HBase, HDFS, ZooKeeper SASL

Dado que HBase depende de HDFS y ZooKeeper, HBase seguro se basa en un HDFS seguro y un ZooKeeper seguro. Esto significa que los servidores HBase necesitan crear una sesión de servicio segura, como se describe anteriormente, para comunicarse con HDFS y ZooKeeper.

Todos los archivos escritos por HBase se almacenan en HDFS. Al igual que en los sistemas de archivos de Unix, el control de acceso proporcionado por HDFS se basa en usuarios, grupos y permisos. Todos los archivos creados por HBase tienen "hbase" como usuario, pero este control de acceso se basa en el nombre de usuario proporcionado por el sistema, y ​​todos los que pueden acceder a la máquina son potencialmente capaces de "sudo" como el usuario "hbase". Secure HDFS agrega los pasos de autenticación que garantizan que el usuario "hbase" es de confianza.

ZooKeeper tiene una lista de control de acceso (ACL) en cada znode que permite el acceso de lectura/escritura a los usuarios en función de la información del usuario de manera similar a HDFS.

ACL HBase

Ahora que nuestros usuarios están autenticados a través de Kerberos, estamos seguros de que el nombre de usuario que recibimos es uno de nuestros usuarios de confianza. A veces, esto no es suficiente granularidad:queremos controlar que un usuario específico pueda leer o escribir una tabla. Para ello, HBase proporciona un mecanismo de autorización que permite el acceso restringido a usuarios específicos.

Para habilitar esta función, debe habilitar el coprocesador de Access Controller, agregándolo a hbase-site.xml en las clases de coprocesador del servidor principal y regional. (Vea cómo establecer la configuración de seguridad de HBase aquí).

Un coprocesador es un código que se ejecuta dentro de cada servidor y/o maestro de la región HBase. Es capaz de interceptar la mayoría de las operaciones (put, get, delete, …) y ejecutar código arbitrario antes y/o después de que se ejecute la operación.

Usando esta capacidad para ejecutar algún código antes de cada operación, el coprocesador del controlador de acceso puede verificar los derechos del usuario y decidir si el usuario puede o no ejecutar la operación.

El shell de HBase tiene un par de comandos que permiten a un administrador gestionar los derechos de los usuarios:

  • grant [table] [family] [qualifier]
  • revoke [table] [family] [qualifier]

Como puede ver, un administrador tiene la capacidad de restringir el acceso de los usuarios según el esquema de la tabla:

  • Otorgue al Usuario-W solo derechos de lectura para Table-X/Family-Y (grant 'User-W', 'R', 'Table-X', 'Family-Y' )
  • Otorgue al Usuario-W los derechos completos de lectura/escritura para el Calificador-Z (grant 'User-W', 'RW', 'Table-X', 'Family-Y', 'Qualifier-Z' )

Un administrador también tiene la capacidad de otorgar derechos globales, que operan a nivel de clúster, como crear tablas, equilibrar regiones, cerrar el clúster, etc.:

  • Otorgar al Usuario-W la capacidad de crear tablas (grant 'User-W', 'C' )
  • Otorgue al Usuario-W la capacidad de administrar el clúster (grant 'User-W', 'A' )

Todos los permisos se almacenan en una tabla creada por el coprocesador de Access Controller, denominada _acl_. La clave principal de esta tabla es el nombre de la tabla que especifica en el comando de concesión. La tabla _acl_ tiene solo una familia de columnas y cada calificador describe la granularidad de los derechos para una tabla/usuario en particular. El valor contiene los derechos reales concedidos.

Como puede ver, los comandos de shell de HBase están estrechamente relacionados con la forma en que se almacenan los datos. El comando grant agrega o actualiza una fila y el comando revocar elimina una fila de la tabla _acl_.

Controlador de acceso debajo del capó

Como se mencionó anteriormente, el coprocesador de Access Controller utiliza la capacidad de interceptar cada solicitud de usuario y verificar si el usuario tiene los derechos para ejecutar las operaciones.

Para cada operación, el controlador de acceso necesita consultar la tabla _acl_ para ver si el usuario tiene los derechos para ejecutar la operación.

Sin embargo, esta operación puede tener un impacto negativo en el rendimiento. La solución para solucionar este problema es usar la tabla _acl_ para la persistencia y ZooKeeper para acelerar la búsqueda de derechos. Cada servidor de región carga la tabla _acl_ en la memoria y ZkPermissionWatcher le notifica los cambios. De esta forma, cada servidor de región tiene el valor actualizado cada vez y cada verificación de permisos se realiza mediante un mapa en memoria.

Hoja de ruta

Si bien Kerberos es un sistema de autenticación estable, bien probado y comprobado, la característica HBase ACL sigue siendo muy básica y su semántica aún está evolucionando. HBASE-6096 es el paraguas JIRA como referencia para todas las mejoras para enviar en una versión v2 de la función ACL.

Otro tema abierto sobre autorización y control de acceso es la implementación de un sistema de seguridad por KeyValue (HBASE-6222 ) que dará la posibilidad de tener diferentes valores en la misma celda asociada con una etiqueta de seguridad. Eso permitiría mostrar una determinada información en función de los permisos del usuario.

Conclusión

HBase Security agrega dos funciones adicionales que le permiten proteger sus datos contra rastreadores u otros ataques de red (mediante el uso de Kerberos para autenticar a los usuarios y cifrar las comunicaciones entre servicios) y le permiten definir políticas de autorización de usuarios, restringir operaciones y limitar la visibilidad de datos para usuarios particulares.

Matteo Bertozzi es ingeniero de software en Spotify y consultor de HBase en Cloudera.