Tutorial: Uso de Azure Key Vault con una máquina virtual en .NET

Azure Key Vault ayuda a proteger secretos como las claves de API, las cadenas de conexión de base de datos necesarias para acceder a las aplicaciones, los servicios y los recursos de TI.

En este tutorial, aprenderá cómo obtener una aplicación de consola para leer información de Azure Key Vault. La aplicación usará la identidad administrada de máquina virtual para autenticarse en Key Vault.

En este tutorial se muestra cómo realizar las siguientes acciones:

  • Cree un grupo de recursos.
  • Cree un almacén de claves.
  • Agregue un secreto al almacén de claves.
  • Recuperar un secreto del almacén de claves.
  • Cree una máquina virtual de Azure.
  • Habilitar una identidad administrada para la máquina virtual.
  • Asigne permisos a la identidad de máquina virtual.

Antes de empezar, lea los conceptos básicos de Key Vault.

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

Requisitos previos

Para Windows, Mac y Linux:

Creación de recursos y asignación de permisos

Antes de empezar a codificar, necesita crear algunos recursos, colocar un secreto en el almacén de claves y asignar los permisos.

Inicio de sesión en Azure

Para iniciar sesión en Azure con el siguiente comando:

az login

Creación de un grupo de recursos y de un almacén de claves

En este inicio rápido se usa un almacén de claves de Azure creado previamente. Puede crear un almacén de claves siguiendo los pasos descritos en el inicio rápido de CLI de Azure, inicio rápido de Azure PowerShell o inicio rápido de Azure Portal.

Como alternativa, puede ejecutar simplemente los siguientes comandos de la CLI de Azure o de Azure PowerShell.

Importante

Cada almacén de claves debe tener un nombre único. Reemplace <nombre-almacén de claves-único> por el nombre del almacén de claves en los siguientes ejemplos.

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup"

Rellenado del almacén de claves con un secreto

Vamos a crear un secreto llamado mySecret cuyo valor sea ¡Correcto! . Un secreto puede ser una contraseña, una cadena de conexión SQL o cualquier otra información que necesite mantener segura y disponible para la aplicación.

Para agregar un secreto al almacén de claves recién creado, use el comando siguiente:

az keyvault secret set --vault-name "<your-unique-keyvault-name>" --name "mySecret" --value "Success!"

Creación de una máquina virtual

Cree una máquina virtual Windows o Linux con uno de los métodos siguientes:

Windows Linux
CLI de Azure CLI de Azure
PowerShell PowerShell
Azure Portal Azure Portal

Asignación de una identidad a la máquina virtual

Cree una identidad asignada por el sistema para la máquina virtual con el siguiente ejemplo:

az vm identity assign --name <NameOfYourVirtualMachine> --resource-group <YourResourceGroupName>

Tenga en cuenta la identidad asignada por el sistema que se muestra en el código siguiente. La salida del comando anterior sería:

{
  "systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "userAssignedIdentities": {}
}

Asignación de permisos a la identidad de máquina virtual

Asigne los permisos de la identidad creada anteriormente al almacén de claves con el comandoaz keyvault set-policy:

az keyvault set-policy --name '<your-unique-key-vault-name>' --object-id <VMSystemAssignedIdentity> --secret-permissions  get list set delete

Inicio de sesión en la máquina virtual

Para iniciar sesión en la máquina virtual, siga las instrucciones que encontrará en Conexión a una máquina virtual de Azure donde se ejecuta Windows e inicio de sesión en ella o Conexión a una máquina virtual Linux en Azure e inicio de sesión en ella.

Configuración de la aplicación de consola

Cree una aplicación de consola e instale los paquetes necesarios con el comando dotnet.

Instalar .NET Core

Para instalar .NET Core, vaya a la página de descargas de .NET.

Creación y ejecución de una aplicación de .NET de ejemplo

Abra un símbolo del sistema.

Puede imprimir "Hola mundo" en la consola mediante la ejecución de los siguientes comandos:

dotnet new console -n keyvault-console-app
cd keyvault-console-app
dotnet run

Instalar el paquete

En la ventana de la consola, instale la biblioteca cliente de secretos de Azure Key Vault para .NET:

dotnet add package Azure.Security.KeyVault.Secrets

Para este inicio rápido, necesitará instalar el siguiente paquete de identidad para autenticarse en Azure Key Vault:

dotnet add package Azure.Identity

Edición de la aplicación de consola

Abra el archivo Program.cs y agregue estos paquetes:

using System;
using Azure.Core;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

Agregue estas líneas. De este modo, el URI se actualizará para mostrar el vaultUri de su almacén de claves. El código siguiente usa 'DefaultAzureCredential()' para la autenticación en el almacén de claves, que usa el token de la identidad administrada de la aplicación con fines de autenticación. También utiliza el retroceso exponencial para los reintentos en el caso de que se limite el almacén de claves.

  class Program
    {
        static void Main(string[] args)
        {
            string secretName = "mySecret";
            string keyVaultName = "<your-key-vault-name>";
            var kvUri = "https://<your-key-vault-name>.vault.azure.net";
            SecretClientOptions options = new SecretClientOptions()
            {
                Retry =
                {
                    Delay= TimeSpan.FromSeconds(2),
                    MaxDelay = TimeSpan.FromSeconds(16),
                    MaxRetries = 5,
                    Mode = RetryMode.Exponential
                 }
            };

            var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential(),options);

            Console.Write("Input the value of your secret > ");
            string secretValue = Console.ReadLine();

            Console.Write("Creating a secret in " + keyVaultName + " called '" + secretName + "' with the value '" + secretValue + "' ...");

            client.SetSecret(secretName, secretValue);

            Console.WriteLine(" done.");

            Console.WriteLine("Forgetting your secret.");
            secretValue = "";
            Console.WriteLine("Your secret is '" + secretValue + "'.");

            Console.WriteLine("Retrieving your secret from " + keyVaultName + ".");

            KeyVaultSecret secret = client.GetSecret(secretName);

            Console.WriteLine("Your secret is '" + secret.Value + "'.");

            Console.Write("Deleting your secret from " + keyVaultName + " ...");

            client.StartDeleteSecret(secretName);

            System.Threading.Thread.Sleep(5000);
            Console.WriteLine(" done.");

        }
    }

Limpieza de recursos

Cuando ya no son necesarios, elimine la máquina virtual y el almacén de claves.

Pasos siguientes