Tutoriel : Utiliser une identité managée pour connecter Key Vault à une application web Azure dans .NET

Azure Key Vault permet de stocker les informations d’identification et d’autres secrets avec une sécurité accrue. Toutefois, votre code doit s’authentifier auprès de Key Vault pour les récupérer. Les identités managées pour Azure ressources résolvent ce problème en donnant Azure services une identité managée automatiquement dans Microsoft Entra ID. Votre code utilise cette identité pour s’authentifier auprès d’un service prenant en charge l’authentification Microsoft Entra, y compris Key Vault, sans incorporer d’informations d’identification dans le code.

Dans ce tutoriel, vous allez créer et déployer une application web Azure sur Azure App Service, puis utiliser une identité managée pour authentifier l’application auprès d’un coffre de clés à l’aide de la bibliothèque de client secret Azure Key Vault pour .NET et le Azure CLI. Les mêmes principes s’appliquent si vous utilisez une autre langue, Azure PowerShell ou le portail Azure.

Pour plus d’informations sur les applications web et le déploiement d’App Service, consultez :

Conditions préalables

Pour suivre ce didacticiel, vous avez besoin des éléments suivants :

Si vous avez déjà déployé une application web dans Azure App Service, passez à configurer l’application web pour vous connecter à Key Vault et modifier l’application pour accéder à votre key vault.

Créer une application .NET Core

Dans cette étape, configurez le projet .NET local.

Dans une fenêtre de terminal, créez un répertoire nommé akvwebapp et basculez vers celui-ci :

mkdir akvwebapp
cd akvwebapp

Créez une application web .NET à l’aide de la commande dotnet new web :

dotnet new web

Exécutez l’application localement pour voir comment elle se présente avant de la déployer sur Azure :

dotnet run

Dans un navigateur web, ouvrez l’application à l’adresse http://localhost:5000. Vous voyez le message « Hello World ! » de l’exemple d’application.

Pour plus d’informations sur la création d’applications web, consultez Créer une application web ASP.NET Core dans Azure App Service.

Déployer l’application sur Azure

Dans cette étape, déployez l’application .NET sur Azure App Service à l’aide du déploiement zip. Zip Deploy est le mécanisme de déploiement par package recommandé pour App Service. Pour la livraison continue à partir du contrôle de code source, utilisez GitHub Actions ou Azure DevOps Pipelines à la place.

Créer un groupe de ressources

Créez un groupe de ressources pour contenir le coffre de clés et l’application web à l’aide d’az group create :

az group create --name "<resource-group>" --location "EastUS"

Créer un plan App Service

Créez un plan App Service à l’aide d’az appservice plan create. L’exemple suivant crée un plan nommé myAppServicePlan dans le niveau gratuit (FREE) :

az appservice plan create --name myAppServicePlan --resource-group <resource-group> --sku FREE

Créer une application web

Créez une application web Azure dans le myAppServicePlan plan.

Important

Comme un coffre de clés, une application web Azure doit avoir un nom global unique. Remplacez <webapp-name> par le nom de votre application web.

az webapp create --resource-group "<resource-group>" --plan "myAppServicePlan" --name "<webapp-name>"

Accédez à la nouvelle application pour confirmer qu’elle est en cours d’exécution :

https://<webapp-name>.azurewebsites.net

Vous voyez la page par défaut d’une nouvelle application web Azure.

Déployer votre application locale avec zip deploy

À partir du répertoire du akvwebapp projet, générez le projet et créez un fichier zip de déploiement :

dotnet publish -c Release -o ./publish
cd publish
zip -r ../akvwebapp.zip .
cd ..

Conseil / Astuce

Sur Windows sans zip, utilisez PowerShell : Compress-Archive -Path .\publish\* -DestinationPath .\akvwebapp.zip.

Déployez le fichier zip sur votre application web à l’aide d’az webapp deploy :

