[Fabric] Protegé credenciales en Notebooks con Azure KeyVault

Ciertamente, cuando usamos notebooks, no todo es transformación y limpieza del contenido de nuestro lakehouse. En distintas oportunidades se nos presenta la opción de utilizarlos para integrar datos. Los Notebooks nos pueden ayudar a conectarnos a APIs en nube u otros entornos cloud directamente usando código.

Para que esta opción sea viable, necesitamos evitar exponer las credenciales o claves del origen de datos usadas en el código. Sino imaginen que cualquier persona con acceso al código (ya sea en Fabric o en el repositorio), podría obtener una key de acceso a una API. Para evitar esto, vamos a utilizar un servicio de Azure que ya existe hace tiempo, Azure KeyVaults.

¿Qué es el servicio de Azure Key Vaults?

En palabras Microsoft "Azure Key Vault es un servicio en la nube para el almacenamiento de los secretos y el acceso a estos de forma segura. Un secreto es todo aquello cuyo acceso desea controlar de forma estricta, como las claves API, las contraseñas, los certificados o las claves criptográficas."

Si bien el servicio varias operaciones, nosotros nos quedaremos con la idea que nos permite ingresar una clave o contraseña a encapsular. Solo usuarios con permiso de lectura de claves al servicio podrá utilizar el encapsulado. De ese modo garantizamos que únicamente usuarios aprobados para usarlo, lo usen.

Veamos como crear este secreto antes de usarlo en un Fabric Notebook.

La creación del servicio es bastante simple, basta seleccionar suscripción + grupo de recursos, nombre, region y plan:

Como mencioné antes, el servicio cuenta con muchas más cosas de las que usaremos nosotros. Ahora nos vamos a concentrar en "Secretos" que es lo que nos interesa.

Aqui por ejemplo ya contamos con tres secretos que usaremos para conectar a la PowerBi Rest API. Guardamos secreto para el tenantid, appid y secretvalue de nuestra app registrada en Azure.

Veamos como generar uno nuevo. Es tan simple como darle un nombre y delimitar lo que queremos encapsular. También podemos delimitarlo como algo temporal:

De ese modo podemos crear un nuevo secreto para nuestro almacén de claves. ¿Qué sigue? permitir la lectura a quien vaya a utilizarlo.

Los recursos de azure se manejan con permisos RBAC (role-based access control). Éstos los encontramos en el "Access Control (IAM)". Podemos abrir nuestro menú de permisos y agregar el que lleva el nombre de "Key Vault Secrets User". La cuenta de EntraID con ese permiso, podrá llamar por código a nuestro secreto almacenado aquí.

Este proceso es muy importante. Imaginen que con esto podríamos dar permisos a un desarrollador para construir un proceso sin saber nunca las credenciales de origen.

¿Cómo llamarlo desde Fabric?

Para utilizar este servicio desde Fabric Notebook usando python, vamos a nutrirnos de la librería de Microsoft que tiene muchas facilidades de interacción. Pueden leer más detalles aqui: https://learn.microsoft.com/en-us/fabric/data-engineering/microsoft-spark-utilities

Dentro de nuestro notebook vamos a comenzar importando SimplePBI para conectarme a la Power Bi Rest API. Luego importaremos las librerías necesarias. El foco está en nuestra tercera celda. Aqui podremos apreciar como llamar el secreto almacenado recientemente:

Utilizamos el método getSecret que necesita dos parámetros. El primero es "Vault URI" que podemos encontrarlo en el Overview de nuestro recurso en el portal de Azure. El segundo es el nombre que le dimos a nuestro secreto.

mssparkutils.credentials.getSecret('https://casa.vault.azure.net/','TenantId')

De ese modo almacenamos en variables nuestro resultado y podemos continuar la autenticación de la API en las siguientes filas que crea un token y pide ver el top 5 de workspaces. Recordemos que aquí buscamos seguridad, no solo de exposición de contraseña en código sino de visualización del contenido del secreto. Si el desarrollador intenta leer la variable se encontrará con una limitante:

NOTA: ésta tercera celda pidiendo el secreto solo puede ser ejecutada por una cuenta logueada en Fabric con permisos "Key Vault Secrets User" en nuestro Key Vault. Sino fallará por prohibición de acceso al secreto.

Espero que esto les sea de utilidad para poner automatizar flujos de manera más segura usando Fabric Notebooks.