Tutorial: Uso de referencias de Key Vault en una aplicación de ASP.NET Core

En este tutorial aprenderá a usar el servicio Azure App Configuration junto con Azure Key Vault. App Configuration y Key Vault son servicios complementarios que se usan de forma conjunta en la mayoría de las implementaciones de aplicaciones.

App Configuration ayuda a usar juntos los servicios, mediante la creación de claves que hacen referencia a valores almacenados en Key Vault. Cuando App Configuration crea estas claves, almacena los URI de los valores de Key Vault, en lugar de los propios valores.

La aplicación usa el proveedor de cliente de App Configuration para recuperar las referencias de Key Vault, tal como hace para cualquier otra clave almacenada en App Configuration. En este caso, los valores almacenados en App Configuration son los URI que hacen referencia a los valores de Key Vault. No son valores ni credenciales de Key Vault. Dado que el proveedor de cliente reconoce las claves como referencias de Key Vault, utiliza Key Vault para recuperar sus valores.

La aplicación es responsable de autenticarse correctamente en App Configuration y en Key Vault. Los dos servicios no se comunican directamente.

En este tutorial se muestra cómo se implementan las referencias de Key Vault en el código. Se basa en la aplicación web que se introdujo en los inicios rápidos. Antes de continuar, finalice primero el tutorial Creación de una aplicación ASP.NET Core con Azure App Configuration.

Para realizar los pasos de este tutorial, puede usar cualquier editor de código. Por ejemplo, Visual Studio Code es un editor de código multiplataforma que está disponible para los sistemas operativos Windows, macOS y Linux.

En este tutorial, aprenderá a:

  • Crear una clave de App Configuration que hace referencia a un valor almacenado en Key Vault.
  • Acceder al valor de esta clave desde una aplicación web de ASP.NET Core.

Requisitos previos

Antes de iniciar este tutorial, instale el SDK de .NET 6.0 o posterior.

Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.

Creación de un almacén

  1. Seleccione la opción Crear un recurso en la esquina superior izquierda de Azure Portal:

    Captura de pantalla que muestra la opción Crear un recurso de Azure Portal.

  2. En el cuadro de búsqueda, escriba Key Vault y seleccione Key Vault en la lista desplegable.

  3. En la lista de resultados, seleccione Key Vaults a la izquierda.

  4. En Key Vaults, seleccione Agregar.

  5. En la sección Crear almacén de claves, a la derecha, proporcione la siguiente información:

    • Seleccione Suscripción para elegir una suscripción.
    • En Grupo de recursos, escriba el nombre de un grupo de recursos existente o seleccione Crear nuevo y escriba un nombre de grupo de recursos.
    • En Nombre del almacén de claves se requiere un nombre único.
    • En la lista desplegable Región, elija una ubicación.
  6. Deje las demás opciones de Crear almacén de claves con sus valores predeterminados.

  7. Haga clic en Revisar + crear.

  8. El sistema validará y mostrará los datos que ha escrito. Haga clic en Crear.

En este momento, su cuenta de Azure es la única autorizada para acceder a este nuevo almacén.

Incorporación de un secreto a Key Vault

Para agregar un secreto al almacén, debe llevar a cabo algunos pasos adicionales. En este caso, agregará un mensaje que podrá usar para probar la recuperación de Key Vault. El mensaje se denominará Message y en él se almacenará el valor "Hello from Key Vault".

  1. En las páginas de propiedades de Key Vault, seleccione Secretos.
  2. Seleccione Generar o importar.
  3. En el panel Crear un secreto, escriba los valores siguientes:
    • Opciones de carga: escriba Manual.
    • Name: escriba Message.
    • Valor: escriba Hello from Key Vault.
  4. Deje las demás propiedades de Crear un secreto con sus valores predeterminados.
  5. Seleccione Crear.

Incorporación de una referencia de Key Vault a App Configuration

  1. Inicie sesión en Azure Portal. Seleccione Todos los recursos y después seleccione la instancia de almacén de App Configuration que creó en el inicio rápido.

  2. Seleccione Explorador de configuración.

  3. Seleccione + Crear>Referencia del almacén de claves y, a continuación, especifique los valores siguientes:

    • Clave: seleccione TestApp:Settings:KeyVaultMessage.
    • Etiqueta: deje este valor en blanco.
    • Suscripción, Grupo de recursos y Key Vault: escriba los valores correspondientes a los del almacén de claves que creó en la sección anterior.
    • Secreto: seleccione el secreto llamado Message que creó en la sección anterior.

Captura de pantalla de la creación de un formulario de referencia de Key Vault

