Partager via


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. Identités managées pour les ressources Azure aident à résoudre ce problème en fournissant aux services Azure une identité managée automatiquement dans Microsoft Entra ID. Vous pouvez utiliser cette identité pour vous authentifier auprès de n’importe quel service prenant en charge l’authentification Microsoft Entra, y compris Key Vault, sans avoir à afficher les informations d’identification dans votre code.

Dans ce tutoriel, vous allez créer et déployer Azure application web sur Azure App Service. Vous utiliserez une identité managée pour authentifier votre application web Azure avec un Azure key vault à l'aide de Azure Key Vault bibliothèque de client secrète pour .NET et le Azure CLI. Les mêmes principes de base s’appliquent lorsque vous utilisez le langage de développement de votre choix, Azure PowerShell et/ou le portail Azure.

Pour plus d’informations sur les applications web du service Azure App et le déploiement présentés dans ce tutoriel, consultez :

Conditions préalables

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

Si votre application web est déjà déployée dans Azure App Service, vous pouvez passer à configurer l’accès à un coffre de clés et modifier le code de l’application web sections.

Créer une application .NET Core

Dans cette étape, vous allez configurer le projet local .NET Core.

Dans une fenêtre de terminal sur votre machine, créez un répertoire nommé akvwebapp et faites-en le répertoire actuel.

mkdir akvwebapp
cd akvwebapp

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

dotnet new web

Exécutez l’application localement pour savoir comment elle doit ressembler lorsque vous la déployez sur Azure :

dotnet run

Dans un navigateur web, accédez à l’application à l’adresse http://localhost:5000.

Vous verrez le message « Hello World ! » de l'exemple d'application affiché sur la page.

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

Déployer l’application sur Azure

Dans cette étape, vous allez déployer votre application .NET Core sur Azure App Service à l'aide de Git local. Pour plus d’informations sur la création et le déploiement d’applications, consultez Créer une application web ASP.NET Core dans Azure.

Configurer le déploiement Git local

Dans la fenêtre de terminal, sélectionnez Ctrl+C pour fermer le serveur web. Initialisez un référentiel Git pour le projet .NET Core :

git init --initial-branch=main
git add .
git commit -m "first commit"

Vous pouvez utiliser FTP et Git local pour déployer une application web Azure à l’aide d’un utilisateur deployment. Après avoir configuré votre utilisateur de déploiement, vous pouvez l’utiliser pour tous vos déploiements Azure. Le nom d’utilisateur et le mot de passe de votre déploiement au niveau du compte diffèrent de vos informations d’identification d’abonnement Azure.

Pour configurer l’utilisateur de déploiement, exécutez la commande az webapp deployment user set. Choisissez un nom d’utilisateur et un mot de passe conformes à ces instructions :

  • Le nom d’utilisateur doit être unique dans Azure. Pour les envois (push) Git locaux, il ne peut pas contenir d’arobase (@).
  • Le mot de passe doit comporter au moins huit caractères et inclure deux des trois éléments suivants : lettres, chiffres et symboles.
az webapp deployment user set --user-name "<username>" --password "<password>"

La sortie JSON affiche le mot de passe comme étant null. Si vous obtenez une erreur 'Conflict'. Details: 409, modifiez le nom d’utilisateur. Si vous obtenez une erreur 'Bad Request'. Details: 400, utilisez un mot de passe plus fort.

Enregistrez votre nom d’utilisateur et votre mot de passe afin de pouvoir les utiliser pour déployer vos applications web.

Créer un groupe de ressources

Un groupe de ressources est un conteneur logique dans lequel vous déployez des ressources Azure et les gérez. Créez un groupe de ressources pour y mettre à la fois votre coffre de clés et votre application web à l’aide de la commande az group create :

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

Créer un plan App Service

Créez un plan App Service à l’aide de la commande Azure CLI az appservice create. Cet exemple crée un plan App Service nommé myAppServicePlan dans le niveau tarifaire FREE :

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

Lorsque le plan App Service est créé, le Azure CLI affiche des informations similaires à ce que vous voyez ici :

{ 
  "adminSiteName": null,
  "appServicePlanName": "myAppServicePlan",
  "geoRegion": "West Europe",
  "hostingEnvironmentProfile": null,
  "id": "/subscriptions/0000-0000/resourceGroups/<resource-group>/providers/Microsoft.Web/serverfarms/myAppServicePlan",
  "kind": "app",
  "location": "West Europe",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  < JSON data removed for brevity. >
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
} 

Pour plus d’informations, consultez Manage d’un plan App Service dans Azure.

Créer une application web

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

Important

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

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

Lorsque l’application web est créée, la Azure CLI affiche une sortie similaire à ce que vous voyez ici :

Local git is configured with url of 'https://<username>@<your-webapp-name>.scm.azurewebsites.net/<ayour-webapp-name>.git'
{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "clientCertExclusionPaths": null,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "<your-webapp-name>.azurewebsites.net",
  "deploymentLocalGitUrl": "https://<username>@<your-webapp-name>.scm.azurewebsites.net/<your-webapp-name>.git",
  "enabled": true,
  < JSON data removed for brevity. >
}