az webapp deploy --resource-group "<resource-group>" --name "<webapp-name>" --src-path ./akvwebapp.zip --type zip

Actualisez l’application déployée dans votre navigateur web :

https://<webapp-name>.azurewebsites.net

Vous voyez le même message « Hello World ! » que vous avez vu à http://localhost:5000.

Configurer l’application web pour se connecter à Key Vault

Dans cette section, vous allez autoriser l’application web à accéder à Key Vault et à mettre à jour le code de votre application pour récupérer un secret.

Créer et attribuer l’accès à une identité managée

Utilisez une identité managée pour authentifier l’application web pour Key Vault. Une identité managée supprime la nécessité de gérer les informations d’identification dans le code.

Créez l’identité de l’application à l’aide de az webapp identity assign :

az webapp identity assign --name "<webapp-name>" --resource-group "<resource-group>"

La commande retourne un extrait de code JSON similaire à ceci :

{
  "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "type": "SystemAssigned"
}

Pour obtenir des autorisations sur votre coffre de clés via Role-Based Access Control (RBAC), attribuez un rôle à votre nom d’utilisateur principal (UPN) à l’aide de la commande Azure CLI az role assignment create.

az role assignment create --role "Key Vault Secrets User" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"

Remplacez <upn>, <subscription-id>et <vault-name> par vos valeurs réelles. Si vous avez utilisé un autre nom de groupe de ressources, remplacez également « myResourceGroup ». Votre nom d’utilisateur principal (UPN) se présente généralement sous la forme d’une adresse électronique (par exemple username@domain.com).

Modifier l’application pour accéder à votre coffre de clés

Ce didacticiel utilise la bibliothèque de client secret Azure Key Vault. Vous pouvez également utiliser la bibliothèque de client de certificat Azure Key Vault ou la bibliothèque de client de clé Azure Key Vault.

Installer les packages

À partir de la fenêtre de terminal, installez la bibliothèque cliente secrète Azure Key Vault et la bibliothèque de client Azure Identity :

dotnet add package Azure.Identity
dotnet add package Azure.Security.KeyVault.Secrets

Mettez à jour le code

Ouvrez Program.cs dans votre projet akvwebapp.

Ajoutez ces using directives en haut du fichier :

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

Ajoutez les lignes suivantes avant l’appel app.MapGet , en mettant à jour <vault-name> avec le nom de votre coffre de clés. Ce code utilise DefaultAzureCredential pour s'authentifier auprès de Key Vault via l'identité managée de l'application web. Pour plus d’informations, consultez le guide du développeur. Le code configure également un backoff exponentiel pour les nouvelles tentatives en cas de limitation du coffre de clés. Pour plus d’informations sur les limites de transaction, consultez le guide sur la limitation du débit d’Azure Key Vault.

SecretClientOptions options = new SecretClientOptions()
    {
        Retry =
        {
            Delay= TimeSpan.FromSeconds(2),
            MaxDelay = TimeSpan.FromSeconds(16),
            MaxRetries = 5,
            Mode = RetryMode.Exponential
         }
    };
var client = new SecretClient(new Uri("https://<vault-name>.vault.azure.net/"), new DefaultAzureCredential(), options);

KeyVaultSecret secret = client.GetSecret("<secret-name>");

string secretValue = secret.Value;

Mettez à jour la ligne app.MapGet("/", () => "Hello World!"); en :

app.MapGet("/", () => secretValue);

Enregistrez vos modifications.

Redéployez votre application web

Reconstruire le package de déploiement et le redéployer :

dotnet publish -c Release -o ./publish
cd publish
zip -r ../akvwebapp.zip .
cd ..
az webapp deploy --resource-group "<resource-group>" --name "<webapp-name>" --src-path ./akvwebapp.zip --type zip

Accéder à votre application web terminée

https://<webapp-name>.azurewebsites.net

Là où vous avez vu « Hello World ! », vous voyez maintenant la valeur de votre secret.

Étapes suivantes