Självstudie: Använda en hanterad identitet för att Key Vault till en Azure-webbapp i .NET
Azure Key Vault ett sätt att lagra autentiseringsuppgifter och andra hemligheter med ökad säkerhet. Men koden måste autentiseras för att Key Vault hämta dem. Hanterade identiteter för Azure-resurser hjälper till att lösa det här problemet genom att ge Azure-tjänster en automatiskt hanterad identitet i Azure Active Directory (Azure AD). Du kan använda den här identiteten för att autentisera till alla tjänster som stöder Azure AD-autentisering, inklusive Key Vault, utan att behöva visa autentiseringsuppgifter i koden.
I den här självstudien skapar och distribuerar du Azure-webbprogram till Azure App Service. Du använder en hanterad identitet för att autentisera din Azure-webbapp med ett Azure-nyckelvalv med hjälp Azure Key Vault ett hemligt klientbibliotek för .NET och Azure CLI. Samma grundläggande principer gäller när du använder val av utvecklingsspråk, Azure PowerShell och/eller Azure Portal.
Mer information om hur du Azure App-tjänstwebbprogram och distribution som presenteras i den här självstudien finns i:
- Översikt över App Service
- Skapa en ASP.NET Core-webbapp i Azure App Service
- Lokal Git-distribution till Azure App Service
Förutsättningar
För att slutföra den här kursen behöver du:
- En Azure-prenumeration. Skapa en kostnadsfritt.
- .NET Core 3.1 SDK (eller senare).
- En Git-installation av version 2.28.0 eller senare.
- Azure CLI eller Azure PowerShell.
- Azure Key Vault. Du kan skapa ett nyckelvalv med hjälp av Azure Portal, Azure CLIeller Azure PowerShell.
- En Key Vault hemlighet. Du kan skapa en hemlighet med hjälp Azure Portal, PowerShelleller Azure CLI.
Om du redan har distribuerat webbappen i Azure App Service kan du gå vidare och konfigurera webbappsåtkomst till ett nyckelvalv och ändra kodavsnitt för webbprogram.
Skapa en .NET Core-app
I det här steget ska du konfigurera det lokala .NET Core-projektet.
I ett terminalfönster på datorn skapar du en katalog med namnet akvwebapp och gör den till den aktuella katalogen:
mkdir akvwebapp
cd akvwebapp
Skapa en .NET Core-app med hjälp av det nya webbkommandot dotnet:
dotnet new web
Kör programmet lokalt så att du vet hur det ska se ut när du distribuerar det till Azure:
dotnet run
I en webbläsare går du till appen på http://localhost:5000 .
Du ser då meddelandet ”Hello World!” från exempelappen som visas på sidan.
Mer information om hur du skapar webbprogram för Azure finns i Skapa en ASP.NET Core-webbapp i Azure App Service
distribuera appen till Azure
I det här steget distribuerar du ditt .NET Core-program till Azure App Service med hjälp av lokal Git. Mer information om hur du skapar och distribuerar program finns i Skapa en ASP.NET Core-webbapp i Azure.
Konfigurera den lokala Git-distributionen
I terminalfönstret väljer du Ctrl+C för att stänga webbservern. Initiera en Git-lagringsplats för .NET Core-projektet:
git init --initial-branch=main
git add .
git commit -m "first commit"
Du kan använda FTP och lokal Git för att distribuera en Azure-webbapp med hjälp av en distributionsanvändare. När du har konfigurerat distributionsanvändaren kan du använda den för alla dina Azure-distributioner. Användarnamnet och lösenordet för din distribution på kontonivå skiljer sig från autentiseringsuppgifterna för din Azure-prenumeration.
Konfigurera distributionsanvändaren genom att köra kommandot az webapp deployment user set. Välj ett användarnamn och lösenord som följer dessa riktlinjer:
- Användarnamnet måste vara unikt inom Azure. För lokala Git-pushar får den inte innehålla tecknet på tecknet (@).
- Lösenordet måste vara minst åtta tecken långt och innehålla två av följande tre element: bokstäver, siffror och symboler.
az webapp deployment user set --user-name "<username>" --password "<password>"
JSON-utdata visar lösenordet som null . Om du får 'Conflict'. Details: 409 ett felmeddelande ändrar du användarnamnet. Om du ser felet 'Bad Request'. Details: 400 ska du använda ett starkare lösenord.
Registrera ditt användarnamn och lösenord så att du kan använda det för att distribuera dina webbappar.
Skapa en resursgrupp
En resursgrupp är en logisk container där du distribuerar Azure-resurser och hanterar dem. Skapa en resursgrupp som ska innehålla både nyckelvalvet och webbappen med hjälp av kommandot az group create:
az group create --name "myResourceGroup" -l "EastUS"
Skapa en App Service-plan
Skapa en App Service plan med hjälp av kommandot Azure CLI az appservice plan create. I följande exempel skapas App Service plan med myAppServicePlan namnet FREE på prisnivån:
az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE
När App Service plan skapas visar Azure CLI information som liknar det du ser här:
{
"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
}
Mer information finns i Hanera en App Service-plan i Azure.
Skapa en webbapp
Skapa en Azure-webbapp i myAppServicePlan App Service plan.
Viktigt
Precis som ett nyckelvalv måste en Azure-webbapp ha ett unikt namn. Ersätt <your-webapp-name> med namnet på din webbapp i följande exempel.
az webapp create --resource-group "myResourceGroup" --plan "myAppServicePlan" --name "<your-webapp-name>" --deployment-local-git
När webbappen har skapats visar Azure CLI utdata som liknar det du ser här:
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. >
}
URL:en för fjärransluten Git visas deploymentLocalGitUrl i egenskapen i formatet https://<username>@<your-webapp-name>.scm.azurewebsites.net/<your-webapp-name>.git . Spara den här URL:en. Du behöver det senare.
Konfigurera nu webbappen så att den distribueras från main -grenen:
az webapp config appsettings set -g MyResourceGroup --name "<your-webapp-name>" --settings deployment_branch=main
Gå till den nya appen med hjälp av följande kommando. Ersätt <your-webapp-name> med namnet på din app.
https://<your-webapp-name>.azurewebsites.net
Du ser standardwebbsidan för en ny Azure-webbapp.
Distribuera din lokala app
I det lokala terminalfönstret kan du lägga till en Azure-fjärrdatabas till din lokala Git-databas. I följande kommando ersätter du <deploymentLocalGitUrl-from-create-step> med URL:en för den Fjärranslutna Git-fil som du sparade i avsnittet Skapa en webbapp.
git remote add azure <deploymentLocalGitUrl-from-create-step>
Använd följande kommando för att skicka till Azure-fjärrservern för att distribuera din app. När Git Autentiseringshanteraren dig om autentiseringsuppgifter använder du de autentiseringsuppgifter som du skapade i avsnittet Konfigurera den lokala Git-distributionen.
git push azure main
Det här kommandot kan ta några minuter att köra. När den körs visas information som liknar det du ser här:
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
Gå till (eller uppdatera) det distribuerade programmet med hjälp av webbläsaren:
http://<your-webapp-name>.azurewebsites.net
Du ser då meddelandet ”Hello World!” som du såg tidigare när du besökte http://localhost:5000 .
Mer information om hur du distribuerar webbprogram med Git finns i Lokal Git-distribution till Azure App Service
Konfigurera webbappen för att ansluta till Key Vault
I det här avsnittet konfigurerar du webbåtkomst till Key Vault och uppdaterar programkoden för att hämta en hemlighet från Key Vault.
Skapa och tilldela en hanterad identitet
I den här självstudien använder vi hanterad identitet för att autentisera till Key Vault. Hanterad identitet hanterar automatiskt programautentiseringsuppgifter.
I Azure CLI skapar du identiteten för programmet genom att köra kommandot az webapp-identity assign:
az webapp identity assign --name "<your-webapp-name>" --resource-group "myResourceGroup"
Kommandot returnerar det här JSON-kodfragmentet:
{
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "SystemAssigned"
}
Om du vill ge webbappen behörighet att hämta och lista åtgärder i nyckelvalvet skickar du till kommandot Azure CLI az principalId keyvault set-policy:
az keyvault set-policy --name "<your-keyvault-name>" --object-id "<principalId>" --secret-permissions get list
Du kan också tilldela åtkomstprinciper med hjälp av Azure Portal eller PowerShell.
Ändra appen för att få åtkomst till ditt nyckelvalv
I den här självstudien använder du Azure Key Vault ett hemligt klientbibliotek i demonstrationssyfte. Du kan också använda Azure Key Vault certifikatklientbibliotek, eller Azure Key Vault nyckelklientbiblioteket.
Installera paketen
Installera det hemliga klientbiblioteket Azure Key Vault .NET- och Azure Identity-klientbibliotekspaket från terminalfönstret:
dotnet add package Azure.Identity
dotnet add package Azure.Security.KeyVault.Secrets
Uppdatera koden
Leta upp och öppna filen Startup.cs i ditt akvwebapp-projekt.
Lägg till följande rader i rubriken:
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Core;
Lägg till följande rader före app.UseEndpoints anropet och uppdatera URI:en så att den vaultUri återspeglar för ditt nyckelvalv. Den här koden använder DefaultAzureCredential() för att autentisera till Key Vault, som använder en token från en hanterad identitet för att autentisera. Mer information om autentisering för Key Vault finns i Utvecklarhandbok. Koden använder också exponentiell backoff för återförsök om Key Vault begränsas. Mer information om Key Vault finns i vägledningen Azure Key Vault om begränsning.
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;
Uppdatera raden så await context.Response.WriteAsync("Hello World!"); att den ser ut så här:
await context.Response.WriteAsync(secretValue);
Se till att spara ändringarna innan du fortsätter till nästa steg.
Distribuera din webbapp igen
Nu när du har uppdaterat koden kan du distribuera om den till Azure med hjälp av följande Git-kommandon:
git add .
git commit -m "Updated web app to access my key vault"
git push azure main
Gå till din färdiga webbapp
http://<your-webapp-name>.azurewebsites.net
Där innan du såg "Hello World!", bör du nu se värdet för din hemlighet.