Puesto que a día de hoy existen muchos problemas relacionados con la seguridad, en este tutorial abordaremos Azure Key Vault como solución para proteger nuestras contraseñas.

Desarrollaremos un proyecto ASP.NET Core Web Application desde el cual recuperaremos nuestra contraseña desde Azure para conectar a una base de datos.

Pero antes de comenzar a desarrollar nuestra solución conozcamos brevemente que es Key Vault.

Qué es Key vault?

Key Vault es un servicio que nos permite proteger las claves y otros secretos usados en nuestras aplicaciones y los servicios de la nube.

Este servicio nos aporta seguridad generando claves en HSM (gestión almacenamiento jerarquizado), y Microsoft procesará las claves en HSM con validación FIPS 140-2 de nivel 2 (hardware y firmware), por lo que para acceder a los datos se requiere autenticación basada en el cargo del usuario. También requiere la capacidad para detectar la intrusión física mediante sistemas de bloqueo físico o precintos de seguridad.

Comienzo Tutorial

En primer lugar, abriremos Azure Portal y nos dirigimos al apartado almacén de claves y agregaremos un nuevo almacén de claves en el menú superior.

Debemos asignar un grupo de recursos ya creado o crear uno nuevo, le daremos un nombre a nuestro servicio, seleccionaremos la región más adecuada.

Utilizaremos el plan de tarifas estándar y para finalizar antes de crear comprobaremos si en las directivas de acceso aparece nuestro usuario.

AzureCreateKeyVault
MenuSecrets

Una vez creado, vamos al recurso y en el menú izquierdo encontraremos el apartado Secretos en el cual pulsaremos.

En la ventana de secretos nos dirigiremos al menú superior, al apartado Agregar o importar.

Al crear nuestro secreto utilizaremos las como opciones de carga manual y añadiremos un nombre y secreto (contraseña/valor oculto) propios. Con respecto a las demás directivas trabajaremos con los valores por defecto.

CreacionSecreto

Una vez creado el secreto dentro de nuestro almacén de claves crearemos un proyecto ASP.NET Core en está ocasión la versión 3.1 con modelo vista controlador.

En primer lugar añadiremos los siguientes NuGets:

NuGets

Haremos click derecho sobre nuestro proyecto Add->Connected Service y en la nueva ventana seleccionaremos Secure Secrets with Azure Key Vault

AddKeyVault

En el desplegable Key Vault encontraremos la opción de crear uno nuevo y los almacenes ya creados: en nuestro caso seleccionaremos el creado anteriormente.

Cunado esta acción haya finalizado, en Program.cs reescribiremos el método CreateHostBuilder por el siguiente:

private static string GetKeyVaultEndpoint() => «https://<NOMBRE_ALMCEN_DE_CLAVES>.vault.azure.net/»;
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
var keyVaultEndpoint = GetKeyVaultEndpoint();
if (!string.IsNullOrEmpty(keyVaultEndpoint))
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
config.AddAzureKeyVault(keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
}
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup();
});

A contiuacion abra el controlador de Home:

Agregue la variable de configuración.

private static IConfiguration _configuration;

Agregue este constructor o reemplace el constructor existente por este: public IndexModel(IConfiguration configuration) { _configuration = configuration; }

Actualice el método OnGet. Actualice el valor del marcador que se muestra aquí con el nombre del secreto que creó en los comandos anteriores.

public void OnGet() { ViewData["Message"] = "My key val = " + _configuration["<YourSecretNameThatWasCreatedAbove>"]; }

Para confirmar el valor en tiempo de ejecución, agregue código para mostrar ViewData["Message"] al archivo .cshtml para mostrar el secreto en un mensaje.

<p>@ViewData["Message"]</p>

Puede ejecutar la aplicación localmente para comprobar que el secreto se obtiene correctamente desde la instancia de Key Vault.

Habiendo hecho la comprobación anterior y viendo que la comunicación es correcta recibiendo el valor de nuestro secreto, pasaremos a enlazar una base de datos añadiendo a appsetings.json su cadena de conexión sin la contraseña, la cual recuperaremos desde nuestro secreto a la hora de mandársela a nuestro contexto.

ContraseñaBBDD

Para finalizar crearemos un contexto, repositorio y mapearemos cualquier tabla de nuestra base datos y reescribimos con scafolding una vista para ver su contenido:

Contexto
Repository
Departamento
Controler

Autor/a: David Alpañes Peláez

Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin

Centro: Tajamar

Año académico: 2019-2020

Código / recursos utilizados / Otros datos de interés: Enlace a GitHub

LinkedIn: http://www.linkedin.com/in/davidalpanes

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.