Inicio rápido: Biblioteca cliente de claves de Azure Key Vault para .NET

Comience a trabajar con la biblioteca cliente de Azure Key Vault para .NET. Azure Key Vault es un servicio en la nube que ofrece el almacenamiento seguro de las claves criptográficas. Puede almacenar de forma segura claves criptográficas, contraseñas, certificados y otros secretos. Las instancias de Azure Key Vault se pueden crear y administrar a través de Azure Portal. En este inicio rápido, aprenderá a crear, recuperar y eliminar secretos de una instancia de Azure Key Vault mediante la biblioteca cliente de claves de .NET.

Recursos de la biblioteca cliente de claves de Key Vault:

Documentación de referencia de la API | Código fuente de la biblioteca | Paquete (NuGet)

Para más información sobre Key Vault y las claves, consulte:

Requisitos previos

En este inicio rápido se usa dotnet y la CLI de Azure.

Configurar

En este inicio rápido se usa la biblioteca de identidades de Azure con la CLI de Azure para autenticar al usuario en los servicios de Azure. Los desarrolladores también pueden usar Visual Studio o Visual Studio Code para autenticar sus llamadas. Para más información, consulte Autenticación del cliente mediante la biblioteca cliente Azure Identity.

Inicio de sesión en Azure

  1. Ejecute el comando login.

    az login
    

    Si la CLI puede abrir el explorador predeterminado, lo hará y cargará una página de inicio de sesión de Azure.

    En caso contrario, abra una página del explorador en https://aka.ms/devicelogin y escriba el código de autorización que se muestra en el terminal.

  2. Inicie sesión con las credenciales de su cuenta en el explorador.

Concesión de acceso al almacén de claves

Para conceder permisos de aplicación al almacén de claves a través del control de acceso basado en rol (RBAC), asigne un rol mediante el comando de la CLI de Azure crear la asignación de roles.

az role assignment create --role "Key Vault Secrets User" --assignee "<app-id>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"

Reemplace <app-id>, <suscripción-id>, <resource-group-name> y <your-unique-keyvault-name> por los valores reales. <app-id> es el identificador de aplicación (cliente) de la aplicación registrada en Azure AD.

Creación de una aplicación de consola de .NET

  1. En un shell de comandos, ejecute el siguiente comando para crear un proyecto llamado key-vault-console-app:

    dotnet new console --name key-vault-console-app
    
  2. Cambie al directorio key-vault-console-app recién creado y ejecute el comando siguiente para compilar el proyecto:

    dotnet build
    

    La salida de la compilación no debe contener advertencias ni errores.

    Build succeeded.
     0 Warning(s)
     0 Error(s)
    

Instalación de los paquetes

En el shell de comandos, instale la biblioteca cliente de claves de Azure Key Vault para .NET:

dotnet add package Azure.Security.KeyVault.Keys

Para este inicio rápido también deberá instalar la biblioteca cliente de Azure Identity:

dotnet add package Azure.Identity

Establecimiento de variables de entorno

Esta aplicación también usa el nombre del almacén de claves como variable de entorno llamada KEY_VAULT_NAME.

Windows

set KEY_VAULT_NAME=<your-key-vault-name>

Windows PowerShell

$Env:KEY_VAULT_NAME="<your-key-vault-name>"

macOS o Linux

export KEY_VAULT_NAME=<your-key-vault-name>

Modelo de objetos

La biblioteca cliente de claves de Azure Key Vault para .NET permite administrar las claves. En la sección Ejemplos de código se muestra cómo crear un cliente y cómo establecer, recuperar y eliminar una clave.

Ejemplos de código

Adición de directivas

Agregue las directivas siguientes al principio de Program.cs:

using System;
using Azure.Identity;
using Azure.Security.KeyVault.Keys;

Autenticación y creación de un cliente

Deben autorizarse las solicitudes de aplicación a la mayor parte de servicios de Azure. El uso de la clase DefaultAzureCredential que proporciona la biblioteca cliente de Azure Identity es el enfoque recomendado para implementar conexiones sin contraseña a los servicios de Azure en el código. DefaultAzureCredential admite varios métodos de autenticación y determina el que se debe usar en tiempo de ejecución. Este enfoque permite que la aplicación use diferentes métodos de autenticación en distintos entornos (local frente a producción) sin implementar código específico del entorno.

En este inicio rápido, DefaultAzureCredential se autentica en el almacén de claves mediante las credenciales del usuario de desarrollo local que inició sesión en la CLI de Azure. Cuando la aplicación se implementa en Azure, el mismo código DefaultAzureCredential puede detectar y usar automáticamente una identidad administrada asignada a una instancia de App Service, máquina virtual u otros servicios. Para más información, consulte Introducción a la identidad administrada.

En este ejemplo, el nombre del almacén de claves se expande al identificador URI del almacén de claves, con el formato https://<your-key-vault-name>.vault.azure.net. Para más información sobre la autenticación en el almacén de claves, consulte la Guía del desarrollador.

var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
var kvUri = $"https://{keyVaultName}.vault.azure.net";

var client = new KeyClient(new Uri(kvUri), new DefaultAzureCredential());

Guardar una clave

Para esta tarea, use el método CreateKeyAsync. Los parámetros del método aceptan un nombre de clave y el tipo de clave.

var key = await client.CreateKeyAsync("myKey", KeyType.Rsa);

Nota:

Si el nombre de la clave existe, este código creará una versión de dicha clave.

Recuperación de una clave

Ahora puede recuperar la clave creada anteriormente con el método GetKeyAsync.

var key = await client.GetKeyAsync("myKey");

Eliminación de una clave

Por último, vamos a eliminar y purgar la clave del almacén de claves con los métodos StartDeleteKeyAsync y PurgeDeletedKeyAsync.

var operation = await client.StartDeleteKeyAsync("myKey");

// You only need to wait for completion if you want to purge or recover the key.
await operation.WaitForCompletionAsync();

var key = operation.Value;
await client.PurgeDeletedKeyAsync("myKey");

Código de ejemplo

Modifique la aplicación de consola de .NET para interactuar con el almacén de claves; para ello, complete los pasos siguientes:

  • Reemplace el código de Program.cs por el código siguiente:

    using System;
    using System.Threading.Tasks;
    using Azure.Identity;
    using Azure.Security.KeyVault.Keys;
    
    namespace key_vault_console_app
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                const string keyName = "myKey";
                var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
                var kvUri = $"https://{keyVaultName}.vault.azure.net";
    
                var client = new KeyClient(new Uri(kvUri), new DefaultAzureCredential());
    
                Console.Write($"Creating a key in {keyVaultName} called '{keyName}' ...");
                var createdKey = await client.CreateKeyAsync(keyName, KeyType.Rsa);
                Console.WriteLine("done.");
    
                Console.WriteLine($"Retrieving your key from {keyVaultName}.");
                var key = await client.GetKeyAsync(keyName);
                Console.WriteLine($"Your key version is '{key.Value.Properties.Version}'.");
    
                Console.Write($"Deleting your key from {keyVaultName} ...");
                var deleteOperation = await client.StartDeleteKeyAsync(keyName);
                // You only need to wait for completion if you want to purge or recover the key.
                await deleteOperation.WaitForCompletionAsync();
                Console.WriteLine("done.");
    
                Console.Write($"Purging your key from {keyVaultName} ...");
                await client.PurgeDeletedKeyAsync(keyName);
                Console.WriteLine(" done.");
            }
        }
    }
    

Prueba y comprobación

  1. Ejecute el siguiente comando para compilar el proyecto.

    dotnet build
    
  2. Ejecute el siguiente comando para ejecutar la aplicación.

    dotnet run
    
  3. Cuando se le pida, escriba un secreto. Por ejemplo, mySecretPassword.

    Aparece una variación del resultado siguiente:

    Creating a key in mykeyvault called 'myKey' ... done.
    Retrieving your key from mykeyvault.
    Your key version is '8532359bced24e4bb2525f2d2050738a'.
    Deleting your key from jl-kv ... done
    Purging your key from <your-unique-keyvault-name> ... done.   
    

Pasos siguientes

En este inicio rápido, ha creado un almacén de claves y ha almacenado una clave y recuperado dicha clave.

Para más información sobre Key Vault y cómo integrarlo con las aplicaciones, consulte los artículos siguientes: