Generalmente, las organizaciones tienen políticas de seguridad de cumplimiento obligatorio impuesto por un tercero, y otras adoptadas de manera voluntaria para asegurar la confidencialidad y evitar fugas de información. Por ello, siempre se nos pide aplicar estas políticas en los sistemas administrados, como en este caso, para la integración de datos entre una base de datos y un integrador.
Azure Data Factory es el integrador más conocido de la nube de Microsoft, quizá por su rápida curva de aprendizaje ya que no se requiere conocer un lenguaje como Python para desarrollar procesos. Así mismo, Azure SQL Database es la base de datos más conocida y utilizada en esta nube. Así que en este articulo veremos como comunicar estos dos componentes de una arquitectura de datos a través de un private endpoint.
En este articulo
¿Qué es un private endpoint?
Un punto de conexión privado es una interfaz de red que usa una dirección IP privada de la red virtual. Esta interfaz de red le conecta de forma privada y segura a un servicio con la tecnología de Azure Private Link. Al habilitar un punto de conexión privado, incorpora el servicio a la red virtual.
https://docs.microsoft.com/en-us/azure/private-link/private-endpoint-overview
En otras palabras, cuando utilizamos un private link no se utiliza la IP pública del servicio, sino un entorno privado habilitado que habilita esta comunicación entre los servicios.
Situación actual
Se cuenta con una instancia de Azure Data Factory llamado “adf-98”, y un Azure SQL Server llamado “server-98” que hospeda una Azure SQL Database serverless llamada “database-98”.
Azure SQL Server
El acceso publico a la base de datos se encuentra habilitado, así como el acceso de los servicios de Azure, esto incluye Azure Data Factory; no se cuenta con reglas de firewall que habilite la comunicación con una IP especifica.
Tampoco se tiene configurado ningún private endpoint, como se puede ver a continuación:
Azure Data Factory (ADF)
En este servicio, contamos con la configuración de un linked service que conecta nuestro ADF con la base de datos “database-98”, utilizando el Integration runtime (IR) llamado “AutoResolveIntegrationRuntime”, el cual viene por defecto en cualquier instancia creada de ADF.
Al realizar la prueba de conexión de este IR, se obtiene un resultado satisfactorio.
Cambio de politicas sobre Azure SQL Server
En este paso se deshabilitara la comunicación abierta sobre el servidor de base de datos, lo que causará el fallo del linked service configurado sobre ADF.
Aplicando las nuevas politicas sobre el servidor SQL
Inicialmente, se deshabilita la comunicación abierta entre el servidor de base de datos y otros servicios de Azure, luego se habilita la opción de denegar acceso desde redes públicas hacia la base de datos.
Pruebas del impacto sobre ADF
Dado este cambio, al probar el linked service previamente configurado sobre ADF para conectar con la base de datos “database-98” que se hospeda sobre el servidor “server-98”, se obtiene un error de comunicación.
El error pide validar si las reglas del firewall de la base de datos están permitiendo el acceso por parte de este integration runtime; también indica que la conexión fue denegada por que la base de datos tiene habilitada la opción de denegación de accesos desde redes públicas.
Configurando un private endpoint entre Azure Data Factory a una Azure SQL Database
Para solucionar el error de conexión entre ADF y Azure SQL Database, debemos crear un nuevo integration runtime que permita la utilización de una VNet a través de la cual se comunicarán los servicios. Luego se debe configurar un private endpoint entre ambos servicios.
Crear integration runtime para VNet en Azure Data Factory
- Sobre el portal de ADF, nos dirigimos al icono de administración que se encuentra a mano izquierda en forma de caja de herramientas
- En el listado de opciones que aparece a mano izquierda, seleccionamos “Integration runtime”
- Damos clic sobre el botón “+ New”
- Seleccionar el tipo “Azure, Self-Hosted”
- Seleccionar el entorno “Azure”
- Asignar un nombre al IR en el campo “Name”
- Habilitar la opción “Virtual network configuration”
- Seleccionar la región de preferencia
- Clic en el botón “Create”
Podrán pasar hasta 15 minutos para que el nuevo integration runtime quede listo para su uso.
Configurar private endpoint entre ADF y Azure SQL Server
- Sobre el portal de ADF, nos dirigimos al icono de administración que se encuentra a mano izquierda en forma de caja de herramientas
- En el listado de opciones que aparece a mano izquierda, seleccionamos “Managed private endpoints”
- Damos clic sobre el botón “+ New”
- Seleccionar el servicio “Azure SQL Database”
- Clic en “Continue”
- Asignar un nombre al private endpoint en el campo “Name”
- Seleccionamos la suscripción donde se encuentra el servicio de base de datos
- Seleccionamos el nombre del servidor
- Clic en el botón “Create”
Notará que se ha creado el private endpoint, pero se encuentra en estado de aprobación pendiente.
Aprobar la conexión privada en Azure SQL Server
Ahora, sobre el servicio de Azure SQL Server, sobre la opción de “Private endpoint connections” aparecerá una nueva petición de conexión, la cual se encuentra en estado pendiente.
Para aprobar, clic sobre el check box que se encuentra al lado izquierdo de la petición, luego clic “Approve” que se encuentra en la parte superior. Esto nos mostrará un prompt solicitando un mensaje de aprobación, se puede dejar vacío y dar clic en “Yes”.
Esta aprobación tardará unos minutos antes de ser detectada por la configuración de Azure Data Factory; sin embargo al final, si vemos el Private Endpoint sobre ADF veremos que el estado de aprobación es “Approved”
Pruebas finales de conexión en ADF
Ahora, solo es cuestión de modificar el linked service, seleccionando el nuevo integration runtime creado con conexión sobre VNet, así se obtendrá una conexión exitosa.
Conclusiones
Al aplicar las políticas aplicadas sobre el servidor de base de datos, este quedará inaccesible desde cualquier IP, incluso será imposible acceder utilizando el “Query editor” integrado del portal de Azure.
La comunicación segura sobre redes virtuales es posible implementando configuraciones y políticas correctamente sobre los servicios.
Finalmente, recomiendo ver el siguiente articulo, en el cual se demuestra como ocultar datos sensibles en las bases de datos de Azure SQL.