Lire Azure Key Vault dans une application .NET Core
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…
- Azure Blob Storage
- Lire Azure Key Vault dans une application .NET Core
- Créer une ressource Azure Key Vault
- Déployer une Azure Static Web App à partir de Azure DevOps
- Synchroniser une Azure SQL Database avec une base de données locale
Prérequis
- Approvisionner une ressource Azure Key Vault sous votre souscription Azure. Pour savoir comment faire consulter cet article.
- Visual Studio 2019/2022 pour initier le projet .NET Core.
- Déployer votre Api/Web App sur Azure.
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.
- Au niveau de la ressource Key Vault, sélectionnez le menu « Secrets ».
- Ensuite Cliquez sur « Generate/Import ».
- Puis entrez le nom et la valeur du secret.
- Nom : myPassword
- Valeur : 12345
- S’assurer que le secret est activé.
- Enfin cliquez sur « Create ».
Créer un nouveau projet ASP.NET Core Web API .NET 6
- Lancez Visual Studio et Créer un nouveau projet ASP.NET Core Web API.
- Ajouter un nouveau contrôleur au projet avec une action par défaut.
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.
{ "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.
- Allez dans le menu Stratégie des accès.
- Cliquez sur Ajouter une stratégie des accès.
- 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.
- Ensuite, sélectionnez le principal correspondant à votre Web app ou API app Azure, ou tout autre service Azure.
- Enfin Cliquez sur Ajouter.
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.
- 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 ».
- Ensuite « Ajouter une nouvelle dépendance de service » et choisir « Secrets.json (Local) »
- Cliquez sur « Suivant » puis « Fin ».
- Une fois le service créé, cliquez sur « … » puis choisir « Gérer les secrètes utilisateur »
- 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.