Självstudie: Använda en hanterad identitet för att ansluta Key Vault till en Azure webbapp i .NET

Azure Key Vault är ett sätt att lagra autentiseringsuppgifter och andra hemligheter med ökad säkerhet. Men koden måste autentisera sig mot Key Vault för att hämta dem. Hanterade identiteter för Azure resurser löser det här problemet genom att ge Azure tjänster en automatiskt hanterad identitet i Microsoft Entra ID. Koden använder den här identiteten för att autentisera till alla tjänster som stöder Microsoft Entra autentisering, inklusive Key Vault, utan att bädda in autentiseringsuppgifter i koden.

I den här självstudien skapar och distribuerar du en Azure-webbapp till Azure App Service och använder sedan en hanterad identitet för att autentisera appen mot ett nyckelvalv med hjälp av Azure Key Vault-klientbiblioteket för hemligheter för .NET och Azure CLI. Samma principer gäller om du använder ett annat språk, Azure PowerShell eller Azure-portalen.

Mer information om App Service-webbappar och distribution finns i:

Förutsättningar

För att slutföra denna handledning behöver du:

Om du redan har en webbapp distribuerad i Azure App Service går du vidare till Konfigurera webbappen för att ansluta till Key Vault och Ändra appen för att få åtkomst till din key vault.

Skapa en .NET Core-app

I det här steget konfigurerar du det lokala .NET projektet.

I ett terminalfönster skapar du en katalog med namnet akvwebapp och växlar till den:

mkdir akvwebapp
cd akvwebapp

Skapa en .NET webbapp med hjälp av det nya webbkommandot dotnet:

dotnet new web

Kör appen lokalt för att se hur den ser ut innan du distribuerar den till Azure:

dotnet run

Öppna appen i en webbläsare på http://localhost:5000. Meddelandet "Hello World!" visas från exempelappen.

Mer information om hur du skapar webbappar finns i Skapa en ASP.NET Core webbapp i Azure App Service.

Distribuera appen till Azure

I det här steget distribuerar du .NET-appen till Azure App Service med zip-distribution. Zip-distribution är den rekommenderade paketbaserade distributionsmekanismen för App Service. För kontinuerlig leverans från källkontroll använder du GitHub Actions eller Azure DevOps Pipelines i stället.

Skapa en resursgrupp

Skapa en resursgrupp som ska innehålla nyckelvalvet och webbappen med hjälp av az group create:

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

Skapa en App Service-plan

Skapa en App Service-plan med az appservice plan create. I följande exempel skapas en plan med namnet myAppServicePlan på den kostnadsfria nivån (FREE):

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

Skapa en webbapp

Skapa en Azure-webbappmyAppServicePlanplanen.

Viktigt!

Precis som ett nyckelvalv måste en Azure webbapp ha ett globalt unikt namn. Ersätt <webapp-name> med webbappens namn.

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

Gå till den nya appen för att bekräfta att den körs:

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

Du ser standardsidan för en ny Azure webbapp.

Distribuera din lokala app med ZIP-distribution

Från projektkatalogen akvwebapp kompilerar du projektet och skapar en distributions-zipfil:

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

Tip

På Windows utan zipanvänder du PowerShell: Compress-Archive -Path .\publish\* -DestinationPath .\akvwebapp.zip.

Distribuera zip-filen till webbappen med az webapp deploy:

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

Uppdatera den distribuerade appen i webbläsaren:

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

Du ser samma meddelande om "Hello World!" som du såg på http://localhost:5000.

Konfigurera webbappen för att ansluta till Key Vault

I det här avsnittet gör du det möjligt för webbappen att komma åt Key Vault och uppdatera din appkod för att hämta en hemlighet.

Skapa och tilldela åtkomst till en hanterad identitet

Använd en hanterad identitet för att autentisera webbappen mot Key Vault. En hanterad identitet tar bort behovet av att hantera autentiseringsuppgifter i kod.

Skapa identiteten för appen med hjälp av az webapp identity assign:

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

Kommandot returnerar ett JSON-kodfragment som liknar detta:

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

Om du vill få behörighet till ditt nyckelvalv via Role-Based Access Control (RBAC) tilldelar du en roll till ditt UPN (User Principal Name) med kommandot 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>"

Ersätt <upn>, <subscription-id>och <vault-name> med dina faktiska värden. Om du använde ett annat resursgruppsnamn ersätter du även "myResourceGroup". Ditt UPN är vanligtvis i samma format som en e-postadress (t.ex. username@domain.com).

Ändra appen så att den får åtkomst till ditt nyckelvalv

I den här självstudien används klientbiblioteket för Azure Key Vault-hemligheter. Du kan också använda Azure Key Vault-certifikatklientbiblioteket eller Azure Key Vault nyckelklientbiblioteket.

Installera programvarupaketen

Från terminalfönstret installerar du det Azure Key Vault hemliga klientbiblioteket och klientbiblioteket för Azure identitet:

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

Uppdatera koden

Öppna Program.cs i ditt akvwebapp-projekt.

Lägg till dessa using direktiv överst i filen:

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

Lägg till följande rader före anropet app.MapGet, och ersätt <vault-name> med namnet på ditt nyckelvalv. Den här koden använder DefaultAzureCredential för att autentisera mot Key Vault via webbappens hanterade identitet. Mer information finns i utvecklarguiden. Koden konfigurerar också exponentiell backoff-strategi vid återförsök om Key Vault hastighetsbegränsas. Mer information om transaktionsgränser finns i vägledningen för begränsning i 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;

Uppdatera raden app.MapGet("/", () => "Hello World!"); till:

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

Spara dina ändringar.

Återdistribuera webbappen

Återskapa distributionspaketet och distribuera om:

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

Gå till din färdiga webbapp

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

Där du tidigare såg "Hello World!", ser du nu värdet för din hemlighet.

Nästa steg