Tutoriel : Utiliser Azure Key Vault avec une machine virtuelle dans .NET

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.

Dans ce tutoriel, vous allez vous procurer une application console pour lire des informations d’Azure Key Vault. L’application utilise l’identité managée de la machine virtuelle pour s’authentifier auprès de Key Vault.

Ce didacticiel explique les procédures suivantes :

  • Créez un groupe de ressources.
  • Création d’un coffre de clés
  • Ajoutez un secret au coffre de clés.
  • Récupération d’un secret à partir du coffre de clés.
  • Créez une machine virtuelle Azure.
  • Activer une identité managée pour la machine virtuelle.
  • Attribuez des autorisations à l’identité de machine virtuelle.

Avant de continuer, lisez les concepts de base de Key Vault.

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit.

Prérequis

Pour Windows, Mac et Linux :

Créer des ressources et affecter des autorisations

Avant de commencer à coder, vous devez créer des ressources, placer une clé secrète dans votre coffre de clés et affecter des autorisations.

Connexion à Azure

Connectez-vous à Azure en utilisant la commande suivante :

az login

Créer un groupe de ressources et un coffre de clés

Ce guide de démarrage rapide utilise un coffre de clés Azure créé au préalable. Vous pouvez créer un coffre de clés en suivant les étapes décrites dans le guide de démarrage rapide d’Azure CLI, le guide de démarrage rapide d’Azure PowerShell ou le guide de démarrage rapide du portail Azure.

Sinon, vous pouvez simplement exécuter les commandes Azure CLI ou Azure PowerShell ci-dessous.

Important

Chaque coffre de clés doit avoir un nom unique. Remplacez <your-unique-keyvault-name> par le nom de votre coffre de clés dans les exemples suivants.

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup"

Remplir votre coffre de clés avec un secret

Créons un secret appelé mySecret avec la valeur Success! . Il peut s’agir d’un mot de passe, d’une chaîne de connexion SQL ou de toute autre information que vous devez sécuriser et garder à disposition pour votre application.

Pour ajouter un secret au coffre de clés que vous venez de créer, utilisez la commande suivante :

az keyvault secret set --vault-name "<your-unique-keyvault-name>" --name "mySecret" --value "Success!"

Création d'une machine virtuelle

Créez une machine virtuelle Windows ou Linux en utilisant une des méthodes suivantes :

Windows Linux
Azure CLI Azure CLI
PowerShell PowerShell
Azure portal Azure portal

Affecter une identité à la machine virtuelle

Créez une identité affectée par le système pour la machine virtuelle à partir de l’exemple suivant :

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. La sortie de la commande ci-dessus doit être la suivante :

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

Attribuer des autorisations à l’identité de machine virtuelle

Attribuez les autorisations d’identité créées précédemment pour votre clé de coffres avec la commande az keyvault set-policy :

az keyvault set-policy --name '<your-unique-key-vault-name>' --object-id <VMSystemAssignedIdentity> --secret-permissions  get list set delete

Se connecter à la machine virtuelle

Pour vous connecter à la machine virtuelle, suivez les instructions de l’article Connexion à une machine virtuelle Azure exécutant Windows ou Se connecter à une machine virtuelle Linux dans Azure.

Modifier l’application console

Créez une application de console et installez les packages requis à l’aide de la commande dotnet.

Installez .NET Core

Pour installer .NET Core, accédez à la page de téléchargements .NET.

Créer et exécuter l’exemple d’application .NET

Ouvrez une invite de commandes.

Vous pouvez envoyer un message « Hello World » à la console en exécutant les commandes suivantes :

dotnet new console -n keyvault-console-app
cd keyvault-console-app
dotnet run

Installer le package

À partir de la fenêtre de la console, installez la bibliothèque de client Azure Key Vault Secrets pour .NET :

dotnet add package Azure.Security.KeyVault.Secrets

Pour ce guide de démarrage rapide, vous devez installer le package d’identité suivant pour vous authentifier auprès d’Azure Key Vault :

dotnet add package Azure.Identity

Modifier l’application console

Ouvrez le fichier Program.cs et ajoutez ces packages :

using System;
using Azure.Core;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

Ajoutez ces lignes, en mettant à jour l’URI pour refléter la valeur vaultUri de votre coffre de clés. Le code ci-dessous utilise 'DefaultAzureCredential()' pour l’authentification auprès du coffre de clés, en utilisant le jeton de l’identité managée par l’application pour s’authentifier. Il utilise également l’interruption exponentielle pour les nouvelles tentatives en cas de limitation du coffre de clés.

  class Program
    {
        static void Main(string[] args)
        {
            string secretName = "mySecret";
            string keyVaultName = "<your-key-vault-name>";
            var kvUri = "https://<your-key-vault-name>.vault.azure.net";
            SecretClientOptions options = new SecretClientOptions()
            {
                Retry =
                {
                    Delay= TimeSpan.FromSeconds(2),
                    MaxDelay = TimeSpan.FromSeconds(16),
                    MaxRetries = 5,
                    Mode = RetryMode.Exponential
                 }
            };

            var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential(),options);

            Console.Write("Input the value of your secret > ");
            string secretValue = Console.ReadLine();

            Console.Write("Creating a secret in " + keyVaultName + " called '" + secretName + "' with the value '" + secretValue + "' ...");

            client.SetSecret(secretName, secretValue);

            Console.WriteLine(" done.");

            Console.WriteLine("Forgetting your secret.");
            secretValue = "";
            Console.WriteLine("Your secret is '" + secretValue + "'.");

            Console.WriteLine("Retrieving your secret from " + keyVaultName + ".");

            KeyVaultSecret secret = client.GetSecret(secretName);

            Console.WriteLine("Your secret is '" + secret.Value + "'.");

            Console.Write("Deleting your secret from " + keyVaultName + " ...");

            client.StartDeleteSecret(secretName);

            System.Threading.Thread.Sleep(5000);
            Console.WriteLine(" done.");

        }
    }

Nettoyer les ressources

Quand ils ne sont plus nécessaires, supprimez la machine virtuelle et le coffre de clés.

Étapes suivantes