Esercitazione: Usare Azure Key Vault con una macchina virtuale in JavaScript

Azure Key Vault consente di proteggere chiavi, segreti e certificati, ad esempio chiavi API e stringhe di connessione del database.

In questa esercitazione si configura un'applicazione Node.js per leggere le informazioni da Azure Key Vault usando le identità gestite per le risorse di Azure. Scopri come:

  • Creare un insieme di credenziali delle chiavi
  • Archiviare un segreto in Key Vault
  • Creare una macchina virtuale Linux Azure
  • Abilitare un'identità gestita per la macchina virtuale
  • Concedere le autorizzazioni necessarie per l'applicazione console per leggere i dati da Key Vault
  • Recuperare un segreto da Key Vault

Prima di iniziare, leggere Key Vault concetti di base.

Se non si ha una sottoscrizione Azure, creare un account free.

Prerequisites

Per Windows, Mac e Linux:

  • Git
  • Per questa esercitazione è necessario eseguire il interfaccia della riga di comando di Azure in locale. È necessario avere una versione recente del interfaccia della riga di comando di Azure installato. Eseguire az --version per trovare la versione. Se è necessario installare o aggiornare l'interfaccia della riga di comando, vedere Installare interfaccia della riga di comando di Azure.

Accedere a Azure

Per accedere a Azure usando il interfaccia della riga di comando di Azure, immettere:

az login

Creare un gruppo di risorse e un insieme di credenziali delle chiavi

In questo argomento di avvio rapido si usa un'istanza creata in precedenza di Azure Key Vault. È possibile creare un insieme di credenziali delle chiavi seguendo i passaggi di queste guide introduttive:

In alternativa, è possibile eseguire questi comandi interfaccia della riga di comando di Azure.

Important

Ogni Vault delle chiavi deve avere un nome univoco. Sostituire <vault-name> con il nome del Key Vault negli esempi seguenti.

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

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

Aggiungere un segreto al key vault

Creare un segreto denominato mySecret, con un valore Success!. Un segreto potrebbe essere una password, un stringa di connessione SQL o qualsiasi altra informazione che è necessario mantenere sia sicura che disponibile per l'applicazione.

Per aggiungere un segreto al nuovo archivio di chiavi appena creato, usa il seguente comando:

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

Creare una macchina virtuale

Creare una VM denominata myVM usando uno dei metodi seguenti:

Linux Windows
interfaccia della riga di comando di Azure interfaccia della riga di comando di Azure
PowerShell PowerShell
portale Azure Il portale di Azure

Per creare una macchina virtuale Linux usando il interfaccia della riga di comando di Azure, usare il comando az vm create. L'esempio seguente aggiunge un account utente denominato azureuser. Il parametro --generate-ssh-keys viene usato per generare automaticamente una chiave SSH e inserito nella posizione predefinita della chiave (~/.ssh).

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

Prendere nota del valore di publicIpAddress nell'output.

Assegnare un'identità alla macchina virtuale

Creare un'identità assegnata dal sistema per la macchina virtuale usando il comando interfaccia della riga di comando di Azure az vm identity assign:

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

Annotare l'identità assegnata dal sistema che viene visualizzata nel codice seguente. L'output del comando precedente sarà:

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

Assegnare autorizzazioni per l'identità della macchina virtuale

A questo punto è possibile assegnare le autorizzazioni dell’identità creata in precedenza all'insieme di credenziali delle chiavi eseguendo il comando seguente:

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>

Accedere alla macchina virtuale

Per accedere alla macchina virtuale, seguire le istruzioni riportate in Connect e accedere a una macchina virtuale Azure che esegue Linux o Connettersi e accedere a una macchina virtuale Azure che esegue Windows.

Per accedere a una macchina virtuale Linux, è possibile usare il comando ssh con il <public-ip-address> specificato nel passaggio Creare una macchina virtuale :

ssh azureuser@<public-ip-address>

Installare Node.js e le librerie npm nella macchina virtuale

Nella macchina virtuale installare le due librerie npm che verranno usati nello script JavaScript: @azure/keyvault-secrets e @azure/identity.

  1. Nel terminale SSH installare Node.js e npm con i comandi seguenti:

    curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash - && \
        sudo apt-get install -y nodejs
    
  2. Creare una directory dell'app e inizializzare il pacchetto Node.js:

    mkdir app && cd app && npm init -y
    
  3. Installare i pacchetti del servizio Azure usando npm:

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

Creare e modificare il file JavaScript di esempio

  1. Nella macchina virtuale nella directory app creare un file JavaScript denominato index.js.

    touch index.js
    
  2. Aprire il file con l’editor di testo Nano:

    nano index.js
    
  3. Copiare il codice seguente, sostituendo <vault-name> con il nome del Key Vault, e incollare nell'editor Nano.

    // 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. Salvare il file con CTRL + x.

  5. Quando viene chiesto Save modified buffer?, immettere y.

  6. Quando viene chiesto File Name to Write: index.js, immettere Enter.

Eseguire l'app di esempio Node.js

Infine, eseguire index.js. Se le impostazioni sono corrette, verrà restituito il valore del segreto:

node index.js

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

Pulire le risorse

Quando non sono più necessari, elimina la macchina virtuale e il Key Vault. È possibile eseguire rapidamente questa operazione eliminando semplicemente il gruppo di risorse a cui appartengono:

az group delete -g "myResourceGroup"

Passaggi successivi

API REST Azure Key Vault