Didacticiel : Utiliser Azure Key Vault avec une machine virtuelle Windows dans PythonTutorial: Use Azure Key Vault with a Windows virtual machine in Python

Azure Key Vault vous permet de protéger des secrets tels que les clés API et les chaînes de connexion de base de données nécessaires pour accéder à vos applications, services et ressources.Azure Key Vault helps you to protect secrets such as API keys, the database connection strings you need to access your applications, services, and IT resources.

Dans ce tutoriel, vous allez vous procurer une application console pour lire des informations d’Azure Key Vault.In this tutorial, you learn how to get a console application to read information from Azure Key Vault. Pour ce faire, vous allez utiliser des identités managées pour des ressources Azure.To do so, you use managed identities for Azure resources.

Ce didacticiel explique les procédures suivantes :The tutorial shows you how to:

  • Création d’un coffre de clésCreate a key vault.
  • Ajoutez un secret au coffre de clés.Add a secret to the key vault.
  • Récupération d’un secret à partir du coffre de clés.Retrieve a secret from the key vault.
  • Créez une machine virtuelle Azure.Create an Azure virtual machine.
  • Activez une identité managée.Enable a managed identity.
  • Attribuez des autorisations à l’identité de machine virtuelle.Assign permissions to the VM identity.

Avant de continuer, lisez les concepts de base de Key Vault.Before you begin, read Key Vault basic concepts.

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit.If you don’t have an Azure subscription, create a free account.

PrérequisPrerequisites

Pour Windows, Mac et Linux :For Windows, Mac, and Linux:

  • GitGit
  • Ce didacticiel nécessite que vous exécutiez l’interface Azure CLI localement.This tutorial requires that you run the Azure CLI locally. Vous devez avoir installé Azure CLI 2.0.4 ou ultérieure.You must have the Azure CLI version 2.0.4 or later installed. Exécutez az --version pour trouver la version.Run az --version to find the version. Si vous devez installer ou mettre à niveau l’interface CLI, consultez l’article Installation d’Azure CLI 2.0.If you need to install or upgrade the CLI, see Install Azure CLI 2.0.

À propos de Managed Service Identity (MSI)About Managed Service Identity

Azure Key Vault stocke les informations d’identification de manière sécurisée, de façon à ce qu’elles n’apparaissent pas dans votre code.Azure Key Vault stores credentials securely, so they're not displayed in your code. Toutefois, vous devez vous authentifier auprès d’Azure Key Vault pour récupérer vos clés.However, you need to authenticate to Azure Key Vault to retrieve your keys. Pour vous authentifier auprès de Key Vault, vous avez besoin d’informations d’identification.To authenticate to Key Vault, you need a credential. Il s’agit d’un dilemme de démarrage classique.It's a classic bootstrap dilemma. Managed Service Identity (MSI) résout ce problème en fournissant une identité de démarrage.Managed Service Identity (MSI) solves this issue by providing a bootstrap identity that simplifies the process.

Lorsque vous activez MSI pour un service Azure, par exemple, Machines virtuelles Azure, Azure App Service ou Azure Functions, Azure crée un principal de service.When you enable MSI for an Azure service, such as Azure Virtual Machines, Azure App Service, or Azure Functions, Azure creates a service principal. MSI procède ainsi pour l’instance du service dans Azure Active Directory (Azure AD) et injecte les informations d’identification du principal de service dans cette instance.MSI does this for the instance of the service in Azure Active Directory (Azure AD) and injects the service principal credentials into that instance.

MSI

Ensuite, pour obtenir un jeton d’accès, votre code appelle un service de métadonnées local disponible dans la ressource Azure.Next, to get an access token, your code calls a local metadata service that's available on the Azure resource. Pour s’authentifier auprès d’un service Azure Key Vault, votre code utilise alors le jeton qu’il obtient du point de terminaison local MSI_ENDPOINT.To authenticate to an Azure Key Vault service, your code uses the access token that it gets from the local MSI endpoint.

Connexion à AzureLog in to Azure

Pour vous connecter à Azure à l’aide de l’interface CLI, entrez :To log in to Azure by using the Azure CLI, enter:

az login

Créer un groupe de ressourcesCreate a resource group

Un groupe de ressources Azure est un conteneur logique dans lequel les ressources Azure sont déployées et gérées.An Azure resource group is a logical container into which Azure resources are deployed and managed.

Créez un groupe de ressources avec la commande az group create.Create a resource group by using the az group create command.

Sélectionnez un nom de groupe de ressources et renseignez l’espace réservé.Select a resource group name and fill in the placeholder. L’exemple suivant crée un groupe de ressources dans l’emplacement USA Ouest :The following example creates a resource group in the West US location:

# To list locations: az account list-locations --output table
az group create --name "<YourResourceGroupName>" --location "West US"

Vous allez utiliser ce nouveau groupe de ressources tout au long du tutoriel.You use your newly created resource group throughout this tutorial.

Création d’un coffre de clésCreate a key vault

