Zelfstudie: Een beheerde identiteit gebruiken om Key Vault te verbinden met een Azure-web-app in .NET
Azure Key Vault biedt een manier om referenties en andere geheimen op te slaan met verbeterde beveiliging. Maar uw code moet worden geverifieerd bij Key Vault om deze op te halen. Beheerde identiteiten voor Azure-resources helpen dit probleem op te lossen door Azure-services een automatisch beheerde identiteit te geven in Microsoft Entra-id. U kunt deze identiteit gebruiken om te verifiëren bij elke service die ondersteuning biedt voor Microsoft Entra-verificatie, inclusief Key Vault, zonder dat u referenties in uw code hoeft weer te geven.
In deze zelfstudie maakt en implementeert u een Azure-webtoepassing in Azure App Service. U gebruikt een beheerde identiteit om de Azure-web-app te verifiëren bij een Azure-sleutelkluis, met behulp van de Azure Key Vault-clientbibliotheek voor geheimen voor .NET en Azure CLI. Dezelfde basisprincipes zijn van toepassing wanneer u de ontwikkeltaal van uw keuze, Azure PowerShell en/of Azure Portal gebruikt.
Voor meer informatie over Azure App Service-webtoepassingen en implementaties die in deze zelfstudie worden weergegeven, raadpleegt u:
- Overzicht van App Service
- Een ASP.NET Core-web-app maken in Azure App Service
- Lokale Git-implementatie in Azure App Service
Vereisten
U hebt het volgende nodig om deze zelfstudie te voltooien:
- Een Azure-abonnement. Maak gratis een account.
- De .NET Core 3.1 SDK of hoger.
- Een Git-installatie van versie 2.28.0 of hoger.
- De Azure CLI of Azure PowerShell.
- Azure Key Vault. U kunt een sleutelkluis maken met Azure Portal, de Azure CLI of Azure PowerShell.
- Een Key Vault-geheim. U kunt een geheim maken met behulp van Azure Portal, PowerShell of de Azure CLI.
Als u uw webtoepassing al hebt geïmplementeerd in Azure App Service, kunt u dit overslaan en naar de secties over het configureren van web-app-toegang tot een sleutelkluis en het wijzigen van webtoepassingscode gaan.
Een .NET Core-app maken
In deze stap stelt u het lokale .NET Core-project in.
Maak in een terminalvenster op uw computer een map met de naam akvwebapp
en maak hiervan de huidige map:
mkdir akvwebapp
cd akvwebapp
Maak een .NET Core-app met behulp van de opdracht dotnet new web:
dotnet new web
Voer de toepassing lokaal uit zodat u weet hoe deze eruit ziet wanneer u de toepassing implementeert naar Azure:
dotnet run
Ga in een webbrowser naar de app in http://localhost:5000
.
U ziet het bericht 'Hallo wereld!' van de voorbeeld-app die op de pagina wordt weergegeven.
Raadpleeg Een ASP.NET Core-web-app maken in Azure App Service voor meer informatie over het maken van webtoepassingen voor Azure
De app implementeren in Azure
In deze stap implementeert u de .NET Core-app met Azure App Service met behulp van lokale Git. Zie Een ASP.NET Core-web-app maken in Azure voor meer informatie over het maken en implementeren van toepassingen.
De lokale Git-implementatie configureren
Selecteer in het terminalvenster CTRL + C om de webserver te sluiten. Initialiseer een Git-opslagplaats voor het .NET Core-project:
git init --initial-branch=main
git add .
git commit -m "first commit"
U kunt FTP en lokale Git gebruiken om een Azure-web-app te implementeren met behulp van een implementatiegebruiker. Nadat u deze implementatiegebruiker hebt gemaakt, kunt u deze voor al uw Azure-implementaties gebruiken. Uw gebruikersnaam en wachtwoord voor implementatie op accountniveau verschillen van de referenties voor uw Azure-abonnement.
Als u de implementatiegebruiker wilt configureren, voert u de opdracht az webapp deployment user set uit. Kies een gebruikersnaam en wachtwoord die voldoen aan de volgende richtlijnen:
- De gebruikersnaam moet binnen Azure uniek zijn. Voor lokale Git-pushes mag deze geen apenstaartje (@) bevatten.
- Het wachtwoord moet ten minste acht tekens lang zijn en minimaal twee van de volgende drie typen elementen bevatten: letters, cijfers en symbolen.
az webapp deployment user set --user-name "<username>" --password "<password>"
De JSON-uitvoer toont het wachtwoord als null
. Als er een 'Conflict'. Details: 409
-fout optreedt, wijzigt u de gebruikersnaam. Als er een 'Bad Request'. Details: 400
-fout optreedt, kiest u een sterker wachtwoord.
Noteer uw gebruikersnaam en wachtwoord zodat u deze kunt gebruiken bij het implementeren van uw web-apps.
Een brongroep maken
Een resourcegroep is een logische container waarin u uw Azure-resources implementeert en beheert. Maak een resourcegroep om zowel uw sleutelkluis als uw web-app in te bewaren met behulp van de opdracht az group create:
az group create --name "myResourceGroup" -l "EastUS"
Een App Service-plan maken
Maak een App Service-plan met behulp van de Azure CLI-opdracht az appservice plan create. In dit volgende voorbeeld wordt een App Service-plan gemaakt met de naam myAppServicePlan
in de FREE
prijscategorie:
az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE
Wanneer het App Service-plan wordt gemaakt, toont de Azure CLI informatie die lijkt op wat u hier ziet:
{ "adminSiteName": null, "appServicePlanName": "myAppServicePlan", "geoRegion": "West Europe", "hostingEnvironmentProfile": null, "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/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 }
Zie Een App Service-plan beheren in Azure voor meer informatie.
Een webtoepassing maken
Maak een Azure-web-app in het App Service-plan myAppServicePlan
.
Belangrijk
Net als een sleutelkluis moet een Azure-web-app een unieke naam hebben. Vervang in de volgende voorbeelden <your-webapp-name>
door de naam van uw web-app.
az webapp create --resource-group "myResourceGroup" --plan "myAppServicePlan" --name "<your-webapp-name>" --deployment-local-git
Wanneer de web-app is gemaakt, toont de Azure CLI soortgelijke uitvoer als wat u hier ziet:
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. > }
De URL van de externe Git wordt weergegeven in de eigenschap deploymentLocalGitUrl
, in de indeling https://<username>@<your-webapp-name>.scm.azurewebsites.net/<your-webapp-name>.git
. Sla deze URL op. U hebt deze later nodig.
Configureer nu uw web-app om te implementeren vanuit de main
vertakking:
az webapp config appsettings set -g MyResourceGroup --name "<your-webapp-name>" --settings deployment_branch=main
Ga naar uw nieuwe app met behulp van de volgende opdracht. Vervang <your-webapp-name>
door de naam van uw app.
https://<your-webapp-name>.azurewebsites.net
De standaardwebpagina voor een nieuwe Azure-web-app wordt weergeven.
Uw lokale app implementeren
Voeg, eenmaal terug in het lokale terminalvenster, een externe Azure-instantie toe aan uw lokale Git-opslagplaats. Vervang in de volgende opdracht <deploymentLocalGitUrl-from-create-step>
door de URL van de externe Git die u hebt opgeslagen in de sectie Een webtoepassing maken.
git remote add azure <deploymentLocalGitUrl-from-create-step>
Push naar de externe Azure-instantie om uw app te implementeren met behulp van de volgende opdracht. Wanneer Git Credential Manager u om referenties vraagt, gebruikt u de referenties die u hebt gemaakt in de sectie De lokale Git-implementatie configureren.
git push azure main
Het uitvoeren van deze opdracht kan enkele minuten duren. Terwijl deze wordt uitgevoerd, wordt er informatie weergegeven die vergelijkbaar is met wat u hier ziet:
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
Ga naar (of vernieuw) de geïmplementeerde toepassing via uw webbrowser:
http://<your-webapp-name>.azurewebsites.net
U ziet het bericht 'Hallo wereld!' dat u eerder hebt gezien toen u bezochthttp://localhost:5000
.
Raadpleeg Lokale Git-implementatie in Azure App Service voor meer informatie over het implementeren van webtoepassingen met behulp van Git
De web-app configureren om verbinding te maken met Key Vault
In deze sectie configureert u de webtoegang tot de sleutelkluis en werkt u uw toepassingscode bij om een geheim uit de sleutelkluis op te halen.
Toegang tot een beheerde identiteit maken en toewijzen
In deze zelfstudie gebruiken we een beheerde identiteit voor het verifiëren van Key Vault. Met een beheerde identiteit worden toepassingsreferenties automatisch beheerd.
Voer in Azure CLI de opdracht az webapp-identity assign uit om de identiteit voor de toepassing te maken:
az webapp identity assign --name "<your-webapp-name>" --resource-group "myResourceGroup"
Met deze opdracht wordt dit JSON-fragment geretourneerd:
{
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "SystemAssigned"
}
Als u uw toepassingsmachtigingen wilt verlenen aan uw sleutelkluis via op rollen gebaseerd toegangsbeheer (RBAC), wijst u een rol toe met behulp van de Azure CLI-opdracht az role assignment create.
az role assignment create --role "Key Vault Secrets User" --assignee "<app-id>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"
Vervang , <subscription-id>
<resource-group-name>
en <your-unique-keyvault-name>
door <app-id>
uw werkelijke waarden. <app-id>
is de toepassings-id (client) van uw geregistreerde toepassing in Microsoft Entra.
De app wijzigen om toegang te krijgen tot uw sleutelkluis
In deze zelfstudie gebruikt u de Azure Key Vault-clientbibliotheek voor geheimen voor demonstratiedoeleinden. U kunt ook de Azure Key Vault-clientbibliotheek voor certificaten of de Azure Key Vault-bibliotheek voor sleutels gebruiken.
De pakketten installeren
Installeer vanuit het terminalvenster de pakketten voor de Azure Key Vault-clientbibliotheek voor geheimen en de Azure Identity-clientbibliotheek:
dotnet add package Azure.Identity
dotnet add package Azure.Security.KeyVault.Secrets
De code bijwerken
Zoek en open het Startup.cs-bestand voor .NET 5.0 of eerder, of Program.cs bestand voor .NET 6.0 in uw akvwebapp-project.
Voeg deze regels toe aan de koptekst:
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Core;
Voeg de volgende regels toe vóór de app.UseEndpoints
aanroep (.NET 5.0 of eerder) of app.MapGet
aanroep (.NET 6.0), waarbij de URI wordt bijgewerkt zodat deze overeenkomt met de vaultUri
sleutelkluis. Deze code maakt gebruik van DefaultAzureCredential () om te verifiëren bij Key Vault, waarbij een token van de beheerde identiteit wordt gebruikt voor verificatie. Zie de Gids voor ontwikkelaars voor meer informatie over het verifiëren bij Key Vault. De code gebruikt ook exponentieel uitstel voor nieuwe pogingen wanneer Key Vault wordt vertraagd. Zie Azure Key Vault-beperkingsrichtlijnen voor meer informatie over transactiebeperkingen van sleutelkluizen.
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://<your-unique-key-vault-name>.vault.azure.net/"), new DefaultAzureCredential(),options);
KeyVaultSecret secret = client.GetSecret("<mySecret>");
string secretValue = secret.Value;
.NET 5.0 of eerder
Werk de regel await context.Response.WriteAsync("Hello World!");
bij zodat deze op deze regel lijkt:
await context.Response.WriteAsync(secretValue);
.NET 6.0
Werk de regel app.MapGet("/", () => "Hello World!");
bij zodat deze op deze regel lijkt:
app.MapGet("/", () => secretValue);
Zorg ervoor dat u uw wijzigingen opslaat voordat u verdergaat met de volgende stap.
Uw web-app opnieuw implementeren
Nu u uw code hebt bijgewerkt, kunt u deze opnieuw implementeren in Azure met behulp van deze Git-opdrachten:
git add .
git commit -m "Updated web app to access my key vault"
git push azure main
Ga naar uw voltooide web-app
http://<your-webapp-name>.azurewebsites.net
Waar eerder 'Hallo wereld' stond, zou nu de waarde van uw geheim moeten staan.