Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure Key Vault biedt een manier om referenties en andere geheimen op te slaan met verhoogde beveiliging. Maar uw code moet worden geverifieerd bij Key Vault om ze op te halen. Beheerde identiteiten voor Azure resources helpen dit probleem op te lossen door Azure services een automatisch beheerde identiteit in Microsoft Entra ID te geven. 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 Azure webtoepassing in Azure App Service. U gebruikt een beheerde identiteit om uw Azure web-app te verifiëren met een Azure key vault met behulp van Azure Key Vault geheime clientbibliotheek voor .NET en de Azure CLI. Dezelfde basisprincipes gelden wanneer u de ontwikkeltaal van uw keuze, Azure PowerShell en/of de Azure-portal gebruikt.
Zie voor meer informatie over Azure-app servicewebtoepassingen en -implementatie in deze zelfstudie:
- Overzicht van App Service
- Maak een ASP.NET Core-web-app in Azure App Service
- Local Git-implementatie naar Azure App Service
Vereiste voorwaarden
U hebt het volgende nodig om deze zelfstudie te voltooien:
- Een Azure-abonnement. Maak gratis een account.
- De .NET 8.0 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 behulp van de Azure portal, de Azure CLI of Azure PowerShell.
- Een Key Vault geheim. U kunt een geheim maken met behulp van de Azure-portal, PowerShell of de Azure CLI.
Als uw webtoepassing al in Azure App Service is geïmplementeerd, kunt u doorgaan naar configuratie van web-app-toegang tot een sleutelkluis en modificeren van webtoepassingscode secties.
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 moet zien wanneer u deze implementeert in Azure:
dotnet run
Ga in een webbrowser naar de app bij http://localhost:5000.
U ziet het bericht 'Hallo wereld!' van de voorbeeld-app die op de pagina wordt weergegeven.
Zie
De app implementeren in Azure
In deze stap implementeert u uw .NET Core-toepassing in Azure App Service met behulp van lokale Git. Zie Maak een ASP.NET Core-web-app 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 deploymentgebruiker. Nadat u de implementatiegebruiker hebt geconfigureerd, kunt u deze gebruiken voor al uw Azure implementaties. De gebruikersnaam en het wachtwoord voor de implementatie op accountniveau verschillen van uw Azure abonnementsreferenties.
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 uniek zijn binnen Azure. 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 u een 'Bad Request'. Details: 400 fout krijgt, gebruik dan 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 Azure resources implementeert en deze 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 "<resource-group>" -l "EastUS"
Een App Service-plan maken
Maak een App Service-plan met behulp van de opdracht Azure CLI 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 <resource-group> --sku FREE
Wanneer het App Service-plan wordt gemaakt, wordt in het Azure CLI informatie weergegeven die vergelijkbaar is met wat u hier ziet:
{
"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
}
Zie Beheer van een App Service-plan in Azure voor meer informatie.
Een web-app maken
Maak een Azure-web-app in het myAppServicePlan App Service-plan.
Belangrijk
Net als een sleutelkluis moet een Azure-web-app een unieke naam hebben. Vervang in de volgende voorbeelden <webapp-name> door de naam van uw web-app.
az webapp create --resource-group "<resource-group>" --plan "myAppServicePlan" --name "<webapp-name>" --deployment-local-git
Wanneer de web-app wordt gemaakt, wordt in de Azure CLI uitvoer weergegeven die vergelijkbaar is met 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>@<webapp-name>.scm.azurewebsites.net/<webapp-name>.git. Sla deze URL op. U hebt het later nodig.
Configureer nu uw web-app om te implementeren vanuit de main vertakking:
az webapp config appsettings set -g MyResourceGroup --name "<webapp-name>" --settings deployment_branch=main
Ga naar uw nieuwe app met behulp van de volgende opdracht. Vervang <webapp-name> door de naam van uw app.
https://<webapp-name>.azurewebsites.net
U ziet de standaardwebpagina voor een nieuwe Azure-web-app.
Uw lokale app implementeren
Voeg in het lokale terminalvenster een Azure remote toe aan uw lokale Git-opslagplaats. Vervang in de volgende opdracht <deployment-url> door de URL van de externe Git die u hebt opgeslagen in de sectie Een webtoepassing maken.
git remote add azure <deployment-url>
Gebruik de volgende opdracht om naar de externe Azure te pushen om uw app te implementeren. 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 kan enkele minuten duren voordat deze opdracht is uitgevoerd. 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://<webapp-name>.azurewebsites.net
U ziet het bericht 'Hallo wereld!' dat u eerder hebt gezien toen u http://localhost:5000 bezocht.
Zie
De web-app configureren om verbinding te maken met Key Vault
In deze sectie configureert u webtoegang tot Key Vault en werkt u uw toepassingscode bij om een geheim op te halen uit Key Vault.
Toegang tot een beheerde identiteit maken en toewijzen
In deze zelfstudie gebruiken we beheerde identiteit om te verifiëren bij Key Vault. Met een beheerde identiteit worden toepassingsreferenties automatisch beheerd.
Voer in de Azure CLI de opdracht az webapp-identity assign uit om de identiteit voor de toepassing te maken:
az webapp identity assign --name "<webapp-name>" --resource-group "<resource-group>"
Met deze opdracht wordt dit JSON-fragment geretourneerd:
{
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "SystemAssigned"
}
Als u machtigingen wilt verkrijgen voor uw sleutelkluis via Role-Based Access Control (RBAC), wijst u een rol toe aan uw UPN (User Principal Name) met behulp van de Azure CLI-opdracht az-roltoewijzing maken.
az role assignment create --role "Key Vault Secrets User" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"
Vervang , <upn>en <subscription-id> door <vault-name>uw werkelijke waarden. Als u een andere resourcegroepnaam hebt gebruikt, vervangt u myResourceGroup ook. Uw UPN heeft meestal de indeling van een e-mailadres (bijvoorbeeld username@domain.com).
Pas de app aan om toegang te krijgen tot uw sleutelkluis
In deze zelfstudie gebruikt u Azure Key Vault geheime clientbibliotheek voor demonstratiedoeleinden. U kunt ook Azure Key Vault clientbibliotheek voor certificaten of Azure Key Vault sleutelclientbibliotheek gebruiken.
De pakketten installeren
Installeer vanuit het terminalvenster de Azure Key Vault geheime clientbibliotheek voor .NET en Azure Identity-clientbibliotheekpakketten:
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 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 aanroep app.UseEndpoints (.NET 5.0 of lager) of app.MapGet-aanroep (.NET 6.0), waarbij de URI wordt bijgewerkt met de vaultUri van uw sleutelkluis. Deze code maakt gebruik van DefaultAzureCredential() voor verificatie bij Key Vault, waarbij een token van beheerde identiteit wordt gebruikt om te verifiëren. Zie de Ontwikkelaarsgids voor meer informatie over authenticatie met Key Vault. De code maakt ook gebruik van exponentieel uitstel voor nieuwe pogingen voor het geval Key Vault wordt beperkt. Zie voor meer informatie over Key Vault-transactielimieten de Azure Key Vault throttlingrichtlijnen.
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 of eerder
Werk de regel await context.Response.WriteAsync("Hallo wereld!"); bij om er als volgt uit te zien:
await context.Response.WriteAsync(secretValue);
.NET 6.0
Werk de regel app.MapGet("/", () => "Hallo wereld!"); bij om er als volgt uit te zien:
app.MapGet("/", () => secretValue);
Zorg ervoor dat u uw wijzigingen opslaat voordat u verdergaat met de volgende stap.
Uw web-app opnieuw implementeren
Nu u de code hebt bijgewerkt, kunt u deze opnieuw implementeren naar 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://<webapp-name>.azurewebsites.net
Nu u eerder "Hallo wereld!" zag, moet u nu de waarde van uw geheim zien weergegeven.