Comúnmente las organizaciones clasifican cierta información como sensible, y hablando técnicamente, las credenciales a los sistemas o bases de datos suelen estar clasificados como tal. Por ello, este tipo de información no puede publicarse de manera explicita ni divulgada en ningún lugar, esto incluye los notebooks. Uno de los métodos de asegurar esta información, es a través del uso de Azure Key Vault en notebooks de Azure Databricks.
Pero ¿que es Azure Key Vault?, según la documentación oficial:
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.
https://docs.microsoft.com/es-es/azure/key-vault/general/basic-concepts
En este artículo
Crear un secreto en Azure Key Vault
Para crear un secreto, debemos ubicarnos en el servicio de Key Vault que tengamos configurado en Azure, y en él, debemos dar clic en la opción “Secrets” que se ubica en el panel izquierdo, luego clic en “Generate/Import”.
Esto nos abrirá un nuevo formulario en el cual especificaremos:
- Name: el nombre de nuestro secreto (básicamente será nuestro identificador)
- Value: el valor que queremos proteger, en este caso será una contraseña, pero podría ser todo un string de conexión, o cualquier otro valor que no queramos divulgar.
- Content type: es una etiqueta que daremos al secreto, en este caso lo utilizaré para especificar que el valor contenido en el secreto es un password/contraseña.
- Set activation date: es la fecha a partir de la cual estará vigente este secreto, antes de esa fecha no será posible su uso. Si se inhabilita, este será vigente a partir del momento de creación del secreto.
- Set expiration date: es la fecha de caducidad del secreto, es decir la fecha máxima hasta la que podrá ser usado este secreto. Sirve en ocasiones que queremos dar acceso temporal a un sistema, pues no será útil luego de fecha establecida. Si se deja inhabilitado, el secreto permanecerá vigente hasta su eliminación o inhabilitación manual.
- Enabled: establece el estado actual del secreto.
Luego de configurado y guardado, podremos ver nuestro secreto listado en Key Vault.
Crear política de acceso en Azure Key Vault
En este paso daremos permisos a Azure Databricks para listar y obtener secretos almacenados en Azure key Vault. Para lograrlo necesitamos conocer el Object ID del servicio de Databricks.
Para conseguir el Object ID de Databricks debemos ir a Azure Active Directory (AAD), allí dar clic en “Enterprise applications” en el menú izquierdo.
Aqui se debe buscar la aplicación “AzureDatabricks” teniendo aplicado un filtro sobre todos los tipos de aplicación.
Copia y asegura el Object ID de AzureDatabricks, ya que lo necesitaremos en el siguiente paso.
Ahora al acceder a las políticas de acceso del Key Vault, da clic en “Add Access Policy”
Se requiere ceder permisos para listar y obtener secretos, para ello, en “Secret permissions” se debe seleccionar “Get” y “List”
En principal, seleccionaremos el Service Principal que tendrá estos permisos, se debe buscar usando el object id de Azure Databricks obtenido en el paso anterior
Finalmente, no olvides dar clic en “Save”.
Configurar scope en Azure Databricks
Ahora, ubicados en el home de nuestro workspace de Azure Databricks, adicionaremos lo siguiente a la URL: “#secrets/createScope”
Esto abrirá un nuevo formulario para la creación del secret scope, en este debemos agregar los datos de nuestro servicio de Key Vault como se muestra a continuación:
Los valores para el diligenciamiento los encontrarás en las propiedades del Key Vault que utilizarás en tu Azure Databricks workspace
Con ello finaliza la configuración de Azure Key Vault en Azure Databricks, solo nos queda ver su llamado desde notebooks.
Obtener secretos desde notebooks de Azure Databricks
Haciendo uso de dbutils, se podrá listar los secretos que se guardan en el Key Vault.
Para obtener el valor de un secreto especifico, se logra utilizando la siguiente línea de código:
Al consultarlo veremos que nos arroja el valor “[REDACTED]”, el cual obedece a un metodo de prevención ante una posible divulgación del valor que contiene un secreto. Para saber más da clic aquí.
A pesar de lo anterior, podemos utilizar el valor del sercreto como si de cualquier texto se tratase, y lo podemos ver en el siguiente ejemplo donde utilizamos un secreto para establecer conexión con una base de datos SQL en Azure.
Conclusiones
Es importane recalcar el uso de Key Vault o herramientas similares con el fin de mejorar aspectos de seguridad en nuestras arquitecturas, pues estas nos permiten no divulgar el valor real de un secreto en nungún momento. Así mismo, la actualización de una credencial se centraliza en el secreto del Key Vault, el cual propagará el cambio a los demás desarrollos dependientes.