L’URL du Git distant est indiquée dans la propriété deploymentLocalGitUrl, au format https://<username>@<webapp-name>.scm.azurewebsites.net/<webapp-name>.git. Enregistrez cette URL. Vous en aurez besoin plus tard.

Configurez maintenant votre application web pour un déploiement à partir de la branche main :

 az webapp config appsettings set -g MyResourceGroup --name "<webapp-name>" --settings deployment_branch=main

Accédez à votre nouvelle application en utilisant la commande suivante. Remplacez <webapp-name> par le nom de votre application.

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

Vous verrez la page web par défaut d'une nouvelle application web Azure.

Déployer votre application locale

De retour dans la fenêtre de terminal locale, ajoutez un dépôt distant Azure dans votre dépôt Git local. Dans la commande suivante, remplacez <deployment-url> par l’URL du Git distant que vous avez enregistré dans la section Créer une application web.

git remote add azure <deployment-url>

Utilisez la commande suivante pour effectuer un envoi (push) au dépôt distant Azure afin de déployer votre application. Quand le gestionnaire d’informations d’identification de Git vous invite à entrer des informations d’identification, utilisez celles que vous avez dans la section Configurer le déploiement Git local.

git push azure main

Cette commande peut prendre quelques minutes pour s’exécuter. Pendant son exécution, elle présente des informations semblables à celles que vous voyez ici :

Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 285 bytes | 95.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Deploy Async
remote: Updating branch 'main'.
remote: Updating submodules.
remote: Preparing deployment for commit id 'd6b54472f7'.
remote: Repository path is /home/site/repository
remote: Running oryx build...
remote: Build orchestrated by Microsoft Oryx, https://github.com/Microsoft/Oryx
remote: You can report issues at https://github.com/Microsoft/Oryx/issues
remote:
remote: Oryx Version      : 0.2.20200114.13, Commit: 204922f30f8e8d41f5241b8c218425ef89106d1d, ReleaseTagName: 20200114.13
remote: Build Operation ID: |imoMY2y77/s=.40ca2a87_
remote: Repository Commit : d6b54472f7e8e9fd885ffafaa64522e74cf370e1
.
.
.
remote: Deployment successful.
remote: Deployment Logs : 'https://<your-webapp-name>.scm.azurewebsites.net/newui/jsonviewer?view_url=/api/deployments/d6b54472f7e8e9fd885ffafaa64522e74cf370e1/log'
To https://<your-webapp-name>.scm.azurewebsites.net:443/<your-webapp-name>.git
   d87e6ca..d6b5447  main -> main

Accédez à (ou actualisez) l’application déployée à l’aide de votre navigateur web :

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

Vous verrez le message « Hello World ! » que vous avez vu précédemment lorsque vous avez visité http://localhost:5000.

Pour plus d’informations sur le déploiement d’une application web à l’aide de Git, consultez Déploiement Git local vers Azure App Service

Configurer l’application web pour se connecter à Key Vault

Dans cette section, vous allez configurer l'accès web à Key Vault et mettre à jour votre code d'application pour récupérer un secret à partir de Key Vault.

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

Dans ce tutoriel, nous allons utiliser identité managée pour nous authentifier auprès de Key Vault. Une identité managée gère automatiquement les informations d’identification de l’application.

Dans le Azure CLI, pour créer l’identité de l’application, exécutez la commande az webapp-identity assign :

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

La commande retourne cet extrait de code JSON :

{
  "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

Dans ce tutoriel, vous allez utiliser Azure Key Vault bibliothèque de client secrète à des fins de démonstration. Vous pouvez également utiliser Azure Key Vault bibliothèque cliente de certificats ou Azure Key Vault bibliothèque de client de clé.

Installer les packages

Depuis la fenêtre du terminal, installez la bibliothèque cliente secrète Azure Key Vault pour .NET et la bibliothèque cliente Azure Identity packages :

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

Mettez à jour le code

Recherchez et ouvrez le fichier Startup.cs pour .NET 5.0 ou version antérieure, ou Program.cs fichier pour .NET 6.0 dans votre projet akvwebapp.

Ajoutez ces lignes à l’en-tête :

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

Ajoutez les lignes suivantes avant l’appel de app.UseEndpoints (.NET 5.0 ou version antérieure) ou l’appel app.MapGet (.NET 6.0), en mettant à jour l’URI pour refléter la valeur vaultUri de votre coffre de clés. Ce code utilise DefaultAzureCredential() pour s’authentifier auprès de Key Vault, qui utilise un jeton de l’identité managée pour l’authentification. Pour plus d'informations sur l'authentification auprès de Key Vault, consultez le Guide Developer. Le code utilise é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 Key Vault, consultez le guide de limitation 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;
.NET 5.0 ou version antérieure

Mettez à jour la ligne await context.Response.WriteAsync("Hello World!"); pour ressembler à cette ligne :

await context.Response.WriteAsync(secretValue);
.NET 6.0

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

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

Veillez à enregistrer vos modifications avant de passer à l’étape suivante.

Redéployez votre application web

Maintenant que vous avez mis à jour votre code, vous pouvez le redéployer sur Azure à l'aide de ces commandes Git :

git add .
git commit -m "Updated web app to access my key vault"
git push azure main

Accéder à votre application web terminée

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

Là où « Hello World » s’affichait, vous devez maintenant voir la valeur de votre secret.

Étapes suivantes