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

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

In questa esercitazione viene configurata un'applicazione Python per leggere informazioni da Azure Key Vault tramite identità gestite per le risorse di Azure. Scopri come:

  • Creare un insieme di credenziali delle chiavi
  • Archiviare un segreto nell'insieme di credenziali delle chiavi
  • Creare una macchina virtuale Linux di Azure
  • Abilitare un'identità gestita per la macchina virtuale
  • Concedere le autorizzazioni necessarie per l'applicazione console per la lettura di dati dall'insieme di credenziali delle chiavi
  • Recuperare un segreto dall'insieme di credenziali delle chiavi

Prima di iniziare, leggere i concetti di base di Key Vault.

Se non hai una sottoscrizione di Azure, crea un account gratuito.

Prerequisiti

Per Windows, Mac e Linux:

  • Git
  • Questa esercitazione richiede l'esecuzione dell'interfaccia della riga di comando di Azure nell'ambiente locale. È necessario che sia installata l'interfaccia della riga di comando di Azure versione 2.0.4 o successiva. Eseguire az --version per trovare la versione. Se è necessario installare o aggiornare l'interfaccia della riga di comando, vedere Installare l'interfaccia della riga di comando di Azure 2.0.

Accedere ad Azure

Per accedere ad Azure tramite l'interfaccia della riga di comando di Azure, immettere:

az login

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

In questo avvio rapido si usa un'istanza creata in precedenza di Azure Key Vault. È possibile creare un insieme di credenziali delle chiavi seguendo la procedura descritta negli argomenti di avvio rapido per l'interfaccia della riga di comando di Azure, Azure PowerShell o il portale di Azure.

In alternativa, è possibile eseguire i comandi dell'interfaccia della riga di comando di Azure o di Azure PowerShell.

Importante

Ogni insieme di credenziali delle chiavi deve avere un nome univoco. Negli esempi seguenti sostituire <your-unique-keyvault-name> con il nome dell'insieme di credenziali delle chiavi in uso.

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

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

Popolare l'insieme di credenziali delle chiavi con un segreto

Creare un segreto denominato mySecret, con un valore Success!. Un segreto può essere una password, una stringa di connessione SQL o qualsiasi altra informazione che è necessario conservare in modo sicuro e rendere allo stesso tempo disponibile per l'applicazione.

Per aggiungere un segreto all'insieme di credenziali delle chiavi appena creato, usare il seguente comando:

az keyvault secret set --vault-name "<your-unique-keyvault-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
Azure portal Il portale di Azure

Per creare una VM Linux con l'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 myResourceGroup \
  --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 con il comando az vm identity assign dell'interfaccia della riga di comando di Azure:

az vm identity assign --name "myVM" --resource-group "myResourceGroup"

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

Per concedere all'applicazione le autorizzazioni per l'insieme di credenziali delle chiavi tramite il controllo degli accessi in base al ruolo, assegnare un ruolo con il comando az role assignment create dell'interfaccia della riga di comando di Azure.

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>"

Sostituire <app-id>, <subscription-id>, <resource-group-name> e <your-unique-keyvault-name> con i valori effettivi. <app-id> è l'ID applicazione (client) della propria applicazione registrata in Microsoft Entra.

Accedere alla macchina virtuale

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

Per accedere a una macchina virtuale Linux, è possibile usare il comando ssh con il >publicIpAddress< indicato nel passaggio Creare una macchina virtuale:

ssh azureuser@<PublicIpAddress>

Installare le libreria Python nella VM

Nella macchina virtuale installare le due librerie Python che verranno usate nello script Python: azure-keyvault-secrets e azure.identity.

In una macchina virtuale Linux, ad esempio, è possibile installarle usando pip3:

pip3 install azure-keyvault-secrets

pip3 install azure.identity

Creare e modificare lo script Python di esempio

Nella macchina virtuale creare un file Python denominato sample.py. Modificare il file in modo che contenga il codice seguente, sostituendo <your-unique-keyvault-name> con il nome dell'insieme di credenziali delle chiavi:

from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential

key_vault_name = "<your-unique-keyvault-name>"
key_vault_uri = f"https://{key_vault_name}.vault.azure.net"
secret_name = "mySecret"

credential = DefaultAzureCredential()
client = SecretClient(vault_url=key_vault_uri, credential=credential)
retrieved_secret = client.get_secret(secret_name)

print(f"The value of secret '{secret_name}' in '{key_vault_name}' is: '{retrieved_secret.value}'")

Eseguire l'app Python di esempio

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

python3 sample.py

The value of secret 'mySecret' in '<your-unique-keyvault-name>' is: 'Success!'

Pulire le risorse

Quando non servono più, è possibile eliminare la macchina virtuale e l'insieme di credenziali delle chiavi. È possibile eseguire rapidamente eliminando il gruppo di risorse a cui appartengono:

az group delete -g myResourceGroup

Passaggi successivi

API REST di Azure Key Vault