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

Azure Key Vault ayuda a proteger las claves, los secretos y los certificados, como las claves de API y las cadenas de conexión de base de datos.

En este tutorial, configura una aplicación de Node.js para leer información de Azure Key Vault mediante una identidad administrada para recursos de Azure. Aprenderá a:

  • Crear una bóveda de claves
  • Almacenar un secreto en Key Vault
  • Creación de una máquina virtual Linux de Azure
  • Habilitar una identidad administrada para la máquina virtual
  • Concesión de los permisos necesarios para que la aplicación de consola lea datos de Key Vault
  • Recuperar un secreto de Key Vault

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

Si no tiene una suscripción de Azure, cree una cuenta free.

Prerequisites

Para Windows, Mac y Linux:

  • Git
  • Una versión actual del CLI de Azure. Ejecute az --version para comprobar la versión instalada.

Iniciar sesión en Azure

Inicie sesión en Azure con el CLI de Azure:

az login

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

En este inicio rápido se utiliza una bóveda de claves de Azure creada previamente. Puede crear un almacén de claves siguiendo los pasos descritos en estas guías rápidas:

Como alternativa, puede ejecutar estos comandos CLI de Azure.

Important

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

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

az keyvault create --name "<vault-name>" -g "myResourceGroup" --enable-rbac-authorization true

Llena tu bóveda 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 para mantener la seguridad y la disponibilidad de 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 "<vault-name>" --name "mySecret" --value "Success!"

Creación de una máquina virtual

Cree una máquina virtual denominada myVM mediante uno de los métodos siguientes:

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

Para crear una máquina virtual Linux mediante el CLI de Azure, use el comando az vm create. En el ejemplo siguiente se agrega una cuenta de usuario denominada azureuser. El --generate-ssh-keys parámetro genera una clave SSH y la almacena en la ubicación de clave predeterminada (~/.ssh).

az vm create \
  --resource-group <resource-group> \
  --name myVM \
  --image Ubuntu2204 \
  --admin-username azureuser \
  --generate-ssh-keys

Anote el valor de publicIpAddress en la salida.

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

Cree una identidad administrada asignada por el sistema para la máquina virtual mediante el comando az vm identity assign :

az vm identity assign --name "myVM" --resource-group "<resource-group>"

Anote la identidad asignada por el sistema en la salida:

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

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

Asigne a la identidad administrada de la VM el rol Key Vault Secrets User en el almacén de claves:

az role assignment create --role "Key Vault Secrets User" --assignee "<system-assigned-identity>" --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>

Inicio de sesión en la máquina virtual

Para iniciar sesión en la máquina virtual, siga las instrucciones de Conexión e inicio de sesión en una máquina virtual de Azure que ejecuta Linux o Connect e inicie sesión en una máquina virtual Azure que ejecuta Windows.

Para iniciar sesión en una máquina virtual Linux, use ssh con el <public-ip-address> del paso Creación de una máquina virtual :

ssh azureuser@<public-ip-address>

Instalación de Node.js y bibliotecas npm en la VM

En la máquina virtual, instale las dos bibliotecas de npm que usa el script de ejemplo: @azure/keyvault-secrets y @azure/identity.

  1. En el terminal SSH, instale Node.js y npm:

    curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && \
        sudo apt-get install -y nodejs
    
  2. Cree un directorio de aplicaciones e inicialice el paquete de Node.js:

    mkdir app && cd app && npm init -y
    
  3. Instale los paquetes de Azure con npm:

    npm install @azure/keyvault-secrets @azure/identity
    

Creación y edición del archivo Javascript de ejemplo

  1. En la máquina virtual del app directorio, cree un archivo JavaScript denominado index.js:

    touch index.js
    
  2. Abra el archivo con un editor de texto Nano:

    nano index.js
    
  3. Pegue el siguiente código en el editor y sustituya <vault-name> por el nombre de su almacén de claves:

    // index.js
    
    const { SecretClient } = require("@azure/keyvault-secrets");
    const { DefaultAzureCredential } = require("@azure/identity");
    
    // Your Azure Key Vault name and secret name
    const keyVaultName = "<vault-name>";
    const keyVaultUri = `https://${keyVaultName}.vault.azure.net`;
    const secretName = "mySecret";
    
    // Authenticate to Azure
    const credential = new DefaultAzureCredential();
    const client = new SecretClient(keyVaultUri, credential);
    
    // Get Secret with Azure SDK for JS
    const getSecret = async (secretName) => {
    
        return (await client.getSecret(secretName)).value;
    }
    
    getSecret(secretName).then(secretValue => {
        console.log(`The value of secret '${secretName}' in '${keyVaultName}' is: '${secretValue}'`);
    }).catch(err => {
        console.log(err);
    })
    
  4. Guarde el archivo con Ctrl+X.

  5. En el indicador Save modified buffer?, escriba y.

  6. En el indicador File Name to Write: index.js, pulsa Intro.

Ejecución de la aplicación Node.js de ejemplo

Ejecute index.js. Si todo está configurado correctamente, la aplicación imprime el valor secreto:

node index.js

The value of secret 'mySecret' in '<vault-name>' is: 'Success!'

Limpieza de recursos

Cuando ya no los necesite, elimine la máquina virtual y el almacén de claves. La forma más rápida es eliminar el grupo de recursos al que pertenecen:

az group delete -g "myResourceGroup"

Pasos siguientes

Azure Key Vault API REST