Meetup: Spark + Kerberos

download Meetup: Spark + Kerberos

of 51

  • date post

    12-Apr-2017
  • Category

    Technology

  • view

    137
  • download

    2

Embed Size (px)

Transcript of Meetup: Spark + Kerberos

  • Spark + Kerberos

    Noviembre 2016

    Meetup

  • Jorge Lpez-Malla Matute

    INDEX

    jlopezm@stratio.com

    Abel Rincn Matarranzarincon@stratio.com

    Introduccin al Big Data y la seguridad

    Seguridad Perimetral

    1

    3

    Kerberos Introduccin

    El protocolo

    2

    4Arquitectura Spark y Seguridad Standalone

    YARN/Mesos clietn

    Mesos Cluster

    YARN/Mesos y Kerberos.

    Spark y seguridad

    RoadTrip Stratio Requirements

    Spark Package

    Aadiendo user a RDD

    Task/Scheduler

    Kerberos User

    SaveAs

    Wrappers

    SparkSQL

    Spark 2.0

  • Presentacin

    Presentacin

    JORGE LPEZ-MALLA

    Tras trabajar con algunasmetodologas tradicionalesempec a centrarme en el

    mundo del Big Data, del cualme enamor. Ahora soy

    arquitecto Big Data en Stratio yhe puesto proyectos en

    produccin en distintas partesdel mundo.

    SKILLS

  • Presentacin

    Presentacin

    ABEL RINCN MATARRANZ

    SKILLS

  • Introduccin al Big Data y la seguridad1

  • Seguridad y Big Data

    La mayora de las tecnologas Big Data se toman la seguridad como algo secundario, en el mejor de los casos

    Una prueba de esto es: habis visto al claim de seguridad en estas tecnologas?

    Los cluster de Big Data normalmente relegan la seguridad en poner una barrera alrededor del cluster.

    Desde que HDFS se integr con Kerberos, Kerberos es el protocolo de autenticacin por defecto para tecnologas Big Data

    Introduccin al Big Data y la seguridad

  • Seguridad Perimetral

    Introduccin al Big Data y la seguridad

  • Seguridad Perimetral

    Introduccin al Big Data y la seguridad

    Se establece una nica mquina de acceso y se securiza la entrada a esa mquina

    Segundo inconveniente: Los datos no se pueden poder usar desde fuera del cluster. Gran lastre con las herramientas de BI y analiticas actuales.

    Primer inconveniente: No suelen permitir multitud de usuarios concurrente operando a la vez en el cluster

  • Kerberos2

  • Kerberos

    Kerberos

    Qu es Kerberos? Servicio de autenticacin

    Seguro Single-sign-on Basado en confianza Autenticacin mutua

  • Kerberos-Terminologa

    Kerberos

    Principal Nombre (userName / serviceName) Realm Entorno( DEMO.MEETUP.COM) Cliente/Servicio usuario a nivel de kerberos KDC servicio de distribucin de claves TGT contiene la sesin del cliente TGS contiene la sesin del servicio

  • Kerberos Protocolo

    Kerberos

    1. Se especifica el nombre del cliente

    2. Peticin de TGT

    3. KDC enva la clave de sesin con el TGT

    4. El cliente manda el TGT y la peticin de

    TGS

    5. KDC devuelve el TGS

    6. El cliente manda el TGS al servicio

    7. Se establece la conexin entre cliente y

    servicio cifrada con la clave de sesin del

    servicio

  • Kerberos-Impersonacin

    Kerberos

  • Arquitectura Spark3

  • Arquitectura Spark

    Un cluster de Spark puede ser gestionado de tres maneras distintas:

    Standalone: Denominado as porque el propio Spark se gestiona su cluster. Master y Workers. No tiene ninguna implementacin con Kerberos.

    Mesos: Gestor de recursos por el que nace Spark. Master y Agents. Mesosphere aade una implementacin con Kerberos.

    YARN: Gestor de trabajos de Hadoop. Resource Manager y Node Managers. Tiene una implementacin con Kerberos que depende de HDFS.

    Arquitectura Spark

  • Standalone

    Arquitectura Spark

    Main {...sc = new SparkContext()rdd1 = sc.textFile.map()rdd1.saveAs.}

    Driver

    Master

    Worker-1 Worker-2

    Executor-0 Executor-1

    Task-0 Task-1Task-2 Task-3

    HDFS

  • Mesos/YARN - client

    Arquitectura Spark

    Main {...sc = new SparkContext()rdd1 = sc.textFile.map()rdd1.saveAs.}

    Driver

    Mesos Master/Resource Manager

    Agent/NodeManager-1

    Executor-0 Executor-1

    Task-0 Task-1Task-2 Task-3

    HDFS

    Agent/NodeManager-2

    Executor-0 Executor-1

  • Mesos - Cluster

    Arquitectura Spark

    Mesos Master

    Agent-2

    Executor-1 Executor-2

    Task-0 Task-1Task-2 Task-3

    HDFS

    Agent-3

    Executor-0 Executor-1

    Agent-1

    Executor-0

    Main {...sc = new SparkContext()rdd1 = sc.textFile.map()rdd1.saveAs.}

    Main {...sc = new SparkContext()rdd1 = sc.textFile.map()rdd1.saveAs.} Spark dispatcher

    Driver

    Driver

  • Mesos y Kerberos

    Arquitectura Spark

    Main {...sc = new SparkContext()rdd1 = sc.textFile.map()rdd1.saveAs.}

    Driver

    Mesos Master/Resource Manager

    Agent/NodeManager-1

    Executor-0 Executor-1

    Task-0 Task-1Task-2 Task-3

    HDFS

    Agent/NodeManager-2

    Executor-0 Executor-1

    tgt/keytab 64

  • Spark y seguridad

    Kerberos no es la nica medida de seguridad de Spark

    ACLs para modificacin de Jobs.

    Securizacin de comunicaciones mediante TLS.

    Driver con Executors -> Slo en versiones anteriores a la 2.0.

    File Server: files y broadcast -> todas las versiones.

    Webs: Standalone Master/Slave, history Server y Application UI.

    La seguridad mejora en cada nueva versin de Spark.

    Arquitectura Spark

  • Spark y Seguridad

    Arquitectura Spark

    Main {...sc = new SparkContext()rdd1 = sc.textFile.map()rdd1.saveAs.}

    Driver

    Mesos Master

    Agent-1

    Executor-0 Executor-1

    Task Task-1

    HDFS

    Agent-2

    Executor-0 Executor-1encriptacin TLS

    Kerberos

    file1

    file1 file1

  • Spark y Seguridad

    Arquitectura Spark

    Main {...sc = new SparkContext()rdd1 = sc.textFile.map()rdd1.saveAs.}

    Driver

    Mesos Master

    Agent-1

    Executor-0 Executor-1

    Task Task-1

    HDFS

    Agent-2

    Executor-0 Executor-1encriptacin TLS

    Kerberos

    file1

    file1 file1

  • Road Trip4

  • XData

    XData es un framework distribuido con tecnologa de Apache Spark.

    Tiene dos modos Server y librera.

    Puede usarse con herramientas BI, mediante una API Java/Scala y con una shell interactiva.

    no hay tls y tienen plugin de AAA.

    Cuando usa un Cluster de Spark es agnstico de Cluster Manager.

    Puede mezclar Streaming con Batch.

    Stratio Requirements

    Road Trip

  • Stratio Requirements

    Impersonacin en tiempo real

    Como Usuario Final de Crossdata necesito autenticarme contra el backend de datos en mi nombre para tener una gestin de permisos individualizada en l.

    Crossdata en modo servidor tiene como particularidad, el uso de un contexto infinito

    Crossdata usar un principal propio para el servicio Crossdata da soporte a varios usuarios sobre la misma sesin Spark se debe autenticar sobre hdfs como el usuario final no como crossdata

    Road Trip

  • Por qu no nos valen las soluciones actuales?

    CrossData es agnstico al cluster manager, ergo debera poder usar cualquiera de los tres.

    Ninguna de las dos soluciones actuales (YARN ni Mesos) permite la impersonacin

    Slo se permite un usuario por Executor/YARN Containner

    Adems de autenticar en los Executors hay que autenticar en el Driver

    No deberamos limitarnos a Hadoop ni a Kerberos.

    Stratio Requirements

    Road Trip

  • Consideraciones Previas

    Se va a usar un nico Principal/Keytab y se usarn Usuarios Proxyficados

    Se tiene que permitir ejecuciones de varios usuarios en el mismo cluster con la mnima intervencin de los mismos

    La solucin no puede ser dependiente de particularidades de Cluster Managers

    Stratio Requirements

    Road Trip

  • Primera Idea

    El primer intento fue hacer un SecuredRDD.

    Se aadira al Spark Packages

    Slo se permite un usuario por Executor/YARN Containner

    Spark Packages

    Road Trip

    Resultado Aunque podamos autentificar en el Driver NO se puede hacer nada en los

    Executor -> Hay que tocar el API de Task

    Se aprende que hay que meter el usuario en los RDD para poder pasarlos del Driver a los executors

  • Task/Scheduler

    Road Trip

    private[spark] abstract class Task[T]( val stageId: Int, val stageAttemptId: Int, val partitionId: Int, internalAccumulators: Seq[Accumulator[Long]], proxyUser: Option[String]) extends Serializable with Logging{

  • class DAGScheduler(...){val tasks: Seq[Task[_]] = try { val stageUser = KerberosUser.getMaybeUser stage match { case stage: ShuffleMapStage => partitionsToCompute.map { id => val locs = taskIdToLocations(id) val part = stage.rdd.partitions(id) new ShuffleMapTask(stage.id, stage.latestInfo.attemptId, taskBinary, part, locs, stage.internalAccumulators, stageUser) } case stage: ResultStage => val job = stage.activeJob.get partitionsToCompute.map { id => val p: Int = stage.partitions(id) val part = stage.rdd.partitions(p) val locs = taskIdToLocations(id) new ResultTask(stage.id, stage.latestInfo.attemptId, taskBinary, part, locs, id, stage.internalAccumulators, stageUser) } }

    Task/Scheduler

    Road Trip

  • Se vio que era necesario aadir un usuario a cada RDD para controlar los accesos en Driver/Executor

    Primero se opt por aadir campos a los mtodos que crean RDD provenientes de Hadoop

    Primera prueba con usuarios dentro de RDDs:

    Resultado:

    Aadiendo