Esta es una pregunta de varias partes, que realmente vuelve a la pregunta principal:
Cómo proteger mejor los datos en un Hadoop ( wikipedia ) cluster.
(Versión actual, distribución de rama principal de vainilla, aunque estoy abierto a escuchar acerca de otros). Después de mucho buscar e investigar, no se me ha ocurrido mucho ...
Mi escenario es un proveedor de servicios, que hospeda y procesa grandes cantidades de datos de varios grandes clientes corporativos (multi-tenancy). Estos clientes no acceden al Hadoop directamente, sino solo a través de la aplicación SaaS. Sin embargo, estos clientes suelen ser competidores directos y, a menudo, bastante paranoicos (justificadamente, ya que cada uno probablemente estaría contento con el espionaje corporativo en contra de los demás ...).
Mi reacción anterior a la vieja escuela es implementar instancias individuales y aisladas para cada cliente. Sin embargo, esto no es práctico ni permite aprovechar los beneficios y capacidades de Hadoop.
Además, me cuesta creer que con todos los grandes usuarios de Hadoop, no haya buenas soluciones para estos problemas ...
En particular, estoy viendo estos problemas:
- Limitar el acceso a los usuarios específicos en uso por cada aplicación (usuario de la aplicación por cliente)
- Encriptación
- Aislamiento entre clientes, es decir, no permite que un cliente vea a otro.
- Endurecimiento general recomendaciones
Me las arreglé para encontrar algunas instrucciones, pero no he podido verificar que estas sean buenas , o si hay mejores soluciones.
- autorización de nivel de servicio
- Aislamiento de la red / sistema, para evitar que cualquier persona, excepto la aplicación, tenga acceso directo
- Permisos de archivo / carpeta, por usuario de la aplicación (es decir, cliente).
Problemas que he encontrado con este enfoque:
- Los permisos solo se aplican en el NameNode; El acceso directo a DataNodes todavía proporcionaría acceso.
- La autenticación es un poco "dudosa", al menos hasta que se agregue en el soporte de Kerberos (después de eso, tendremos que ver la implementación ...)
- Me parece que esto no proporciona suficiente aislamiento entre los clientes.
- HDFS Federation / Namespaces
Esto podría proporcionar un mejor aislamiento de los privilegios, sin mencionar los servidores separados y el ancho de banda asignado por cliente (para evitar que uno intente hacer DoS a través del único punto de falla de NameNode). Pero no he encontrado ninguna información real sobre el uso de la leyenda real, o cómo resiste el mal uso.
Además, esto no resuelve el problema de la autenticación suave (¿lo hace?) Y el acceso directo al bloque DataNode (¿lo hace?) - Para el cifrado de datos, estoy dividido entre el cifrado HDFS (una clave simple y simétrica compartida entre TODOS los nodos) o el cifrado a nivel de la aplicación (y la clave (o claves, digamos una por cliente) aún debe ser distribuida a cada nodo de tarea para los trabajos de MapReduce).