Lire Azure Key Vault dans une application .NET Core

Lire Azure Key Vault dans une application .NET Core
Partager

Dans cet article nous allons découvrir comment lire Azure Key Vault dans une application .NET Core.

Pour plus d’information sur Azure Key Vault, consultez l’article suivant : Créer une ressource Azure Key Vault

A lire aussi…

Prérequis

Ajouter un secret dans la Key Vault

Commençons par ajouter un nouveau secret dans la Key Vault que vous allez l’utiliser dans votre application.

  1. Au niveau de la ressource Key Vault, sélectionnez le menu « Secrets ».
  2. Ensuite Cliquez sur « Generate/Import ».
  3. Puis entrez le nom et la valeur du secret.
    • Nom : myPassword
    • Valeur : 12345
  4. S’assurer que le secret est activé.
  5. Enfin cliquez sur « Create ».
Créer une ressource Azure Key Vault
Créer un secrète dans Azure Key Vault

Créer un nouveau projet ASP.NET Core Web API .NET 6

  1. Lancez Visual Studio et Créer un nouveau projet ASP.NET Core Web API.
  2. Ajouter un nouveau contrôleur au projet avec une action par défaut.

Créer un projet .NET 6

Préparez votre projet pour lire le secret de la Key Vault

Voici les étapes à suivre afin de lire Azure Key Vault dans une application .Net Core.

Les packages Nuget

Voici les packages à installer dans votre projet :

PM> Install-Package Azure.Security.KeyVault.Secrets -Version 4.3.0
PM> Install-Package Microsoft.Azure.KeyVault -Version 3.0.5
PM> Install-Package Microsoft.Azure.Services.AppAuthentication -Version 1.6.2
PM> Install-Package Microsoft.Extensions.Azure -Version 1.1.1

PM> Install-Package Microsoft.Extensions.Configuration.AzureKeyVault -Version 3.1.23

Dans le fichier de configuration appsettings.json

Récupérez l’URI de la Key Vault depuis la ressource sur Azure. Puis la mettre dans le fichier App Settings du projet.

Azure Key Vault Overview

{
    "VaultUri": "https://keyvault.vault.azure.net/"
}

Dans la class Program.cs

Ici on va ajouter notre Key Vault en tant qu’une partie de la Configuration.

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((context, config) =>
            {
                var configuration = config.Build();
                var keyVaultEndpoint = configuration["VaultUri"];
                if (!string.IsNullOrEmpty(keyVaultEndpoint))
                {
                    var azureServiceTokenProvider = new AzureServiceTokenProvider();
                    var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
                    config.AddAzureKeyVault(keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
                }

            }).ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });

A l’initialisation de votre service ou Controller

Injecter IConfiguration dans le constructeur du contrôleur ou l’instance de votre service, là où vous aurez besoin de récupérer la valeur de votre secrète.

[Route("api/[controller]")]
[ApiController]

public class HealthController : ControllerBase
{
     private readonly IConnectionString _secretManager;
     private readonly IConfiguration _configuration;

     public HealthController(IConnectionString secretManager, IConfiguration configuration)
     {
         _secretManager = secretManager;
         _configuration = configuration;
     }
 }

Au niveau votre Action Controller ou méthode de service

Pour la valeur du secrète utiliser l’instruction classique pour accéder à n’importe quel paramètre dans votre fichier settings.

[HttpGet("secret")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<IActionResult> GetSecret()
{
     var secret = _configuration["myPassword"];
     return Ok($"the secret: {secret}");
}

Autorisez votre Api/Web App à accéder à la Key Vault

Finalement, pour que notre application puisse accéder aux différents éléments stockés dans la Key Vault. Vous devez autoriser votre application déployée sur Azure à accéder à cette dernière à travers le menu Stratégie des accès dans la ressource Key Vault.

Les stratégies d’accès de la Key Vault détermine les permissions et les autorisations à mettre en place afin qu’un utilisateur, un groupe ou une application puisse accéder aux secrètes, clés et certificats.

  1. Allez dans le menu Stratégie des accès.
  2. Cliquez sur Ajouter une stratégie des accès.
  3. Dans l’écran « Ajouter une stratégie d’accès » vous pouvez définir les autorisation sur chacune des éléments de la Key Vault : clé, secrète ou certificat.
  4. Ensuite, sélectionnez le principal correspondant à votre Web app ou API app Azure, ou tout autre service Azure.
  5. Enfin Cliquez sur Ajouter.
Stratégie des accès azure Key Vault

Lire la Key Vault lors d’un debug locale

Lorsque vous êtes en phase de développement ou de debug sur votre machine locale, vous aurez surement besoin d’accéder aux secrètes dans la Key Vault. Ceci n’est pas possible alors de votre application en local n’est pas et ne peut pas être autorisée à accéder votre ressource Key Vault sur Azure. Néo moins une solution existe permettant de simuler la Key Vault en locale.

  1. Dans l’explorateur de solution de Visual Studio de votre projet, click droit sur « Services Connectés » et choisir « Gérer les services connectés ».
  2. Ensuite « Ajouter une nouvelle dépendance de service » et choisir « Secrets.json (Local) »
  3. Cliquez sur « Suivant » puis « Fin ».
  4. Une fois le service créé, cliquez sur « … » puis choisir « Gérer les secrètes utilisateur »
  5. Dans le fichier « secrets.json » ajoutez la paire clé/valeur de votre secrète, en spécifiant la valeur que vous voulez utiliser en locale.

Ceci reste transparent pour votre code, aucune modification n’est nécessaire.

local secret
local secret
lire azure key vault local debug
lire azure key vault local debug
secrets.json

Partager

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *