Démarrage rapide : Bibliothèque de client de certificats Azure Key Vault pour Python
Bien démarrer avec la bibliothèque de client de certificats Azure Key Vault pour Python. Suivez les étapes ci-dessous pour installer le package et tester un exemple de code relatif à des tâches de base. En stockant des certificats à 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 2.7 ou versions ultérieures ou 3.6 ou versions ultérieures
- Azure CLI
Ce guide de démarrage rapide suppose que vous exécutez Azure CLI 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 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 de client 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 Azure Active Directory :
pip install azure.identity
Installez la bibliothèque de client de certificats Key Vault :
pip install azure-keyvault-certificates
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
Créer une stratégie d’accès pour votre coffre de clés qui accorde une autorisation de certificat à votre compte d’utilisateur
az keyvault set-policy --name <your-unique-keyvault-name> --upn user@domain.com --certificate-permissions delete get list create
Créer l’exemple de code
La bibliothèque de client de certificats Azure Key Vault pour Python vous permet de gérer les certificats. L’exemple de code suivant montre comment créer un client et comment définir, récupérer et supprimer un certificat.
Créez un fichier nommé kv_certificates.py qui contient ce code.
import os
from azure.keyvault.certificates import CertificateClient, CertificatePolicy,CertificateContentType, WellKnownIssuerNames
from azure.identity import DefaultAzureCredential
keyVaultName = os.environ["KEY_VAULT_NAME"]
KVUri = "https://" + keyVaultName + ".vault.azure.net"
credential = DefaultAzureCredential()
client = CertificateClient(vault_url=KVUri, credential=credential)
certificateName = input("Input a name for your certificate > ")
print(f"Creating a certificate in {keyVaultName} called '{certificateName}' ...")
policy = CertificatePolicy.get_default()
poller = client.begin_create_certificate(certificate_name=certificateName, policy=policy)
certificate = poller.result()
print(" done.")
print(f"Retrieving your certificate from {keyVaultName}.")
retrieved_certificate = client.get_certificate(certificateName)
print(f"Certificate with name '{retrieved_certificate.name}' was found'.")
print(f"Deleting your certificate from {keyVaultName} ...")
poller = client.begin_delete_certificate(certificateName)
deleted_certificate = 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_certificates.py. Exécutez ensuite le code avec la commande suivante :
python kv_certificates.py
- Si vous rencontrez des erreurs d’autorisation, vérifiez que vous avez exécuté la commande
az keyvault set-policy
. - Le fait de réexécuter le code avec le même nom de clé peut produire l’erreur suivante : « (Conflit) Le certificat <name> est actuellement à l’état supprimé, mais récupérable. » Utilisez un nom de clé différent.
Détails du code
Authentifier et créer un client
Dans ce guide de démarrage rapide, l’utilisateur connecté est utilisé pour l’authentification auprès du coffre de clés, qui est la méthode recommandée pour le développement local. Pour les applications déployées sur Azure, l’identité managée doit être affectée à App Service ou à une machine virtuelle. Pour plus d’informations, consultez Vue d’ensemble des identités managées.
Dans l’exemple ci-dessous, le nom de votre coffre de clés est étendu à l’URI du coffre de clés, au format https://\<your-key-vault-name\>.vault.azure.net
. Cet exemple utilise la classe « DefaultAzureCredential() », qui permet d’utiliser le même code dans différents environnements avec des options différentes pour fournir une identité. Pour plus d’informations, consultez Authentification des informations d’identification Azure par défaut.
credential = DefaultAzureCredential()
client = CertificateClient(vault_url=KVUri, credential=credential)
Enregistrer un certificat
Une fois que vous avez obtenu l’objet client pour le coffre de clés, vous pouvez créer un certificat en utilisant la méthode begin_create_certificate :
policy = CertificatePolicy.get_default()
poller = client.begin_create_certificate(certificate_name=certificateName, policy=policy)
certificate = poller.result()
Ici, le certificat a besoin d’une stratégie obtenue avec la méthode CertificatePolicy.get_default.
L’appel d’une méthode begin_create_certificate
génère un appel asynchrone à l’API REST Azure pour le coffre de clés. L’appel asynchrone retourne un objet observateur. Pour attendre le résultat de l’opération, appelez la méthode result
de l’observateur.
Au moment de traiter la demande, 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 un certificat
Pour lire un certificat à partir de Key Vault, utilisez la méthode get_certificate :
retrieved_certificate = client.get_certificate(certificateName)
Vous pouvez aussi vérifier que le certificat a été défini avec la commande Azure CLI az keyvault certificate show.
Supprimer un certificat
Pour supprimer un certificat, utilisez la méthode begin_delete_certificate :
poller = client.begin_delete_certificate(certificateName)
deleted_certificate = poller.result()
La méthode begin_delete_certificate
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 le certificat est supprimé avec la commande Azure CLI az keyvault certificate show.
Une fois supprimé, un certificat reste à l’état supprimé mais récupérable pour un temps. Si vous réexécutez le code, utilisez un nom de certificat différent.
Nettoyer les ressources
Si vous voulez aussi tenter une expérience avec des secrets et des clés, 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