Didacticiel : Utiliser une machine virtuelle Linux et une application Python pour stocker des secrets dans Azure Key VaultTutorial: Use a Linux VM and a Python app to store secrets in Azure Key Vault

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 informatiques.Azure Key Vault helps you protect secrets such as the API keys and database connection strings needed to access your applications, services, and IT resources.

Dans ce tutoriel, vous allez configurer une application web Azure pour lire des informations dans Azure Key Vault à l’aide d’identités managées pour les ressources Azure.In this tutorial, you set up an Azure web application to read information from Azure Key Vault by using managed identities for Azure resources. Vous allez apprendre à effectuer les actions suivantes :You learn how to:

  • Création d’un coffre de clésCreate a key vault
  • Stocker un secret dans votre coffre de clésStore a secret in your key vault
  • Créer une machine virtuelle LinuxCreate a Linux virtual machine
  • Activer une identité managée pour la machine virtuelleEnable a managed identity for the virtual machine
  • Octroyer les autorisations nécessaires à l’application console pour lire les données provenant du coffre de clésGrant the required permissions for the console application to read data from the key vault
  • Récupérer un secret dans votre coffre de clésRetrieve a secret from your key vault

Avant d’aller plus loin, assurez-vous d’avoir bien compris les concepts de base sur Key Vault.Before you go any further, make sure you understand the basic concepts about Key Vault.

PrérequisPrerequisites

Utiliser Azure Cloud ShellUse Azure Cloud Shell

Azure héberge Azure Cloud Shell, un environnement d’interpréteur de commandes interactif que vous pouvez utiliser dans votre navigateur.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell vous permet d’utiliser bash ou PowerShell pour travailler avec les services Azure.Cloud Shell lets you use either bash or PowerShell to work with Azure services. Vous pouvez utiliser les commandes préinstallées Cloud Shell pour exécuter le code de cet article sans avoir à installer quoi que ce soit dans votre environnement local.You can use the Cloud Shell pre-installed commands to run the code in this article without having to install anything on your local environment.

Pour lancer Azure Cloud Shell :To launch Azure Cloud Shell:

OptionOption Exemple/LienExample/Link
Sélectionnez Essayer dans le coin supérieur droit d’un bloc de code.Select Try It in the upper-right corner of a code block. La sélection de Essayer ne copie pas automatiquement le code dans Cloud Shell.Selecting Try It doesn't automatically copy the code to Cloud Shell. Exemple Essayer pour Azure Cloud Shell
Accédez à https://shell.azure.com ou sélectionnez le bouton Lancer Cloud Shell pour ouvrir Cloud Shell dans votre navigateur.Go to https://shell.azure.com or select the Launch Cloud Shell button to open Cloud Shell in your browser. Lancer Cloud Shell dans une nouvelle fenêtreLaunch Cloud Shell in a new window
Sélectionnez le bouton Cloud Shell dans la barre de menus en haut à droite du portail Azure.Select the Cloud Shell button on the top-right menu bar in the Azure portal. Bouton Cloud Shell du portail Azure

Pour exécuter le code de cet article dans Azure Cloud Shell :To run the code in this article in Azure Cloud Shell:

  1. Lancez Cloud Shell.Launch Cloud Shell.

  2. Sélectionnez le bouton Copier dans un bloc de code pour copier le code.Select the Copy button on a code block to copy the code.

  3. Collez le code dans la session Cloud Shell avec Ctrl+Maj+V sur Windows et Linux, ou Cmd+ Maj+V sur macOS.Paste the code into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS.

  4. Appuyez sur Entrée pour exécuter le code.Press Enter to run the code.

Comprendre Managed Service IdentityUnderstand Managed Service Identity

Azure Key Vault peut stocker les informations d’identification de manière sécurisée, en dehors de votre code.Azure Key Vault can store credentials securely so they aren’t in your code. Pour les récupérer, vous devez vous authentifier auprès d’Azure Key Vault.To retrieve them, you need to authenticate to Azure Key Vault. Toutefois, pour vous authentifier auprès de Key Vault, vous avez besoin d’informations d’identification.However, to authenticate to Key Vault, you need a credential. Il s’agit d’un problème de démarrage classique.It's a classic bootstrap problem. Avec Azure et Azure Active Directory (Azure AD), Managed Service Identity (MSI) offre une identité de démarrage qui simplifie le démarrage.Through Azure and Azure Active Directory (Azure AD), Managed Service Identity (MSI) provides a bootstrap identity that makes it simpler to get things started.

Quand vous activez MSI pour un service Azure comme Machines virtuelles, App Service ou Functions, Azure crée un principal de service pour l’instance du service dans Azure AD.When you enable MSI for an Azure service like Virtual Machines, App Service, or Functions, Azure creates a service principal for the instance of the service in Azure AD. Il injecte les informations d’identification du principal de service dans l’instance du service.It injects the credentials for the service principal into the instance of the service.

MSI

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

Connexion à AzureSign in to Azure

Pour vous connecter à Azure à l’aide de l’interface CLI Azure, entrez ceci :To sign 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 à l’aide de la commande az group create à l’emplacement USA Ouest avec le code suivant.Create a resource group by using the az group create command in the West US location with the following code. Remplacez YourResourceGroupName par un nom de votre choix.Replace YourResourceGroupName with a name of your choice.

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

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

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

