Obtener Secrets desde Azure Key Vault

Que es Microsoft Azure Key Vault?

Es un servicio de administración alojado en la nube que permite a los usuarios cifrar claves y pequeños secretos mediante el uso de claves protegidas por módulos de seguridad de hardware (HSM). Los pequeños secretos son datos de menos de 10 KB, como contraseñas y archivos .PFX. Un HSM es una pieza de hardware segura y resistente a la manipulación que almacena claves criptográficas. Las claves también pueden importarse o generarse en HSM que han sido certificados con los estándares FIPS 140-2 nivel 2.

Como puedo incorporarlo en mis soluciones?

Imaginemos que tenemos el siguiente escenario contamos con diferentes apps que utilizan la misma cadena de conexion para el acceso a bases de datos y no queremos que la direccion IP ni las credenciales queden expuestas a cualquiera que tenga manejo del codigo fuente o acceso a el.

Podemos solucionar este problema almacenando nuestra cadena de conexion en un secret de nuestro Azure Key Vault.

Manos a la Obra!

Una vez allamos iniciado session en el portal procedemos a crear el Key Vault

  1. En el menú de Azure Portal o en la página principal, seleccionamos Crear un recurso.
  2. En el cuadro de búsqueda, escribimos Key Vault.
  3. En la lista de resultados, eligimos Key Vault.
  4. En la sección Key Vault, eligimos Crear.
  5. En la sección Crear Key Vault, proporcionamos la siguiente información:
    • Name: se requiere un nombre único. por ejemplo  nombredemiorganizacion-vault2.
    • Suscripción: Eligimos una suscripción.
    • En Grupo de recursos eligimo Crear nuevo y escriba un nombre para el grupo de recursos tambien podemos usar uno que ya teniamos previamente creado.
    • En el menú desplegable Ubicación, eligimos una ubicación.
    • Dejamos las restantes opciones con sus valores predeterminados para este ejercicio.
  6. Después de completar los pasos, seleccionamos Crear.

 propiedades a importantes a tomar en cuenta:

  • Nombre del almacén: en este ejemplo es  nombredemiorganizacion-vault2 .
  • URI de almacén: en este ejemplo es https://nombredemiorganizacion-vault2.vault.azure.net/. Las aplicaciones que utilizan el almacén a través de su API de REST deben usar este identificador URI.

Ojo: Hasta este momento, la cuenta de Azure con la que creamos el key vault es la única autorizada para realizar operaciones en este nuevo almacén.

Agregar un secreto a nuestro Key Vault

  1. En las páginas de propiedades de Key Vault, seleccionamos Secretos.
  2. Hacemos clic en Generar o Importar.
  3. En la pantalla Crear un secreto, eligimos los siguientes valores:
    • Opciones de carga: Manual.
    • Name: cadenaDeConexionDeProduccion.
    • Valor: Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword;
    • Para fines de ejemplo las opciones restantes las dejamos con sus valores predeterminados y  Hacemos clic en Crear.

Obtener la cadena de conexion desde el azure key vault usando asp.net core

En nuestro proyecto aspnet core ubicamos el archivo Program.cs y agregamos las siguientes linea de codigo:

var builtConfig = config.Build();
                    var tokenProvider = new AzureServiceTokenProvider();
                    var kvClient = new KeyVaultClient((authority, resource, scope) => tokenProvider.KeyVaultTokenCallback(authority, resource, scope));
                    config.AddAzureKeyVault(
                        $"https://{builtConfig["KeyVault:VaultName"]}.vault.azure.net/",
                        kvClient,
                        new DefaultKeyVaultSecretManager());

Luego ubicamos el archivo appsettings.json y agregamos las siguientes lineas:

 "KeyVault": {
    "VaultName": "nombredemiorganizacion-vault2"
  },

Esto para acceder a los valores que esten almacenados en nuestro baul de claves. Ya luego si queremos obtener el valor de nuestra cadena de conexion llamamos la siguiente linea de codigo:

 var cadenaDeConexionBaseDatosProduccion = Configuration["cadenaDeConexionDeProduccion"];

Esta nos devolvera el valor que esta almacenado en ese secreto de esa manera mantenemos las informaciones sensibles de nuestras soluciones protegidas y de una manera facil de administrar.

Para el desarrollo local debemos instalar el azure cli para que no nos lance un error a la hora de establecer la conexion con el key vault

Documentacion: https://docs.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-3.1

Espero que les sirva de ayuda. Keep coding!

Deja un comentario

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