Avvio rapido: libreria client delle chiavi di Azure Key Vault per Python
Introduzione alla libreria client di Azure Key Vault per Python Seguire questi passaggi per installare il pacchetto e provare il codice di esempio per le attività di base. Usando Key Vault per l'archiviazione delle chiavi crittografiche si evita di archiviarle nel codice, aumentando la sicurezza dell'app.
Documentazione di riferimento delle API | Codice sorgente della libreria | Pacchetto (Indice dei pacchetti Python)
Prerequisiti
- Una sottoscrizione di Azure: creare un account gratuitamente.
- Python 3.7+
- Interfaccia della riga di comando di Azure
Questa guida di avvio rapido presuppone che sia in esecuzione l'interfaccia della riga di comando di Azure o Azure PowerShell in una finestra del terminale Linux.
Configurare l'ambiente locale
Questa guida di avvio rapido usa la libreria di identità di Azure con l'interfaccia della riga di comando di Azure o Azure PowerShell per autenticare l'utente nei servizi di Azure. Gli sviluppatori possono anche usare Visual Studio o Visual Studio Code per autenticare le chiamate. Per altre informazioni, vedere Autenticare il client con la libreria client di identità di Azure.
Accedere ad Azure
Eseguire il comando
login
.az login
Se l'interfaccia della riga di comando può aprire il browser predefinito, eseguirà questa operazione e caricherà una pagina di accesso di Azure.
In caso contrario, aprire una pagina del browser all'indirizzo https://aka.ms/devicelogin e immettere il codice di autorizzazione visualizzato nel terminale.
Accedere con le credenziali dell'account nel browser.
Installare i pacchetti
In un terminale o un prompt dei comandi creare una cartella di progetto appropriata e quindi creare e attivare un ambiente virtuale Python come descritto in Usare ambienti virtuali Python.
Installare la libreria di identità di Microsoft Entra:
pip install azure-identity
Installare la libreria client delle chiavi di Key Vault:
pip install azure-keyvault-keys
Creare un gruppo di risorse e un insieme di credenziali delle chiavi
Usare il comando
az group create
per creare un gruppo di risorse:az group create --name myResourceGroup --location eastus
È possibile sostituire "eastus" con una località più vicina, se si preferisce.
Usare
az keyvault create
per creare l'insieme di credenziali delle chiavi:az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup
Sostituire
<your-unique-keyvault-name>
con un nome univoco in tutto Azure. In genere si usa il nome personale o dell'azienda insieme ad altri numeri e identificatori.
Impostare la variabile di ambiente KEY_VAULT_NAME
Lo script userà il valore assegnato alla variabile di ambiente KEY_VAULT_NAME
come nome dell'istanza di Key Vault. È quindi necessario impostare questo valore usando il comando seguente:
export KEY_VAULT_NAME=<your-unique-keyvault-name>
Concedere l'accesso all'insieme di credenziali delle chiavi
Per ottenere le autorizzazioni per l’insieme di credenziali delle chiavi tramite il controllo degli accessi in base al ruolo (RBAC), assegnare un ruolo all’UPN (User Principal Name) usando il comando dell’interfaccia della riga di comando di Azure az role assignment create.
az role assignment create --role "Key Vault Crypto Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"
Sostituire <upn>, <subscription-id>, <resource-group-name> e <your-unique-keyvault-name> con i valori effettivi. L'UPN in genere sarà nel formato di un indirizzo e-mail (ad esempio, username@domain.com).
Creare il codice di esempio
La libreria client delle chiavi di Azure Key Vault per Python consente di gestire le chiavi crittografiche. L'esempio di codice seguente illustra come creare un client e come impostare, recuperare ed eliminare una chiave.
Creare un file denominato kv_keys.py che contiene questo codice.
import os
from azure.keyvault.keys import KeyClient
from azure.identity import DefaultAzureCredential
keyVaultName = os.environ["KEY_VAULT_NAME"]
KVUri = "https://" + keyVaultName + ".vault.azure.net"
credential = DefaultAzureCredential()
client = KeyClient(vault_url=KVUri, credential=credential)
keyName = input("Input a name for your key > ")
print(f"Creating a key in {keyVaultName} called '{keyName}' ...")
rsa_key = client.create_rsa_key(keyName, size=2048)
print(" done.")
print(f"Retrieving your key from {keyVaultName}.")
retrieved_key = client.get_key(keyName)
print(f"Key with name '{retrieved_key.name}' was found.")
print(f"Deleting your key from {keyVaultName} ...")
poller = client.begin_delete_key(keyName)
deleted_key = poller.result()
print(" done.")
Eseguire il codice
Assicurarsi che il codice della sezione precedente sia incluso in un file denominato kv_keys.py. Eseguire quindi il codice con il comando seguente:
python kv_keys.py
La ripetizione del codice con lo stesso nome di chiave può generare l'errore: "(Conflitto) il <nome> della chiave è attualmente in uno stato eliminato ma ripristinabile." Usare un nome di chiave diverso.
Dettagli del codice
Autenticare e creare un client
Le richieste dell'applicazione per la maggior parte dei servizi di Azure devono essere autorizzate. L'uso della classe DefaultAzureCredential fornita dalla libreria client di identità di Azure è l'approccio consigliato per l'implementazione di connessioni senza password ai servizi di Azure nel codice. DefaultAzureCredential
supporta più metodi di autenticazione e determina il metodo da usare in fase di esecuzione. Questo approccio consente all'app di usare metodi di autenticazione diversi in ambienti diversi (locale e di produzione) senza implementare codice specifico dell'ambiente.
In questo avvio rapido, DefaultAzureCredential
esegue l'autenticazione nell’insieme di credenziali delle chiavi usando le credenziali dell'utente di sviluppo locale connesso all'interfaccia della riga di comando di Azure. Quando l'applicazione viene distribuita in Azure, lo stesso codice DefaultAzureCredential
può individuare e usare automaticamente un'identità gestita assegnata a un servizio app, a una macchina virtuale o ad altri servizi. Per altre informazioni, vedere Panoramica delle identità gestite.
Nel codice di esempio, il nome dell'insieme di credenziali delle chiavi viene espanso usando il valore della variabile KVUri
, nel formato " https://<nome dell'insieme di credenziali delle chiavi>.vault.azure.net".
credential = DefaultAzureCredential()
client = KeyClient(vault_url=KVUri, credential=credential)
Salvare una chiave
Una volta ottenuto l'oggetto client per l'insieme di credenziali delle chiavi, è possibile archiviare una chiave usando il metodo set_secret:
rsa_key = client.create_rsa_key(keyName, size=2048)
È anche possibile usare create_key o create_ec_key.
La chiamata a un metodo create
genera una chiamata all'API REST di Azure per l'insieme di credenziali delle chiavi.
Quando Azure gestisce la richiesta, autentica l'identità del chiamante (l'entità servizio) usando l'oggetto credenziale fornito al client.
Recuperare una chiave
Per leggere una chiave da Key Vault, usare il metodo get_key:
retrieved_key = client.get_key(keyName)
È anche possibile verificare che la chiave sia stata impostata con il comando dell'interfaccia della riga di comando di Azure az keyvault key show o il cmdlet di Azure PowerShell Get-AzKeyVaultKey.
Eliminare una chiave
Per eliminare una chiave, usare il metodo begin_delete_key:
poller = client.begin_delete_key(keyName)
deleted_key = poller.result()
Il begin_delete_key
metodo è asincrono e restituisce un oggetto poller. La chiamata al metodo result
dell'oggetto poller attende il relativo completamento.
È possibile verificare che la chiave sia eliminata con il comando dell'interfaccia della riga di comando di Azure az keyvault key show o il cmdlet di Azure PowerShell Get-AzKeyVaultKey.
Una volta eliminata, una chiave rimane in uno stato eliminato ma recuperabile per un periodo di tempo. Se si esegue di nuovo il codice, usare un nome di chiave diverso.
Pulire le risorse
Se si vuole sperimentare anche con certificati e segreti, è possibile riutilizzare l'istanza di Key Vault creata in questo articolo.
In caso contrario, dopo aver finito di usare le risorse create nell'articolo, eseguire il comando seguente per eliminare il gruppo di risorse e tutte le risorse contenute al suo interno:
az group delete --resource-group myResourceGroup