Démarrage rapide : Bibliothèque cliente des clés Azure Key Vault pour Python
Bien démarrer avec la bibliothèque de client Azure Key Vault pour Python. Suivez les étapes suivantes pour installer le package et essayer un exemple de code pour les tâches de base. En stockant des clés de chiffrement à l’aide de Key Vault, vous évitez de les stocker dans votre code, ce qui renforce la sécurité de votre application.
Documentation de référence de l’API | Code source bibliothèqueC | Package (Index package Python)
Prérequis
- Un abonnement Azure - En créer un gratuitement
- Python 3.7+
- Azure CLI
Ce démarrage rapide suppose que vous exécutez Azure CLI ou Azure PowerShell dans une fenêtre de terminal Linux.
Configurer votre environnement local
Ce guide de démarrage rapide utilise la bibliothèque Azure Identity avec Azure CLI ou Azure PowerShell pour authentifier l’utilisateur auprès des services Azure. Les développeurs peuvent également utiliser Visual Studio ou Visual Studio Code pour authentifier leurs appels. Pour plus d’informations, consultez Authentifier le client avec la bibliothèque cliente Azure Identity.
Connexion à Azure
Exécutez la commande
login
.az login
Si l’interface CLI peut ouvrir votre navigateur par défaut, elle le fait et charge une page de connexion Azure par la même occasion.
Sinon, ouvrez une page de navigateur à l’adresse https://aka.ms/devicelogin et entrez le code d’autorisation affiché dans votre terminal.
Dans le navigateur, connectez-vous avec les informations d’identification de votre compte.
Installer les packages
Dans un terminal ou une invite de commandes, créez un dossier de projet approprié, puis créez et activez un environnement virtuel Python comme décrit dans Utiliser des environnements virtuels Python.
Installez la bibliothèque d’identités Microsoft Entra :
pip install azure-identity
Installez la bibliothèque de client de clés Key Vault :
pip install azure-keyvault-keys
Créer un groupe de ressources et un coffre de clés
Utilisez la commande
az group create
pour créer un groupe de ressources :az group create --name myResourceGroup --location eastus
Si vous préférez, vous pouvez remplacer « eastus » par un emplacement plus proche de vous.
Utilisez
az keyvault create
pour créer le coffre de clés :az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup
Remplacez
<your-unique-keyvault-name>
par un nom unique à l’échelle d’Azure. La pratique courante consiste à utiliser son nom ou le nom de son entreprise et à ajouter des chiffres ou des identificateurs.
Définir la variable d’environnement KEY_VAULT_NAME
Notre script utilise la valeur attribuée à la variable d’environnement KEY_VAULT_NAME
comme nom du coffre de clés. Vous devez donc définir cette valeur à l’aide de la commande suivante :
export KEY_VAULT_NAME=<your-unique-keyvault-name>
Accorder l’accès à votre coffre de clés
Pour obtenir des autorisations sur votre coffre de clés par le Contrôle d’accès en fonction du rôle (RBAC), attribuez un rôle à votre « nom d’utilisateur principal » (UPN) à l’aide de la commande Azure CLI 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>"
Remplacez <upn>, <subscription-id>, <resource-group-name> et <your-unique-keyvault-name> par vos valeurs réelles. Votre nom d’utilisateur principal (UPN) se présente généralement sous la forme d’une adresse électronique (par exemple username@domain.com).
Créer l’exemple de code
La bibliothèque de client de clés Azure Key Vault pour Python vous permet de gérer des clés de chiffrement. L’exemple de code suivant vous montre comment créer un client et définir, récupérer et supprimer une clé.
Créez un fichier nommé kv_keys.py qui contient ce code.
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.")
Exécuter le code
Vérifiez que le code de la section précédente se trouve dans un fichier nommé kv_keys.py. Exécutez ensuite le code avec la commande suivante :
python kv_keys.py
Le fait de réexécuter le code avec le même nom de clé a pour effet de générer l’erreur : « La clé (en conflit) <name> est actuellement à l’état supprimé mais récupérable. » Utilisez un autre nom de clé.
Détails du code
Authentifier et créer un client
Les requêtes d’application vers les Services Azure doivent être autorisées. L’utilisation de la classe DefaultAzureCredential fournie par la bibliothèque de client Azure Identity est l’approche recommandée pour implémenter des connexions sans mot de passe aux services Azure dans votre code. DefaultAzureCredential
prend en charge plusieurs méthodes d’authentification et détermine quelle méthode doit être utilisée au moment de l’exécution. Cette approche permet à votre application d’utiliser différentes méthodes d’authentification dans différents environnements (local ou production) sans implémenter de code spécifique à l’environnement.
Dans ce guide de démarrage rapide, DefaultAzureCredential
s’authentifie auprès du coffre de clés à l’aide des informations d’identification de l’utilisateur de développement local connecté à Azure CLI. Quand l’application est déployée sur Azure, le même code DefaultAzureCredential
peut découvrir et utiliser automatiquement une identité managée affectée à un service d’application, une machine virtuelle ou d’autres services. Pour plus d’informations, consultez Vue d’ensemble des identités managées.
Dans l’exemple, le nom de votre coffre de clés est développé à l’aide de la valeur de la variable KVUri
, au format : « https://<your-key-vault-name>.vault.azure.net ».
credential = DefaultAzureCredential()
client = KeyClient(vault_url=KVUri, credential=credential)
Enregistrer une clé
Une fois que vous avez obtenu l’objet client pour le coffre de clés, vous pouvez stocker une clé à l’aide de la méthode create_rsa_key :
rsa_key = client.create_rsa_key(keyName, size=2048)
Vous pouvez aussi utiliser create_key ou create_ec_key.
L’appel d’une méthode create
génère un appel à l’API REST Azure pour le coffre de clés.
Au moment de traiter la requête, Azure authentifie l’identité de l’appelant (le principal du service) à partir de l’objet d’informations d’identification que vous avez fourni au client.
Récupérer une clé
Pour lire une clé à partir de Key Vault, utilisez la méthode get_key :
retrieved_key = client.get_key(keyName)
Vous pouvez aussi vérifier que la clé a été définie à l’aide de la commande Azure CLI az keyvault key show ou de la cmdlet Azure PowerShell Get-AzKeyVaultKey.
Supprimer une clé
Pour supprimer une clé, utilisez la méthode begin_delete_key :
poller = client.begin_delete_key(keyName)
deleted_key = poller.result()
La méthode begin_delete_key
est asynchrone et retourne un objet observateur. L’appel de la méthode result
de l’observateur attend la fin de son exécution.
Vous pouvez vérifier que la clé a été supprimée à l’aide de la commande Azure CLI az keyvault key show ou de la cmdlet Azure PowerShell Get-AzKeyVaultKey.
Une fois supprimée, une clé reste à l’état supprimé mais récupérable pour un temps. Si vous réexécutez le code, utilisez un nom de clé différent.
Nettoyer les ressources
Si vous voulez aussi tenter une expérience avec des certificats et des secrets, vous pouvez réutiliser le coffre de clés créé dans cet article.
Sinon, quand vous en avez terminé avec les ressources créées dans cet article, utilisez la commande suivante pour supprimer le groupe de ressources et toutes les ressources qu’il contient :
az group delete --resource-group myResourceGroup