Actualización del código para usar una referencia de Key Vault

  1. Para agregar una referencia a los paquetes de NuGet necesarios, ejecute el siguiente comando:

    dotnet add package Azure.Identity
    
  2. Abra Program.cs y agregue referencias a los siguientes paquetes necesarios:

    using Azure.Identity;
    
  3. Use App Configuration llamando al método AddAzureAppConfiguration. Incluya la opción ConfigureKeyVault y pase las credenciales correctas a Key Vault usando el método SetCredential.

    var builder = WebApplication.CreateBuilder(args);
    
    // Retrieve the connection string
    string connectionString = builder.Configuration.GetConnectionString("AppConfig");
    
    // Load configuration from Azure App Configuration
    builder.Configuration.AddAzureAppConfiguration(options =>
    {
        options.Connect(connectionString);
    
        options.ConfigureKeyVault(keyVaultOptions =>
        {
            keyVaultOptions.SetCredential(new DefaultAzureCredential());
        });
    });
    

    Sugerencia

    Si tiene varias instancias de Key Vault, se usará la misma credencial para todas ellas. Si las instancias de Key Vault requieren credenciales diferentes, puede establecerlas mediante los métodos Register o SetSecretResolver de la clase AzureAppConfigurationKeyVaultOptions.

  4. Al inicializar la conexión a App Configuration, configura la conexión a Key Vault llamando al método ConfigureKeyVault. Después de la inicialización, puede acceder a los valores de las referencias de Key Vault de la misma manera que accede a los valores de las claves normales de App Configuration.

    Para ver este proceso en acción, abra Index.cshtml en la carpeta Views>Home. Reemplace su contenido por el código siguiente:

    @page
    @using Microsoft.Extensions.Configuration
    @inject IConfiguration Configuration
    
    <style>
        body {
            background-color: @Configuration["TestApp:Settings:BackgroundColor"]
        }
        h1 {
            color: @Configuration["TestApp:Settings:FontColor"];
            font-size: @Configuration["TestApp:Settings:FontSize"]px;
        }
    </style>
    
    <h1>@Configuration["TestApp:Settings:Message"]
        and @Configuration["TestApp:Settings:KeyVaultMessage"]</h1>
    

    Puede acceder al valor de la referencia de Key Vault TestApp:Settings:KeyVaultMessage de la misma forma que al valor de configuración TestApp:Settings:Message.

Concesión a la aplicación de acceso a Key Vault

Azure App Configuration no accederá al almacén de claves. La aplicación leerá directamente del almacén de claves, por lo que tendrá que conceder a la aplicación acceso a los secretos del almacén de claves. De este modo, el secreto siempre permanece con la aplicación. El acceso se puede conceder mediante una directiva de acceso de Key Vault o el control de acceso basado en rol de Azure.

En el código anterior se usa DefaultAzureCredential. Se trata de una credencial de token agregada que prueba de forma automática varios tipos de credenciales, como EnvironmentCredential, ManagedIdentityCredential, SharedTokenCacheCredential y VisualStudioCredential. Para obtener más información, vea DefaultAzureCredential (Clase). Puede reemplazar DefaultAzureCredential por cualquier tipo de credencial explícitamente. Pero el uso de DefaultAzureCredential permite tener el mismo código que se ejecuta en entornos locales y de Azure. Por ejemplo, concede a la credencial propia acceso al almacén de claves. DefaultAzureCredential vuelve automáticamente a SharedTokenCacheCredential o VisualStudioCredential cuando se usa Visual Studio para el desarrollo local.

Como alternativa, puede establecer las variables de entorno AZURE_TENANT_ID, AZURE_CLIENT_ID y AZURE_CLIENT_SECRET, y DefaultAzureCredential usará el secreto de cliente que tiene por medio de EnvironmentCredential para autenticarse con el almacén de claves. Después de implementar la aplicación en un servicio de Azure con la identidad administrada habilitada, como Azure App Service, Azure Kubernetes Service o Azure Container Instance, conceda a la identidad administrada del servicio de Azure permiso para acceder al almacén de claves. DefaultAzureCredential usa automáticamente ManagedIdentityCredential cuando la aplicación se ejecuta en Azure. Puede usar la misma identidad administrada para autenticarse con App Configuration y Key Vault. Para obtener más información, vea Uso de identidades administradas para acceder a App Configuration.

Compilación y ejecución de la aplicación en un entorno local

  1. Para compilar la aplicación mediante la CLI de .NET, ejecute el siguiente comando en el shell de comandos:

    dotnet build
    
  2. Una vez finalizada la compilación, use el siguiente comando para ejecutar la aplicación web localmente:

    dotnet run
    
  3. Inicie una ventana del explorador y vaya a http://localhost:5000, que es la dirección URL predeterminada de la aplicación web hospedada localmente.

    Inicio de la aplicación local del inicio rápido

Limpieza de recursos

Si no quiere seguir usando los recursos que se han creado en este artículo, elimine el grupo de recursos que creó aquí para evitar cargos.

Importante

La eliminación de un grupo de recursos es irreversible. El grupo de recursos y todos los recursos que contiene se eliminan permanentemente. Asegúrese de que no elimina por accidente el grupo de recursos o los recursos equivocados. Si creó los recursos para este artículo en un grupo de recursos que contenga los recursos que desee conservar, elimine cada recurso de forma individual desde su panel respectivo, en lugar de eliminar el grupo de recursos.

  1. Inicie sesión en Azure Portal y después seleccione Grupos de recursos.
  2. En el cuadro de texto Filtrar por nombre, escriba el nombre del grupo de recursos.
  3. En la lista resultados, seleccione el nombre del grupo de recursos para ver la información general.
  4. Seleccione Eliminar grupo de recursos.
  5. Se le pedirá que confirme la eliminación del grupo de recursos. Escriba el nombre del grupo de recursos para confirmar y seleccione Eliminar.

Transcurridos unos instantes, el grupo de recursos y todos sus recursos se eliminan.

Pasos siguientes

En este tutorial ha creado una clave de App Configuration que hace referencia a un secreto almacenado en Key Vault. Para obtener información sobre cómo volver a cargar automáticamente secretos y certificados desde Key Vault, continúe con el siguiente tutorial:

Para obtener información sobre cómo usar Identidad administrada para simplificar el acceso a App Configuration y Key Vault, consulte el siguiente tutorial: