Avvio rapido: Libreria client dei segreti di Azure Key Vault per Python

Introduzione alla libreria client dei segreti 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 dei segreti si evita di archiviarli nel codice, aumentando la sicurezza dell'app.

Documentazione di riferimento delle API | Codice sorgente della libreria | Pacchetto (Indice dei pacchetti Python)

Prerequisiti

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 introduttiva 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 Azure Identity.

Accedere ad Azure

  1. Eseguire il comando az 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.

  2. Accedere con le credenziali dell'account nel browser.

Installare i pacchetti

  1. 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.

  2. Installare la libreria di identità di Microsoft Entra:

    pip install azure-identity
    
  3. Installare la libreria di segreti di Key Vault:

    pip install azure-keyvault-secrets
    

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

  1. 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.

  2. 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 concedere all'applicazione le autorizzazioni per l'insieme di credenziali delle chiavi tramite il controllo degli Controllo di accesso accessi in base al ruolo, assegnare un ruolo usando il comando dell'interfaccia della riga di comando di Azure az role assignment create.

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) dell'applicazione registrata in Azure AD.

Creare il codice di esempio

La libreria client dei segreti di Azure Key Vault per Python consente di gestire i segreti. L'esempio di codice seguente illustra come creare un client e come impostare, recuperare ed eliminare un segreto.

Creare un file denominato kv_secrets.py che contiene questo codice.

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

keyVaultName = os.environ["KEY_VAULT_NAME"]
KVUri = f"https://{keyVaultName}.vault.azure.net"

credential = DefaultAzureCredential()
client = SecretClient(vault_url=KVUri, credential=credential)

secretName = input("Input a name for your secret > ")
secretValue = input("Input a value for your secret > ")

print(f"Creating a secret in {keyVaultName} called '{secretName}' with the value '{secretValue}' ...")

client.set_secret(secretName, secretValue)

print(" done.")

print(f"Retrieving your secret from {keyVaultName}.")

retrieved_secret = client.get_secret(secretName)

print(f"Your secret is '{retrieved_secret.value}'.")
print(f"Deleting your secret from {keyVaultName} ...")

poller = client.begin_delete_secret(secretName)
deleted_secret = poller.result()

print(" done.")

Eseguire il codice

Assicurarsi che il codice della sezione precedente sia incluso in un file denominato kv_secrets.py. Eseguire quindi il codice con il comando seguente:

python kv_secrets.py
  • Se si verificano errori relativi alle autorizzazioni, assicurarsi di aver eseguito il comando az keyvault set-policy o Set-AzKeyVaultAccessPolicy.
  • La ripetizione del codice con lo stesso nome segreto può generare l'errore "(Conflict) Secret <name> is currently in a deleted but recoverable state". Usare un nome segreto 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 in Key Vault 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 = SecretClient(vault_url=KVUri, credential=credential)

Salvare un segreto

Una volta ottenuto l'oggetto client per l'insieme di credenziali delle chiavi, è possibile archiviare un segreto usando il metodo set_secret:

client.set_secret(secretName, secretValue)

La chiamata a set_secret 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 credenziali fornito al client.

Recuperare un segreto

Per leggere un segreto da Key Vault, usare il metodo get_secret:

retrieved_secret = client.get_secret(secretName)

Il valore del segreto è contenuto in retrieved_secret.value.

È anche possibile recuperare un segreto con il comando dell'interfaccia della riga di comando di Azure az keyvault secret show o il cmdlet di Azure PowerShell Get-AzKeyVaultSecret.

Eliminare un segreto

Per eliminare un segreto, usare il metodo begin_delete_secret:

poller = client.begin_delete_secret(secretName)
deleted_secret = poller.result()

Il begin_delete_secret metodo è asincrono e restituisce un oggetto poller. La chiamata al metodo result dell'oggetto poller attende il relativo completamento.

È possibile verificare che il segreto sia stato rimosso con il comando dell'interfaccia della riga di comando di Azure az keyvault secret show o il cmdlet di Azure PowerShell Get-AzKeyVaultSecret.

Una volta eliminato, un segreto rimane in uno stato eliminato ma recuperabile per un periodo di tempo. Se si esegue di nuovo il codice, usare un nome di segreto diverso.

Pulire le risorse

Se si vuole sperimentare anche con certificati e chiavi, è 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

Passaggi successivi