Pour créer un coffre de clés dans le groupe de ressources que vous avez créé à l’étape précédente, fournissez les informations suivantes :To create a key vault in the resource group that you created in the preceding step, provide the following information:

  • Nom du coffre de clés : chaîne de 3 à 24 caractères qui ne peut contenir que des chiffres (0-9), des lettres (a-z, A-Z) et des traits d’union (-).Key vault name: a string of 3 to 24 characters that can contain only numbers (0-9), letters (a-z, A-Z), and hyphens (-)
  • Nom de groupe ressourcesResource group name
  • Localisation : USA OuestLocation: West US
az keyvault create --name "<YourKeyVaultName>" --resource-group "<YourResourceGroupName>" --location "West US"

À ce stade, votre compte Azure est le seul autorisé à effectuer des opérations sur ce nouveau coffre.At this point, your Azure account is the only one that's authorized to perform operations on this new key vault.

Ajouter un secret au coffre de clésAdd a secret to the key vault

Nous allons ajouter un secret pour montrer comment cela fonctionne.We're adding a secret to help illustrate how this works. Il peut s’agir d’une chaîne de connexion SQL ou de toute autre information que vous devez sécuriser et garder à disposition pour votre application.The secret might be a SQL connection string or any other information that you need to keep both secure and available to your application.

Pour créer un secret dans le coffre de clés appelé AppSecret, tapez la commande suivante :To create a secret in the key vault called AppSecret, enter the following command:

az keyvault secret set --vault-name "<YourKeyVaultName>" --name "AppSecret" --value "MySecret"

Ce secret stocke la valeur MySecret.This secret stores the value MySecret.

Création d'une machine virtuelleCreate a virtual machine

Vous pouvez créer une machine virtuelle à l’aide de l’une des méthodes suivantes :You can create a virtual machine by using one of the following methods:

Affecter une identité à la machine virtuelleAssign an identity to the VM

Dans cette étape, vous créez une identité affectée par le système pour la machine virtuelle en exécutant la commande suivante dans Azure CLI :In this step, you create a system-assigned identity for the virtual machine by running the following command in the Azure CLI:

az vm identity assign --name <NameOfYourVirtualMachine> --resource-group <YourResourceGroupName>

Notez l’identité affectée par le système qui est affichée dans le code suivant.Note the system-assigned identity that's displayed in the following code. La sortie de la commande ci-dessus doit être la suivante :The output of the preceding command would be:

{
  "systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "userAssignedIdentities": {}
}

Attribuer des autorisations à l’identité de machine virtuelleAssign permissions to the VM identity

À présent, vous pouvez attribuer à votre coffre de clés les autorisations d’identité créées précédemment en exécutant la commande suivante :Now you can assign the previously created identity permissions to your key vault by running the following command:

az keyvault set-policy --name '<YourKeyVaultName>' --object-id <VMSystemAssignedIdentity> --secret-permissions get list

Connexion à la machine virtuelleLog on to the virtual machine

Pour vous connecter à la machine virtuelle, suivez les instructions de l’article Se connecter à une machine virtuelle Azure exécutant Windows.To log on to the virtual machine, follow the instructions in Connect and log on to an Azure virtual machine running Windows.

Créer et exécuter l’exemple d’application PythonCreate and run a sample Python app

La section suivante inclut un exemple de fichier nommé Sample.py.In the next section is an example file named Sample.py. Il utilise la bibliothèque requests pour effectuer des appels HTTP GET.It uses a requests library to make HTTP GET calls.

Modifier Sample.pyEdit Sample.py

Après avoir créé Sample.py, ouvrez le fichier et copiez le code dans cette section.After you create Sample.py, open the file, and then copy the code in this section.

Le code comprend deux étapes :The code presents a two-step process:

  1. Récupérer un jeton du point de terminaison MSI local sur la machine virtuelle.Fetch a token from the local MSI endpoint on the VM.
    Cela extrait également un jeton d’Azure AD.Doing so also fetches a token from Azure AD.
  2. Passez le jeton au coffre de clés et récupérez votre secret.Pass the token to your key vault, and then fetch your secret.
    # importing the requests library 
    import requests 

    # Step 1: Fetch an access token from a Managed Identity enabled azure resource.      
    # Note that the resource here is https://vault.azure.net for public cloud and api-version is 2018-02-01
    MSI_ENDPOINT = "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net"
    r = requests.get(MSI_ENDPOINT, headers = {"Metadata" : "true"}) 
      
    # extracting data in json format 
    # This request gets an access_token from Azure AD by using the local MSI endpoint.
    data = r.json() 
    
    # Step 2: Pass the access_token received from previous HTTP GET call to your key vault.
    KeyVaultURL = "https://prashanthwinvmvault.vault.azure.net/secrets/RandomSecret?api-version=2016-10-01"
    kvSecret = requests.get(url = KeyVaultURL, headers = {"Authorization": "Bearer " + data["access_token"]})
    
    print(kvSecret.json()["value"])

Vous pouvez afficher la valeur de secret en exécutant le code suivant :You can display the secret value by running the following code:

python Sample.py

Le code précédent montre comment effectuer des opérations avec Azure Key Vault dans une machine virtuelle Windows.The preceding code shows you how to do operations with Azure Key Vault in a Windows virtual machine.

Supprimer des ressourcesClean up resources

Quand ils ne sont plus nécessaires, supprimez la machine virtuelle et le coffre de clés.When they are no longer needed, delete the virtual machine and your key vault.

Étapes suivantesNext steps