Proteger cadenas de conexión y credenciales con Azure Key Vault

Uno de los puntos más importantes a nivel de seguridad de tu aplicación es qué hacer con todas las credenciales y cadenas de conexión que guardamos habitualmente en archivos de configuración planos, bases de datos, etcétera. Para ello, Microsoft Azure proporciona un servicio llamado Azure Key Vault que proporciona una gestión sobre secretos, genera claves, además de gestionar políticas de acceso y  tener un histórico de auditoría. En este artículo te voy a mostrar la forma más sencilla de integrar tu aplicación con Azure Key Vault.

Lo primero que necesitas es tener una cuenta del servicio en tu suscripción. Para ello haz clic en + Create a resource y busca Azure Key Vault.

Crear un recurso Azure Key Vault
Crear un recurso Azure Key Vault

Para la creación necesitarás un nombre, un grupo de recursos y una localización. El resto de configuraciones, (el plan, access policies y el acceso a todas las redes) las he dejado como vienen por defecto.

Create key vault
Create key vault

Para que todo esto tenga sentido 🙂 , añade algunos secretos a tu nuevo Azure Key Vault, que serán recuperados desde tu aplicación. Para este ejemplo voy a añadir los valores que eran necesarios para el ejemplo del post anterior de enviar y recibir SMS con Twilio desde Azure Functions. En mi caso son todas aquellas que figuraban en el archivo local.settings.json. Para darlas de alta basta con acceder al apartado Secrets de Azure Key Vault y hacer clic en el botón Generate/Import 

Azure Key Vault - Create a secret
Azure Key Vault – Crear un secreto

Una vez que tienes todos tus secretos dados de alta, falta dar acceso a tu aplicación a estos secretos. Accede a tu Azure Function y en el apartado Platform features haz clic en la sección Identity.

Azure Function - Platform Features - Identity
Azure Function – Platform Features – Identity

Pon el status a ON y confirma el mensaje.

Enable system assigned managed identity
Enable system assigned managed identity

Accede de nuevo a tu Azure Key Vault y crea una política que te permita únicamente recuperar secretos para esta aplicación a través de Access Policies > Add new con los siguientes campos:

Azure Key Vault - Añadir una nueva política de acceso
Azure Key Vault – Añadir una nueva política de acceso

Ya tienes todo configurado para poder recuperar tus credenciales y cadenas de conexión desde tu aplicación. ¿Pero cómo las recupero? Desde hace poco está en preview este sistema que te permite recuperarlas sin tener que tocar nada de tu código. Accede al App Settings de la función y como valor de tus claves utiliza la siguiente sintaxis: 
@Microsoft.KeyVault({referenceString}) donde referenceString se trata de la Uri del secret que puedes localizarla dentro de la secret y se llama Secret identifier.

Azure Function - Secret Identifier
Azure Function – Secret Identifier

El resultado sería parecido al siguiente:  

@Microsoft.KeyVault(SecretUri=https://returngiskeys.vault.azure.net/secrets/TWILIO-TOKEN/b90c8c3eea4948b1a091cb66d7574a0f)

De este modo, tus App Settings debería de quedar de la siguiente manera:

Azure Function - App Settings con referencias a Azure Key Vault

A partir de este momento ya tendrás todas tus claves seguras dentro de Azure Key Vault.

¡Saludos!