{"id":13165,"date":"2022-02-15T14:51:04","date_gmt":"2022-02-15T14:51:04","guid":{"rendered":"https:\/\/bluetab.net\/?p=13165"},"modified":"2022-02-15T14:51:04","modified_gmt":"2022-02-15T14:51:04","slug":"databricks-sobre-azure-una-perspectiva-de-arquitectura-parte-1","status":"publish","type":"post","link":"https:\/\/bluetab.net\/en\/2022\/02\/databricks-sobre-azure-una-perspectiva-de-arquitectura-parte-1\/","title":{"rendered":"Databricks sobre Azure &#8211; Una perspectiva de Arquitectura (parte 1)"},"content":{"rendered":"<h1>Databricks sobre Azure &#8211; Una perspectiva de arquitectura (parte 1)<\/h1>\n<p>Compartir en twitter<br \/>\nCompartir en linkedin<\/p>\n<figure><a href=\"https:\/\/www.linkedin.com\/in\/francisco-linaje-024499175\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2021\/10\/Francisco-150x150.jpg\" alt=\"\" loading=\"lazy\"><\/a><\/figure>\n<h4><a href=\"https:\/\/www.linkedin.com\/in\/francisco-linaje-024499175\/\" target=\"_blank\" rel=\"noopener\">Francisco Linaje<\/a><\/h4>\n<p>AWS Solutions Architect<\/p>\n<figure><a href=\"https:\/\/www.linkedin.com\/in\/gabriel-gallardo-ruiz-9042a0212\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/10\/avatarP-bluetab.jpg-150x150.png\" alt=\"\" loading=\"lazy\"><\/a><\/figure>\n<h4><a href=\"https:\/\/www.linkedin.com\/in\/gabriel-gallardo-ruiz-9042a0212\/\" target=\"_blank\" rel=\"noopener\">Gabriel Gallardo Ruiz<\/a><\/h4>\n<p>Senior Data Architect<\/p>\n<p>Databricks tiene como objetivo dotar de un entorno intuitivo al usuario no especializado para que pueda desarrollar las diferentes funciones en materia de ingenier\u00eda y ciencia de datos, dotando adem\u00e1s de una capa de gobierno y gesti\u00f3n del dato.<\/p>\n<p>Nuestro objetivo con este art\u00edculo, no es tanto describir y analizar c\u00f3mo emplear estas herramientas, sino <i>ver como son integradas desde un punto de vista de arquitectura dentro<\/i> del proveedor <i>de Azure.<\/i><\/p>\n<p><i>Databricks como soluci\u00f3n Lakehouse<\/i><\/p>\n<p>La plataforma Databricks sigue el paradigma de Lakehouse, en el que se combinan las bondades del Data Warehouse con las del Data Lake, permitiendo tener un buen rendimiento tanto en sus consultas analiticas gracias a la indexacion, como transaccionalidad a trav\u00e9s de Delta Lake,&nbsp; sin perder la flexibilidad de una arquitectura de datos abierta y escalable, junto a una mejor gobernanza del dato y del acceso a los recursos y servicios del lago, permitiendo de una forma general disponer de una arquitectura menos compleja y m\u00e1s integrada.<\/p>\n<p>Este art\u00edculo se dividir\u00e1 en dos entregas.<\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">La primera, tendr\u00e1 como objetivo explicar c\u00f3mo Databricks organiza y despliega su producto en Azure, as\u00ed como las diferentes configuraciones en materia de comunicaci\u00f3n\/seguridad entre Databricks y otros servicios de Azure.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">La segunda, estar\u00e1 centrada en la capa de seguridad del dato y escalabilidad de la infraestructura as\u00ed como monitorizaci\u00f3n, despliegue y recuperaci\u00f3n ante errores.<\/li>\n<\/ul>\n<p><b>Primera entrega:<\/b><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Arquitectura alto nivel<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Planes y tipos de carga de trabajo<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Networking<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Identidad y Gesti\u00f3n de accesos<\/li>\n<\/ul>\n<p><b>Segunda entrega (pr\u00f3ximamente):<\/b><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">DR<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Cifrado<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Escalabilidad<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Logging y monitorizaci\u00f3n<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Despliegue<\/li>\n<\/ul>\n<h2>Glosario<\/h2>\n<ul>\n<li><b><i>Azure Data Lake<\/i><\/b><b>: <\/b>Permite almacenar m\u00faltiples formatos de datos en un mismo lugar para su explotaci\u00f3n y an\u00e1lisis, actualmente Azure dispone la versi\u00f3n Gen2 .<\/li>\n<li><b><i>All Purpose Compute<\/i><\/b><b>:<\/b> Dise\u00f1ado para entornos colaborativos en los que se recurra de forma simult\u00e1nea al cl\u00faster por parte de Data Engineers y Data Scientist.<\/li>\n<li><b><i>Azure Key Vault<\/i><\/b><b>:<\/b> Servicio administrado de Azure que permite el almacenamiento seguro de secretos.<\/li>\n<li><b><i>Azure Virtual Network (VNET)<\/i><\/b><b>: <\/b>Red virtual aislada l\u00f3gicamente en Azure.<\/li>\n<li><b>Continuous integration and continuous delivery CI\/CD: <\/b>Conjunto de herramientas y pautas automatizadas que permiten aplicar una integraci\u00f3n y puesta en producci\u00f3n continua<\/li>\n<li><b>Data Lake: <\/b>Paradigma de almacenamiento distribuido de datos provenientes de multitud de fuentes y formatos, estructurados, semi estructurados y sin estructurar.<\/li>\n<li><b><i>Identity Provider (IdP)<\/i><\/b><b>:<\/b> Entidad que mantiene la informaci\u00f3n de identidad de los individuos dentro de una organizaci\u00f3n.<\/li>\n<li><b><i>Jobs Compute<\/i><\/b><b>:<\/b> Enfocado a procesos orquestados mediante pipelines gestionados por data engineers que puedan conllevar autoescalado en ciertas tareas<\/li>\n<li><b><i>Jobs Light Compute<\/i><\/b><b>:<\/b> Dise\u00f1ado para procesos cuya consecuci\u00f3n no sea cr\u00edtica y no conlleve una carga computacional muy elevada.<\/li>\n<li><b><i>Network Security Group o NSG<\/i><\/b>: Especifican las reglas que regulan el tr\u00e1fico de entrada y salida de la red y los clusters en Azure.<\/li>\n<li><b><i>Notebook<\/i><\/b>: Interfaz web para ejecutar c\u00f3digo en un cluster, abstrayendo del acceso al mismo.<\/li>\n<li><b>PrivateLink<\/b>: Permite el acceso privado (IP privada) a Azure PaaS a trav\u00e9s de la VNET del usuario, de la misma forma que los service endpoints el tr\u00e1fico se enruta a trav\u00e9s del backbone de Azure.<\/li>\n<li><b>Azure role-based access control (RBAC)<\/b>: Sistema de autorizaci\u00f3n integrado en Azure Resource Manager que permite asignar permisos granulares sobre recursos a usuarios de Azure.<\/li>\n<li><b><i>Security Assertion Markup Language (SAML)<\/i><\/b><b>: <\/b>Est\u00e1ndar abierto utilizado para la autenticaci\u00f3n. Basado en XML, las aplicaciones web utilizan SAML para transferir datos de autenticaci\u00f3n entre dos entidades, el <i>Identity Provider <\/i>y el servicio en cuesti\u00f3n.<\/li>\n<li><b><i>Secure Cluster Connectivity (SCC): <\/i><\/b>&nbsp;Comunicaci\u00f3n a trav\u00e9s de t\u00fanel inverso SSH entre <i>Control Plane <\/i>y <i>cluster. <\/i>Permite no tener puertos abiertos ni IPs p\u00fablicas en las instancias.<\/li>\n<li><b>Service Endpoints: <\/b>Componente de red que permite conectar una VNET con los diferentes servicios dentro de Azure a trav\u00e9s de la propia red de Azure.<\/li>\n<li><b>Service Principal<\/b>: Entidad creada para que la administraci\u00f3n y gesti\u00f3n de tareas que no queden asociadas a un miembro de la organizaci\u00f3n en particular si no a un servicio<\/li>\n<li><b>Secret Scope<\/b>: Colecci\u00f3n de secretos identificados por un nombre.<\/li>\n<li><b>Single Sign On (SSO)<\/b>: Permite a los usuarios la autenticaci\u00f3n a trav\u00e9s de un Identity Provider (IdP) proporcionado por la organizaci\u00f3n, requiriendo de compatibilidad con SAML 2.0.<\/li>\n<li><b><i>Workspace<\/i><\/b><b>:<\/b> Entorno compartido para acceder a todos los activos de Databricks. En este se organizan los diferentes objetos (<i>notebooks<\/i>, librerias, etc\u2026) en carpetas y se administran los accesos a recursos computacionales como <i>clusters<\/i> y <i>jobs<\/i>.&nbsp;<\/li>\n<\/ul>\n<h2>Arquitectura<\/h2>\n<h3><strong>Databricks como producto<\/strong><\/h3>\n<p>Databricks permanece integrado dentro de Azure como servicio propio a diferencia de otros proveedores, permitiendo el despliegue de una forma m\u00e1s directa y sencilla ya sea desde la propia consola o mediante templates.<\/p>\n<p>Dentro de los servicios ofrecidos por Databricks destacan:&nbsp;<\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Databricks SQL<\/i><\/b><b>:<\/b> ofrece una plataforma para realizar consultas SQL ad-hoc contra el Data Lake, as\u00ed como m\u00faltiples visualizaciones de los datos con dashboards.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Databricks Data Science &amp; Engineering<\/i><\/b><b>:<\/b> proporciona un workspace que permite la colaboraci\u00f3n entre diferentes roles (ingenieros de datos, cient\u00edficos de datos, etc) para el desarrollo de diferentes pipelines para la ingesta y explotaci\u00f3n del Data Lake.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b><i>Databricks Machine Learning<\/i><\/b><b>:<\/b> ofrece un entorno para el desarrollo y explotaci\u00f3n de modelos de machine learning <i>end-to-end<\/i>.<\/li>\n<\/ul>\n<p>Adem\u00e1s Databricks ofrece Spark como framework de programaci\u00f3n distribuida, as\u00ed como integraci\u00f3n con Delta Lake y soporte a transacciones ACID para datos estructurados y no estructurados, unificaci\u00f3n de fuentes batch y streaming.<\/p>\n<p>Databricks ofrece tambi\u00e9n una soluci\u00f3n en material de orquestaci\u00f3n y despliegue de jobs de una forma productiva, permitiendo adem\u00e1s paralelismo entre ellos, hasta 1000 de forma concurrente. Pudiendo emplearse solo dentro del workspace de Data Science &amp; Engineering<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"524\" height=\"500\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image9.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image9.png 524w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image9-300x286.png 300w\" sizes=\"(max-width: 524px) 100vw, 524px\"><figcaption>Diagrama de procesos orquestados (fuente: Databricks)<\/figcaption><\/figure>\n<p>Dentro de las ventajas a\u00f1adidas ofrecidas por Databricks se encuentra el empleo de Databricks File System (DBFS), se trata de un sistema de ficheros distribuido de acceso para los clusters.<\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Permite montar puntos de almacenamiento para acceder a los objetos sin necesidad de credenciales espec\u00edficos para su uso.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Evita la necesidad de emplear urls para acceder a los objetos, facilitando el acceso v\u00eda directorios y sem\u00e1ntica.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Otorga una capa de persistencia al almacenar en el file system los datos, evitando que estos se pierdan cuando el cluster es finalizado.<\/li>\n<\/ul>\n<p>Databricks Repos: ofrece integraci\u00f3n y sincronizaci\u00f3n con repositorios GIT, incluyendo una API para el empleo de pipelines de CI\/CD. Los proveedores Git actuales incluidos son:<\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><i>GitHub<\/i><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><i>Bitbucket<\/i><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><i>GitLab<\/i><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><i>Azure DevOps<\/i><\/li>\n<\/ul>\n<h4>&nbsp;<\/h4>\n<h3><strong><i>Overview<\/i> de la arquitectura<\/strong><\/h3>\n<p>En esta secci\u00f3n analizaremos c\u00f3mo se realiza el despliegue de Databricks dentro de la cuenta del cliente en su proveedor cloud, este caso Azure.<\/p>\n<p>Databricks se compone principalmente de dos capas; una de <b>control <\/b>(interna) y otra de <b>datos <\/b>(externa\/cliente).<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1013\" height=\"871\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image10.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image10.png 1013w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image10-300x258.png 300w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image10-768x660.png 768w\" sizes=\"(max-width: 1013px) 100vw, 1013px\"><figcaption>Diagrama a alto nivel de la arquitectura (fuente: Databricks)<\/figcaption><\/figure>\n<p>En la imagen anterior podemos ver como la capa de control permanece en la suscripci\u00f3n de databricks, bajo su control, dise\u00f1o y administraci\u00f3n interna siendo compartida esta por todos los usuarios.<\/p>\n<p>&nbsp;Los principales servicios contenidos, son:<\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Notebooks: Todos los notebook, resultados y configuraciones permanecen encriptados<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Job Scheduler<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Rest API<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Metastore: Hive metastore gestionado por databricks<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Cluster manager: Solicita m\u00e1quinas virtuales para los cl\u00faster que se&nbsp; lanzar\u00e1n en el plano de datos<\/li>\n<\/ul>\n<p>La capa de datos se encuentra dentro de la suscripci\u00f3n del cliente y por lo tanto ser\u00e1 administrada por \u00e9l. En esta capa encontramos los jobs y clusters empleados para la ejecuci\u00f3n de las ETLs, as\u00ed como los datos empleados en ellas.<\/p>\n<p>Es importante se\u00f1alar que Databricks disponibiliza dos interfaces de red en cada nodo desplegado, en una de ellas se direccionara el tr\u00e1fico hacia el plano de control y en la otra el tr\u00e1fico interno entre nodos (driver &#8211; ejecutores)<\/p>\n<p>Databricks ofrece dos m\u00e9todos principales para realizar el despliegue del plano de datos y que posteriormente comentaremos en profundidad:<\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Por un lado tenemos <i>Databricks managed VNET<\/i>, siendo este el despliegue dado por defecto donde Databricks se encarga de desplegar los recursos necesarios dentro de la cuenta del cliente.&nbsp;<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Por otro lado tenemos un segundo tipo de despliegue <i>Databricks VNET injection<\/i> donde es el cliente el que disponibiliza los recursos m\u00ednimos necesarios para el correcto funcionamiento y comunicaci\u00f3n contra el control-plane.<\/li>\n<\/ul>\n<p>En ambos casos, la topolog\u00eda de red en el <i>Data Plane<\/i> se compondr\u00e1 de dos subredes.<\/p>\n<ol>\n<li><i>Container subnet<\/i> o \u201c<i>private\u201d subnet<\/i><\/li>\n<li><i>Host subnet<\/i> or \u201c<i>public\u201d subnet<\/i><i><br \/>\n<\/i><\/li>\n<\/ol>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"625\" height=\"540\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image2.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image2.png 625w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image2-300x259.png 300w\" sizes=\"(max-width: 625px) 100vw, 625px\"><figcaption>Arquitectura de Databricks en Azure (fuente: Databricks)<\/figcaption><\/figure>\n<h4><strong>Secure Cluster Connectivity <a href=\"\/#ref\">[2]<\/a><\/strong><\/h4>\n<p>En contextos de seguridad m\u00e1s restrictivos, ser\u00e1 posible asignar como puerta de enlace un NAT&nbsp; gateway u otro dispositivo <i>egress traffic<\/i> como un balanceador de carga, firewall, etc, para eliminar la necesidad de asignar direcciones IP p\u00fablicas a los hosts.<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"860\" height=\"597\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image8.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image8.png 860w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image8-300x208.png 300w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image8-768x533.png 768w\" sizes=\"(max-width: 860px) 100vw, 860px\"><figcaption>Conexi\u00f3n del workspace con SCC (fuente: Databricks)<\/figcaption><\/figure>\n<h2>Planes y tipos de carga de trabajo<\/h2>\n<p>Adem\u00e1s del coste de la infraestructura empleada para el procesamiento y el almacenamiento en Azure, Databricks a\u00f1ade un sobrecargo extra expresado en DBU (unidades de procesamiento) en funci\u00f3n del tipo de instancia levantada y su tama\u00f1o, as\u00ed como el tipo de workload empleado.&nbsp;<\/p>\n<p>Se distinguen 2 tipos principales:&nbsp;<\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Jobs Cluster: Ejecuci\u00f3n de <i>pipelines <\/i>programadas no iterativas, distingui\u00e9ndose seg\u00fan el tama\u00f1o del cluster aprovisionado en ligero o normal. Los <i>jobs <\/i>suelen emplearse creando clusters ef\u00edmeros y siendo eliminados despu\u00e9s de la ejecuci\u00f3n de los mismos.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">All purpose: Clusters empleados para trabajar de forma iterativa (<i>MANDATORY<\/i>) permitiendo ejecutar&nbsp; y desarrollar diferentes notebooks concurrentemente.<\/li>\n<\/ul>\n<p>Adem\u00e1s, <i>seg\u00fan el tipo de cuenta contratada Standard o Premium se realizar\u00e1n cargos adicionales sobre el coste de la DBU.<\/i><\/p>\n<table id=\"eael-data-table-e466bcd\">\n<thead>\n<tr>\n<th id=\"\" colspan=\"\"><\/th>\n<th id=\"\" colspan=\"2\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tAZURE PLAN<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tStandard<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tPremium<\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tOne platform for your data analytics and ML workloads<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tData analytics and ML at scale across your business<\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tJob Light Compute<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t$0,07\/DBU<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t$0,22\/DBU<\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tJob Compute<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t$0,15\/DBU<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t$0,30\/DBU<\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tSQL Compute<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tN\/A<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t$0,22\/DBU<\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tAll-Purpose Compute<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t$0,40\/DBU<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t$0,55\/DBU<\/td>\n<\/tr>\n<tr><\/tr>\n<\/tbody>\n<\/table>\n<p><em>Coste imputado por DBU respecto a los factores computacionales y arquitect\u00f3nicos<\/em><\/p>\n<table id=\"eael-data-table-fca13f3\">\n<thead>\n<tr>\n<th id=\"\" colspan=\"\"><\/th>\n<th id=\"\" colspan=\"3\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tWORKLOAD TYPE (STANDARD TIER)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tFEATURE<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tJobs Light Comput<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tJobs compute<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tAll-purpose compute<\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tManaged Apache Spark<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tJob scheduling with libraries<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tJob scheduling with notebooks<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tAutopilot clusters<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tDatabricks Runtime for ML<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tManaged MLflow<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tDelta Lake with Delta Engine<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tInteractive clusters<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tNotebooks and collaboration<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tEcosystem integrations<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><em>Caracter\u00edsticas por tipo de carga de trabajo plan Standard<\/em><\/p>\n<table id=\"eael-data-table-483c594\">\n<thead>\n<tr>\n<th id=\"\" colspan=\"\"><\/th>\n<th id=\"\" colspan=\"3\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tWORKLOAD TYPE (STANDARD TIER)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tFEATURE<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tJobs Light Comput<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tJobs compute<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tAll-purpose compute<\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tRole Based Access Control for clusters, jobs,<br \/>\nnotebooks and tables<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tJDBC\/ODBC Endpoints Authentication<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tAudit Logs<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tAll Standard Plan Features<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tAzure AD credential passthrough<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tConditional Authentication<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tCluster Policies<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tIP Access List<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<tr>\n<td colspan=\"\" rowspan=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\tToken Management API<\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<td colspan=\"\" rowspan=\"\" id=\"\"><\/td>\n<\/tr>\n<tr><\/tr>\n<\/tbody>\n<\/table>\n<p><em>Caracter\u00edsticas por tipo de carga de trabajo plan Premium<\/em><\/p>\n<p>Es importante se\u00f1alar que adem\u00e1s podr\u00e1n obtenerse descuentos de hasta el 37% en los precios por DBU, realizando compras aprovisionadas de estas (DBCU o Databricks Commit Units) para 1 o 3 a\u00f1os.<\/p>\n<h2>Networking<\/h2>\n<p>En este apartado explicaremos los dos diferentes tipos de despliegue ya comentados anteriormente y sus peculiaridades en materia de conexi\u00f3n y acceso al plano de control, as\u00ed como al control del tr\u00e1fico entrante\/saliente.<\/p>\n<h3><strong>Red administrada por Databricks<\/strong><\/h3>\n<p>En esta alternativa, Azure permite a Databricks desplegar el plano de datos sobre nuestra suscripci\u00f3n, disponibilizando los recursos que permitir\u00e1n la conexi\u00f3n contra el plano de control y el despliegue de jobs, clusters y otros recursos.<\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">La comunicaci\u00f3n entre el <i>plano de datos<\/i> y plano de control independientemente de tener activado Secure Cluster Connectivity (SCC) se realizar\u00e1 por el backbone interno de Azure, sin enrutar tr\u00e1fico sobre la red p\u00fablica.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Secure Cluster Connectivity (SCC) podr\u00e1 ser activado para&nbsp; poder trabajar sin IPs p\u00fablicas.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">El tr\u00e1fico inbound\/outbound de los clusters estar\u00e1 controlado mediante diferentes reglas por el <i>network security group<\/i> <i>NSG <\/i>que no podr\u00e1n ser modificables por el usuario.<\/li>\n<\/ul>\n<h3><strong><br \/>\nRed administrada por el cliente (VNET injection) <a href=\"\/#ref\">[1]<\/a><\/strong><\/h3>\n<p>Databricks ofrece la posibilidad de poder desplegar el <i>plano de datos<\/i> sobre una <i>VNET <\/i>propia administrada por el cliente. Esta soluci\u00f3n ofrece mayor versatilidad y control sobre los diferentes componentes de nuestra arquitectura.<\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">La comunicaci\u00f3n entre el Data Plane y Control Plane se realizar\u00e1 sobre el <i>backbone <\/i>interno de Azure de la misma forma que en la red administrada por Databricks vista anteriormente, adem\u00e1s de la misma forma podremos activar SCC.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">En este caso al ser nuestra propia <i>VNET <\/i>tendremos control sobre las reglas definidas en nuestros <i>NSG<\/i>.<\/li>\n<\/ul>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"897\" height=\"539\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image11.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image11.png 897w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image11-300x180.png 300w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image11-768x461.png 768w\" sizes=\"(max-width: 897px) 100vw, 897px\"><figcaption>NSG provisionado por Databricks por delegaci\u00f3n en la VNET del cliente (fuente: Databricks). <\/figcaption><\/figure>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Se deber\u00e1 ser propietario de la VNET para poder permitir que se delegue a Databricks su configuraci\u00f3n o el despliegue de recursos <a href=\"\/#ref\">[3]<\/a>.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Podremos habilitar cualquier componente de arquitectura que consideremos dentro de nuestra VNET ya que estar\u00e1 administrada por nosotros:\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\">Conectar Azure Databricks a otros servicios de Azure de una forma m\u00e1s segura empleando service endpoints o private endpoints.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\">Conectarse a tus recursos on-premise empleando user-defined routes.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\">Permite desplegar un network virtual appliance para inspeccionar el tr\u00e1fico<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\">Custom DNS<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\">Custom egress NSG rules<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\">Aumentar el rango CIDR de la m\u00e1scara de red para la VNET entre \/16 &#8211; \/24 y \/26 para las subredes.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"371\" height=\"295\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image12.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image12.png 371w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image12-300x239.png 300w\" sizes=\"(max-width: 371px) 100vw, 371px\"><figcaption>Diagrama de conexi\u00f3n mediante PrivateLink  con servicios nativos de Azure (fuente: Databricks)<\/figcaption><\/figure>\n<p>Dentro de las peculiaridades de ambos despliegues, es importante se\u00f1alar:<\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">No es posible reemplazar una VNet existente en un workspace por otra, si fuera necesario se deber\u00e1 crear un nuevo workspace con una nueva VNET.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Tampoco es posible a\u00f1adir SCC a un workspace una vez ya ha sido creado, si fuera necesario tambi\u00e9n deber\u00e1 volver a crear el workspace.<\/li>\n<\/ul>\n<h3><strong>Conexiones contra el plano de control<\/strong><\/h3>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"920\" height=\"830\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image4.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image4.png 920w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image4-300x271.png 300w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image4-768x693.png 768w\" sizes=\"(max-width: 920px) 100vw, 920px\"><figcaption>Conexi\u00f3n plano de control y de datos en Databricks (fuente: Databricks)<\/figcaption><\/figure>\n<p>Tal y como ya hemos comentado anteriormente, toda comunicaci\u00f3n con el plano de control se realiza por dentro del backbone de Azure por defecto <a href=\"\/#ref\">[2]<\/a>. Tambi\u00e9n se debe destacar:<\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">A nivel de red, toda conexi\u00f3n que se realiza contra el plano de control al crear un cluster en el plano de datos se realiza v\u00eda <b>HTTPS <\/b>(443) y sobre una direcci\u00f3n IP diferente a la empleada para otros servicios de aplicaci\u00f3n Web o APIs.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Cuando el plano de control&nbsp; lanza nuevos jobs o realiza otras tareas de administraci\u00f3n del cl\u00faster, estas solicitudes se env\u00edan al cl\u00faster a trav\u00e9s de este t\u00fanel inverso.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Para realizar las conexiones entre el plano de control y de datos, se habilitar\u00e1 una direcci\u00f3n IP p\u00fablica sobre la subred p\u00fablica aunque el tr\u00e1fico posteriormente sea enrutado dentro del backbone, adem\u00e1s no se dejar\u00e1n puertos abiertos o se asignar\u00e1n direcciones IP p\u00fablicas sobre los clusters.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Si en nuestro caso de uso se deben de emplear unas condiciones m\u00e1s restrictivas de seguridad, Databricks ofrece la posibilidad de activar la opci\u00f3n de secure cluster connectivity permitiendo eliminar toda direcci\u00f3n IP p\u00fablica para realizar la conexi\u00f3n entre el plano de control y de datos,&nbsp; para ello se servir\u00e1:\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\">Por defecto en la red administrada por Databricks (<i>managed VNET)<\/i>&nbsp; se habilita un <b>NAT <\/b>para poder realizar esta comunicaci\u00f3n<b>.<\/b><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\">Si el cliente despliega la infraestructura sobre su propia red (<b>VNET Injection deployment) <\/b>este deber\u00e1 aportar un dispositivo de red para el tr\u00e1fico saliente, que podra ser un NAT Gateway, Load Balancer, Azure Firewall o un dispositivo de terceros.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Identidad y Gesti\u00f3n de accesos<\/h2>\n<p>Databricks ofrece diferentes herramientas para administrar el acceso a nuestros recursos y servicios de Azure de una forma sencilla e integrada en la propia plataforma.<\/p>\n<p>Podremos encontrar herramientas como filtrados de IP, SSO, permisos de uso sobre los servicios de Databricks, acceso a secretos, etc.<\/p>\n<h3><strong>IP access lists<\/strong><\/h3>\n<p>Databricks permite a los administradores definir listas de acceso IP para restringir el acceso a la interfaz de usuario y la API a un determinado conjunto de direcciones IP y subredes, permitiendo el acceso solo desde las redes de la organizaci\u00f3n. Los administradores s\u00f3lo podr\u00e1n realizar la gesti\u00f3n de IP access list con el API REST.<\/p>\n<h3><strong>Single sign on (SSO)&nbsp;<\/strong><\/h3>\n<p>Mediante Azure Active Directory podremos configurar SSO para todos nuestros usuarios de Databricks evitando la duplicaci\u00f3n en la gesti\u00f3n de identidades.<\/p>\n<h3><strong>System for Cross-domain Identity Management (SCIM)<\/strong><\/h3>\n<p>Permite a trav\u00e9s de un IdP (actualmente Azure Active Directory) crear usuarios en Azure Databricks y otorgarles un nivel de permisos y permanecer sincronizados, se debe disponer de un plan <i>PREMIUM<\/i>. Si los permisos son revocados los recursos ligados a este usuario no son eliminados.<\/p>\n<h3><strong>Acceso a recursos<\/strong><\/h3>\n<p>El acceso principal a los diferentes servicios de Databricks vendr\u00e1 dado por los <i>entitlements <\/i>donde se indicar\u00e1 si el grupo\/usuario tendr\u00e1 acceso a cada uno de ellos (cluster creation, Databricks SQL, Workspaces)<\/p>\n<p>Por otro lado, dentro de Databricks se pueden emplear ACLs para configurar el acceso a los diferentes recursos como clusters,tablas, pools, jobs y objetos del workspace (notebooks, directorios, modelos, etc). Otorgar esta granularidad sobre el acceso a los recursos solo est\u00e1 disponible mediante el plan <i>PREMIUM, <\/i>por defecto todos los usuarios tendr\u00e1n acceso a los recursos.<\/p>\n<p>Estos permisos se encuentran gestionados desde el usuario administrador u otros usuarios con permisos delegados.<\/p>\n<p>Existen 5 niveles de permisos con sus m\u00faltiples implicaciones dependiendo del recurso al que se apliquen;<i> No permissions, can read, can run, can edit, can manage<\/i>.<\/p>\n<p>A continuaci\u00f3n, se indican los permisos asociados al recurso que se desea emplear. En caso de que dos pol\u00edticas puedan solaparse, la opci\u00f3n m\u00e1s restrictiva primar\u00e1 sobre la otra.<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"928\" height=\"467\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image7.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image7.png 928w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image7-300x151.png 300w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image7-768x386.png 768w\" sizes=\"(max-width: 928px) 100vw, 928px\"><figcaption>Permisos seg\u00fan el nivel asociado al usuario sobre los directorios del workspace (Fuente: Databricks)<\/figcaption><\/figure>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"936\" height=\"539\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image6.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image6.png 936w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image6-300x173.png 300w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image6-768x442.png 768w\" sizes=\"(max-width: 936px) 100vw, 936px\"><figcaption>Permisos seg\u00fan el nivel asociado al usuario sobre el notebook (Fuente: Databricks)<\/figcaption><\/figure>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"963\" height=\"555\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image1.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image1.png 963w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image1-300x173.png 300w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image1-768x443.png 768w\" sizes=\"(max-width: 963px) 100vw, 963px\"><figcaption>Permisos seg\u00fan el nivel asociado al usuario sobre el repositorio (Fuente: Databricks)<\/figcaption><\/figure>\n<h4><strong>Azure Datalake Storage ADLS<\/strong><\/h4>\n<p>A trav\u00e9s de Azure Active Directory (Azure AD) puedes realizar la autenticaci\u00f3n directamente desde Databricks con Azure Datalake Storage Gen1 y 2, permitiendo al cluster de Databricks acceder a estos recursos directamente sin necesidad de tener un <i>service principal<\/i>. Requiere del plan&nbsp; <i>PREMIUM <\/i>y activar <i>credentials passthrough<\/i> en opciones avanzadas en el momento de creaci\u00f3n del cluster en Databricks<i>. <\/i>Disponible en clusters est\u00e1ndar y de alta simultaneidad.<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"806\" height=\"145\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image5.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image5.png 806w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image5-300x54.png 300w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image5-768x138.png 768w\" sizes=\"(max-width: 806px) 100vw, 806px\"><figcaption>Activaci\u00f3n de credentials passthrough en la opciones de configuraci\u00f3n del cluster (Fuente: Databricks)<\/figcaption><\/figure>\n<p><i>Credential passthrought<\/i> es un m\u00e9todo de autenticaci\u00f3n que emplea la identidad (<i>Azure AD<\/i>) utilizada para la autenticaci\u00f3n en Databricks para conectarte al Datalake. El acceso a los datos ser\u00e1 controlado a trav\u00e9s de los roles de <i>RBAC <\/i>(permisos a nivel de usuario) y <i>ACLs <\/i>(permisos a nivel de directorio y archivo) configuradas.<\/p>\n<p>Las listas de control de acceso (<i>ACL<\/i>) controlan el acceso al recurso comprobando si la entidad que desea acceder tiene los permisos adecuados.<\/p>\n<h3><strong>Secretos <\/strong><strong><a href=\"\/#ref\">[5]<\/a><\/strong><\/h3>\n<h4><strong>Accesos<\/strong><\/h4>\n<p>Por defecto, todos los usuarios sin importar el plan contratado pueden crear secretos y acceder a ellos (MANAGE permission). Solo a trav\u00e9s del plan <i>PREMIUM <\/i>es posible configurar permisos granulares para controlar el acceso. La gesti\u00f3n de estos se podr\u00e1 realizar a trav\u00e9s de Secrets API 2.0 o Databricks CLI (0.7.1 en adelante).<\/p>\n<p>La gesti\u00f3n de los secretos se realiza a nivel de <i>scope <\/i>(colecci\u00f3n de secretos identificados por un nombre), en concreto una ACL controla la relaci\u00f3n entre el principal (usuario o grupo), el scope y el nivel de permiso. Por ejemplo: cuando un usuario accede al secreto desde un <i>notebook <\/i>v\u00eda <i>Secrets utility<\/i> el nivel de permiso se aplica en base a quien ejecuta el comando.<\/p>\n<p>Por defecto, cuando un scope es creado se le aplica un nivel de permiso MANAGE, sin embargo el usuario que crea el scope podr\u00e1 a\u00f1adir permisos granulares.<\/p>\n<p>Distinguimos 3 niveles de permiso en Databricks-backed scopes:<\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Manage: Puede modificar las ACLs y adem\u00e1s tiene permisos de lectura y escritura sobre el scope.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">WRITE: tiene permisos de lectura y escritura sobre el scope.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">READ: solo tiene permisos de lectura sobre el scope y los secretos a los que tiene acceso.<\/li>\n<\/ul>\n<p>Los usuarios administradores de un workspace tienen acceso a todos los secretos de todos los scopes<\/p>\n<h4><strong>Almacenamiento<\/strong><\/h4>\n<p>Los secretos podr\u00e1n ser referenciados desde los scopes que a su vez har\u00e1n referencia a sus respectivos vaults donde los secretos son almacenados.<br \/>\nExisten dos tipos de soporte de almacenamiento para los secretos:<\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Databricks-backed<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Azure Key Vault<\/li>\n<\/ul>\n<p>Podremos emplear Databricks-backed como soporte de almacenamiento de los secretos sin la necesidad de un plan <i>PREMIUM<\/i>, sin embargo ya sea tanto para emplear Azure Key Vault o por otro lado el empleo de permisos granulares en ambos soportes, s\u00ed ser\u00e1 necesario contratar el plan <i>PREMIUM<\/i>.<\/p>\n<p>Es importante destacar que si el Key Vault existe en un tenant diferente al que alberga el workspace de Databricks, el usuario que crea el scope debe de tener permisos para crear service principals sobre el key vault del tenant, de lo contrario se arrojar\u00e1 el siguiente error.<\/p>\n<pre><code class=\"language-python\">Unable to grant read\/list permission to Databricks service principal to KeyVault <\/code><\/pre>\n<p>Debido a que Azure Key Vault es ajeno a Databricks solo ser\u00e1 posible realizar operaciones de lectura por defecto y no pueden ser administradas desde Secrets API 2.0, deber\u00e1 emplearse por contra Azure SetSecrets REST API o desde el portal de Azure UI.<\/p>\n<p>Es importante se\u00f1alar, que todos los usuarios tendr\u00e1n acceso a los secretos de un mismo Key Vault aunque se encuentren en diferentes scopes. Se considera buena pr\u00e1ctica replicar los secretos en diferentes Key Vaults seg\u00fan subgrupos se tengan aunque puedan ser redundantes.<\/p>\n<p>Ahora mediante RBAC <a href=\"\/#ref\">[4]<\/a> (role-based access control) ya es posible mediante diferentes roles controlar el acceso a los secretos del Vault desde Azure.<\/p>\n<p>Por \u00faltimo, simplemente indicar que los scopes podr\u00e1n consumirse desde la librer\u00eda dbutils, si el valor es cargado correctamente aparece referenciado como <i>REDACTED<\/i>.<\/p>\n<pre><code class=\"language-python\">dbutils.secrets.get(scope = \"nombre_scope_databricks\", key = \"nombre_secreto\") <\/code><\/pre>\n<h3><strong>Conexiones on-premise<\/strong><\/h3>\n<p>Por \u00faltimo, indicar que es posible establecer una conexi\u00f3n on-premise para nuestro plano de datos en Azure, para ello es indispensable que este se encuentre alojado en nuestra propia red mediante VNET injection.<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"889\" height=\"323\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image3.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image3.png 889w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image3-300x109.png 300w, https:\/\/bluetab.net\/wp-content\/uploads\/2022\/02\/image3-768x279.png 768w\" sizes=\"(max-width: 889px) 100vw, 889px\"><figcaption>Arquitectura de Databricks en Azure (fuente: Databricks)<\/figcaption><\/figure>\n<p>Azure define como principal m\u00e9todo el uso de Transit Virtual Network para establecer esta conexi\u00f3n on-premise, siguiendo los siguientes pasos:<\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Crear un Network Gateway (VPN o ExpressRoute) entre la red de tr\u00e1nsito y on-premise, para ello deberemos crear tanto el Customer Gateway en el lado on-premise como el Virtual Gateway en el lado de Azure.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Deberemos establecer el peering entre el plano de datos y la red de tr\u00e1nsito. Una vez establecido, Azure Transit configura todas las rutas, sin embargo no se incluyen las de retorno hasta el plano de control para los clusters de Databricks, para ello se deber\u00e1n configurar las user-defined routes y asociarlas a las subredes del <i>plano de datos<\/i>.<\/li>\n<\/ol>\n<p>Otras soluciones alternativas tambi\u00e9n podr\u00edan emplearse mediante el uso de <i>Custom DNS<\/i> o el empleo de un <i>virtual appliance<\/i> o <i>firewalls.<\/i><\/p>\n<h2>Referencias<\/h2>\n<p>[1] Customer Managed VNET Databricks Guide. [<a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/databricks\/administration-guide\/cloud-configurations\/azure\/vnet-inject\">link<\/a>] (Enero 26, 2022)<\/p>\n<p>[2] Secure Cluster Connectivity. [<a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/databricks\/security\/secure-cluster-connectivity\">link<\/a>]&nbsp; (Enero 26, 2022)<\/p>\n<p>[3] Subnet Delegation. [<a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/virtual-network\/subnet-delegation-overview\">link<\/a>] (Enero 3, 2022)<\/p>\n<p>[4] Role-based access control [<a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/key-vault\/general\/rbac-guide?tabs=azure-cli\">link<\/a>] (Octubre 27, 2021)<\/p>\n<p>[5] Databricks secrets scopes [<a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/secret-scopes\">link<\/a>] (Enero 26, 2022)<\/p>\n<h6><strong>Navegaci\u00f3n<\/strong><\/h6>\n<p><a href=\"\/#glosario\">Glosario<\/a><\/p>\n<p><a href=\"\/#arquitectura\">Arquitectura<\/a><\/p>\n<p><a href=\"\/#planes\">Planes y tipos de carga de trabajo<\/a><\/p>\n<p><a href=\"\/#networking\">Networking<\/a><\/p>\n<p><a href=\"\/#identidad\">Identidad y Gesti\u00f3n de accesos<\/a><\/p>\n<p><a href=\"\/#ref\">Referencias<\/a><\/p>\n<p><a href=\"\/#autores\">Autores<\/a><\/p>\n<h5>\u00bfQuieres saber m\u00e1s de lo que ofrecemos y ver otros casos de \u00e9xito?<\/h5>\n<p><a href=\"\/\" role=\"button\"><br \/>\nDESCUBRE BLUETAB<br \/>\n<\/a><br \/>\nCompartir en twitter<br \/>\nCompartir en linkedin<\/p>\n<figure><a href=\"https:\/\/www.linkedin.com\/in\/francisco-linaje-024499175\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2021\/10\/Francisco-150x150.jpg\" alt=\"\" loading=\"lazy\"><\/a><\/figure>\n<h4><a href=\"https:\/\/www.linkedin.com\/in\/francisco-linaje-024499175\/\" target=\"_blank\" rel=\"noopener\">Francisco Linaje<\/a><\/h4>\n<p>AWS Solutions Architect<\/p>\n<figure><a href=\"https:\/\/www.linkedin.com\/in\/gabriel-gallardo-ruiz-9042a0212\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/10\/avatarP-bluetab.jpg-150x150.png\" alt=\"\" loading=\"lazy\"><\/a><\/figure>\n<h4><a href=\"https:\/\/www.linkedin.com\/in\/gabriel-gallardo-ruiz-9042a0212\/\" target=\"_blank\" rel=\"noopener\">Gabriel Gallardo Ruiz<\/a><\/h4>\n<p>Senior Data Architect<\/p>\n<p><b>SOLUCIONES, <\/b>SOMOS EXPERTOS<\/p>\n<p><a href=\"\/soluciones\/data-strategy\/\"><\/a><\/p>\n<p><a href=\"\/soluciones\/data-strategy\/\"><\/a><\/p>\n<p><a href=\"\/soluciones\/data-strategy\/\"><\/p>\n<h5>DATA STRATEGY<\/h5>\n<p><\/a><a href=\"\/soluciones\/data-strategy\/\"><\/a><a href=\"\/soluciones\/data-strategy\/\">\t\t\t\t\t\t<\/a><br \/>\n<a href=\"\/soluciones\/data-fabric\/\"><\/a><\/p>\n<p><a href=\"\/soluciones\/data-fabric\/\"><\/a><\/p>\n<p><a href=\"\/soluciones\/data-fabric\/\"><\/p>\n<h5>DATA FABRIC<\/h5>\n<p><\/a><a href=\"\/soluciones\/data-fabric\/\"><\/a><a href=\"\/soluciones\/data-fabric\/\">\t\t\t\t\t\t<\/a><br \/>\n<a href=\"\/soluciones\/augmented-analytics\/\"><\/a><\/p>\n<p><a href=\"\/soluciones\/augmented-analytics\/\"><\/a><\/p>\n<p><a href=\"\/soluciones\/augmented-analytics\/\"><\/p>\n<h5>AUGMENTED ANALYTICS<\/h5>\n<p><\/a><a href=\"\/soluciones\/augmented-analytics\/\"><\/a><a href=\"\/soluciones\/augmented-analytics\/\">\t\t\t\t\t\t<\/a><\/p>\n<p>Te puede interesar<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Databricks sobre Azure &#8211; Una perspectiva de arquitectura (parte 1) Compartir en twitter Compartir en linkedin Francisco Linaje AWS Solutions Architect Gabriel Gallardo Ruiz Senior Data Architect Databricks tiene como objetivo dotar de un entorno intuitivo al usuario no especializado para que pueda desarrollar las diferentes funciones en materia de ingenier\u00eda y ciencia de datos, [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":20801,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[7,36,8,9],"tags":[],"class_list":["post-13165","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-es","category-outstanding","category-practices","category-tech"],"acf":[],"jetpack_featured_media_url":"https:\/\/bluetab.net\/wp-content\/uploads\/2022\/03\/4.png","_links":{"self":[{"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/posts\/13165","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/comments?post=13165"}],"version-history":[{"count":0,"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/posts\/13165\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/media\/20801"}],"wp:attachment":[{"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/media?parent=13165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/categories?post=13165"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bluetab.net\/en\/wp-json\/wp\/v2\/tags?post=13165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}