Ensuite, vous créez un coffre de clés dans le groupe de ressources que vous avez créé à l’étape précédente.Next, you create a key vault in the resource group that you created in the previous step. Fournissez les informations suivantes :Provide the following information:

  • Nom du coffre de clés : le nom doit être une chaîne de 3 à 24 caractères et contenir uniquement les caractères 0-9, a-z, A-Z et des traits d’union (-).Key vault name: The name must be a string of 3-24 characters and must contain only 0-9, a-z, A-Z, and hyphens (-).
  • Nom du groupe de ressources.Resource group name.
  • Localisation : USA Ouest.Location: 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 any operations on this new 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. Vous souhaiterez peut-être stocker une chaîne de connexion SQL ou toute autre information qui doit être à la fois sécurisée et disponible pour votre application.You might want to store a SQL connection string or any other information that needs to be both kept secure and available to your application.

Saisissez les commandes suivantes pour créer un secret dans le coffre de clés appelé AppSecret.Type the following commands to create a secret in the key vault called AppSecret. Ce secret stockera la valeur MySecret.This secret will store the value MySecret.

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

Créer une machine virtuelle LinuxCreate a Linux virtual machine

Créez une machine virtuelle avec la commande az vm create.Create a VM by using the az vm create command.

L’exemple suivant crée une machine virtuelle nommée myVM et ajoute un compte d’utilisateur nommé azureuser.The following example creates a VM named myVM and adds a user account named azureuser. Le paramètre --generate-ssh-keys génère automatiquement une clé SSH qu’il place dans l’emplacement de clé par défaut ( ~/.ssh).The --generate-ssh-keys parameter automatically generates an SSH key and puts it in the default key location (~/.ssh). Pour créer un ensemble spécifique de clés à la place, utilisez l’option --ssh-key-value.To create a specific set of keys instead, use the --ssh-key-value option.

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --image UbuntuLTS \
  --admin-username azureuser \
  --generate-ssh-keys

La création de la machine virtuelle et des ressources de support ne nécessite que quelques minutes.It takes a few minutes to create the VM and supporting resources. L’exemple de sortie suivant illustre la création réussie d’une machine virtuelle :The following example output shows that the VM creation was successful:

{
  "fqdns": "",
  "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
  "location": "westus",
  "macAddress": "00-00-00-00-00-00",
  "powerState": "VM running",
  "privateIpAddress": "XX.XX.XX.XX",
  "publicIpAddress": "XX.XX.XXX.XXX",
  "resourceGroup": "myResourceGroup"
}

Notez votre propre publicIpAddress dans la sortie à partir de votre machine virtuelle.Make a note of your own publicIpAddress in the output from your VM. Vous utiliserez cette adresse pour accéder à la machine virtuelle dans des étapes ultérieures.You'll use this address to access the VM in later steps.

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

Créez une identité affectée par le système pour la machine virtuelle en exécutant la commande suivante :Create a system-assigned identity to the virtual machine by running the following command:

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

La sortie de la commande est la suivante.The output of the command is as follows.

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

Notez la valeur de systemAssignedIdentity.Make a note of the systemAssignedIdentity. Vous l’utiliserez à l’étape suivante.You use it the next step.

Donner l’autorisation d’identité de la machine virtuelle au coffre de clésGive the VM identity permission to Key Vault

Maintenant, vous pouvez donner l’autorisation de coffre de clés à l’identité que vous avez créée.Now you can give Key Vault permission to the identity you created. Exécutez la commande suivante :Run the following command:

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

Se connecter à la machine virtuelleLog in to the VM

Connectez-vous à la machine virtuelle à l’aide d’un terminal.Log in to the virtual machine by using a terminal.

ssh azureuser@<PublicIpAddress>

Installer la bibliothèque Python sur la machine virtuelleInstall Python library on the VM

Téléchargez et installez la bibliothèque Python requests pour effectuer des appels HTTP GET.Download and install the requests Python library to make HTTP GET calls.

Créer, modifier et exécuter l’exemple d’application PythonCreate, edit, and run the sample Python app

Créez un fichier Python appelé Sample.py.Create a Python file called Sample.py.

Ouvrez Sample.py et modifiez-le pour qu’il contienne le code suivant :Open Sample.py and edit it to contain the following code:

# importing the requests library
  import requests
  
# Step 1: Fetch an access token from an MSI-enabled Azure resource      
  # Note that the resource here is https://vault.azure.net for the 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 Active Directory by using the local MSI endpoint
  data = r.json()

# Step 2: Pass the access token received from the previous HTTP GET call to the 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"])

Le code précédent exécute un processus en deux étapes :The preceding code performs a two-step process:

  1. Il récupère un jeton du point de terminaison MSI local sur la machine virtuelle.Fetches a token from the local MSI endpoint on the VM. Le point de terminaison récupère alors un jeton d’Azure Active Directory.The endpoint then fetches a token from Azure Active Directory.
  2. Il passe le jeton au coffre de clés et récupère votre secret.Passes the token to the key vault and fetches your secret.

Exécutez la commande ci-dessous.Run the following command. Vous devriez voir la valeur du secret.You should see the secret value.

python Sample.py

Dans ce tutoriel, vous avez appris à utiliser Azure Key Vault avec une application Python exécutée sur une machine virtuelle Linux.In this tutorial, you learned how to use Azure Key Vault with a Python app running on a Linux virtual machine.

Supprimer des ressourcesClean up resources

Supprimez le groupe de ressources, la machine virtuelle et toutes les ressources associées quand vous n’en avez plus besoin.Delete the resource group, virtual machine, and all related resources when you no longer need them. Pour ce faire, sélectionnez le groupe de ressources de la machine virtuelle et sélectionnez Supprimer.To do so, select the resource group for the VM and select Delete.

Supprimez le coffre de clés à l’aide de la commande az keyvault delete :Delete the key vault by using the az keyvault delete command:

az keyvault delete --name
                   [--resource-group]
                   [--subscription]

Étapes suivantesNext steps