¿Alguna vez has montado un Data Lake, con todo funcionando… hasta darte cuenta de que tus credenciales estaban expuestas en el código? 😬
Hace poco necesité montar contenedores de Azure Data Lake dentro de un notebook de Databricks — una tarea aparentemente simple. Pero al revisar el código con atención, noté que las claves de acceso estaban en texto plano.
Ahí entendí: no basta con que el código funcione, tiene que funcionar de forma segura.
Y lo mejor: existe una manera de hacerlo sin necesitar el plan Premium de Azure, usando solo Secret Scopes creados con la CLI de Databricks.
En este artículo comparto el paso a paso completo y lo que aprendí sobre cómo proteger credenciales en Databricks — un proceso simple, pero que puede evitar grandes dolores de cabeza en el futuro.
Por qué es importante
En Ingeniería de Datos, durante las etapas de desarrollo es común guardar claves, tokens o credenciales directamente en el código. ¿Funciona? Funciona. Pero también abre enormes brechas de seguridad: cualquier persona con acceso al notebook puede ver datos sensibles.
Eso fue justamente lo que me motivó a buscar una solución que fuera: ✅ Segura ✅ Simple de implementar ✅ Compatible con el plan Standard de Azure
El resultado fue la configuración con Secret Scopes vía CLI, que comparto a continuación.
Entendiendo los componentes principales
Antes de ponerte con el código, conviene entender el papel de cada parte de esta configuración:
- Azure Data Lake → el repositorio central de datos, con contenedores como bronze, silver y gold.
- Storage Account → la cuenta de almacenamiento donde se alojan los contenedores.
- Databricks CLI → herramienta de línea de comandos que permite automatizar acciones en el workspace (crear scopes, tokens, jobs, etc.).
- Secret Scope → una “bóveda interna” de Databricks usada para guardar contraseñas, claves o tokens de forma segura.
¿Y qué es Azure Key Vault?
Azure Key Vault es el servicio de almacenamiento seguro de secretos de Microsoft. Guarda claves, contraseñas, certificados y tokens de forma centralizada y cifrada, con control de acceso y auditoría integrados.
En otras palabras: es la bóveda oficial de Azure — el lugar adecuado para guardar cualquier credencial sensible.
Crear un Key Vault es simple:
- En el portal de Azure, ve a Crear un recurso → Seguridad → Key Vault
- Elige el Resource Group y el nombre de la bóveda
- Define la región y las políticas de acceso
- Después, agrega tus secretos en la sección Secrets
💡 Consejo: en Databricks, puedes integrar Key Vault directamente creando un Key Vault-backed Secret Scope — lo que permite acceder a los secretos automáticamente, sin almacenarlos en Databricks.
En este artículo, sin embargo, el foco es el Databricks-backed Secret Scope, que funciona incluso sin el plan Premium.
Paso a paso: acceso seguro a Azure Data Lake en Databricks
Paso 1: instalar y configurar la CLI de Databricks
En tu terminal de Windows, instala y configura la CLI de Databricks:
pip install databricks-cli
databricks configure --token
# Host: https://<tu-instancia>.azuredatabricks.net
# Token: <tu access token>
Cómo obtener el Host y el Token
- Accede a tu workspace de Azure Databricks
- En la esquina superior derecha, haz clic en tu perfil (tu nombre) → User Settings
- Ve a la pestaña Access Tokens
- Haz clic en Generate New Token, define una vigencia (ej.: 90 días) y copia el token
- El Host es simplemente la URL de tu workspace:
https://<tu-workspace>.azuredatabricks.net
- Pega esta información cuando la CLI te la solicite
Paso 2: crear el Secret Scope local
Cuando el plan Premium está desactivado, es necesario usar el parámetro --initial-manage-principal "users" para permitir la creación del scope local.
databricks secrets create-scope \
--scope datalake-scope \
--initial-manage-principal "users"
Paso 3: agregar los secretos manualmente
# Nombre de la Storage Account
databricks secrets put --scope datalake-scope --key STORAGE-NAME
# Clave de acceso de la Storage
databricks secrets put --scope datalake-scope --key STORAGE-KEY
Estos comandos abrirán un editor en la terminal para que escribas los valores de forma segura.
Paso 4: montar los contenedores en el notebook
Función reutilizable para montar múltiples contenedores (en este ejemplo, las capas bronze, silver y gold):
def mount_container(containerName):
scope_name = "datalake-scope"
storageAccountName = dbutils.secrets.get(scope=scope_name, key="STORAGE-NAME")
storageAccountAccessKey = dbutils.secrets.get(scope=scope_name, key="STORAGE-KEY")
blobContainerName = containerName
mountPoint = "/mnt/" + blobContainerName
if not any(m.mountPoint == mountPoint for m in dbutils.fs.mounts()):
try:
dbutils.fs.mount(
source = f"wasbs://{blobContainerName}@{storageAccountName}.blob.core.windows.net",
mount_point = mountPoint,
extra_configs = {
f"fs.azure.account.key.{storageAccountName}.blob.core.windows.net": storageAccountAccessKey
}
)
print(f"✅ Montaje realizado con éxito: {blobContainerName}")
except Exception as e:
print("❌ Error al montar:", e)
else:
print(f"ℹ️ Contenedor ya montado: {blobContainerName}")
containers = ["bronze", "silver", "gold"]
for c in containers:
mount_container(c)
Paso 5: probar el montaje del contenedor bronze
mount_path = "/mnt/bronze"
if any(m.mountPoint == mount_path for m in dbutils.fs.mounts()):
print("✅ El contenedor 'bronze' está montado.")
else:
print("❌ El contenedor 'bronze' no está montado.")
Lecciones aprendidas
- 💡 1. Evita exponer claves directamente en el código. Usa Secret Scopes o, en producción, Azure Key Vault.
- 💡 2. Monta solo lo necesario. Menos montajes = menos riesgos.
- 💡 3. Evita logs con información sensible. Un simple
print()puede revelar más de lo que debería.
Conclusión
Aunque montar un Data Lake pueda parecer simple, hacerlo de forma segura transforma por completo la confiabilidad del entorno. Pequeñas decisiones, como mover una clave a una bóveda, pueden marcar toda la diferencia.
Y lo mejor: puedes implementar todo esto en pocos minutos, con las herramientas que ya usas a diario.
¿Te quedó alguna duda? Ponte en contacto y la resolvemos 😉