Självstudie: Få åtkomst till Azure-tjänster från en .NET-webbapp

Lär dig hur du får åtkomst till Azure-tjänster, till exempel Azure Storage, från en webbapp (inte en inloggad användare) som körs i Azure App Service med hjälp av hanterade identiteter. Den här självstudien visar hur du ansluter till Azure Storage som exempel.

Alla tjänster som stöder hanterad identitet (B i följande bild) kan nås på ett säkert sätt med hjälp av den här självstudien:

  • Azure Storage
  • Azure SQL Database
  • Azure Key Vault

Diagram that shows how to access storage.

Du vill lägga till säker åtkomst till Azure-tjänster (Azure Storage, Azure SQL Database, Azure Key Vault eller andra tjänster) från din webbapp. Du kan använda en delad nyckel, men då måste du oroa dig för driftsäkerhet för vem som kan skapa, distribuera och hantera hemligheten. Det är också möjligt att nyckeln kan checkas in på GitHub, som hackare vet hur de ska söka efter. Ett säkrare sätt att ge webbappen åtkomst till data är att använda hanterade identiteter.

Med en hanterad identitet från Microsoft Entra ID kan App Service komma åt resurser via rollbaserad åtkomstkontroll (RBAC) utan att kräva autentiseringsuppgifter för appen. När du har tilldelat en hanterad identitet till din webbapp tar Azure hand om skapandet och distributionen av ett certifikat. Personer behöver inte bekymra dig om att hantera hemligheter eller autentiseringsuppgifter för appar.

I den här självstudien lär du dig att:

  • Skapa en systemtilldelad hanterad identitet i en webbapp.
  • Skapa ett lagringskonto och en Azure Blob Storage-container.
  • Få åtkomst till lagring från en webbapp med hjälp av hanterade identiteter.

Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.

Förutsättningar

Aktivera hanterad identitet i en app

Om du skapar och publicerar din webbapp via Visual Studio aktiverades den hanterade identiteten i din app åt dig. I apptjänsten väljer du Identitet i den vänstra rutan och väljer sedan Systemtilldelad. Kontrollera att Status är inställt på På. Om inte väljer du och sedan Spara. Välj Ja i bekräftelsedialogrutan för att aktivera den systemtilldelade hanterade identiteten. När den hanterade identiteten är aktiverad anges statusen till och objekt-ID är tillgängligt.

Screenshot that shows the System assigned identity option.

Det här steget skapar ett nytt objekt-ID som skiljer sig från app-ID:t som skapades i fönstret Autentisering/auktorisering . Kopiera objekt-ID:t för den systemtilldelade hanterade identiteten. Du behöver det senare.

Skapa ett lagringskonto och en Blob Storage-container

Nu är du redo att skapa ett lagringskonto och en Blob Storage-container.

Varje lagringskonto måste tillhöra en Azure-resursgrupp. En resursgrupp är en logisk container där Azure-resurserna grupperas. När du skapar ett lagringskonto kan du antingen skapa en ny resursgrupp eller använda en befintlig resursgrupp. Den här artikeln visar hur du skapar en ny resursgrupp.

Ett v2-lagringskonto för generell användning ger åtkomst till alla Azure Storage-tjänster: blobar, filer, köer, tabeller och diskar. Stegen som beskrivs här skapar ett generellt v2-lagringskonto, men stegen för att skapa alla typer av lagringskonton är liknande.

Blobar i Azure Storage är ordnade i containrar. Innan du kan ladda upp en blob senare i den här självstudien måste du först skapa en container.

Följ dessa steg om du vill skapa ett v2-lagringskonto för generell användning i Azure-portalen.

  1. Välj Alla tjänster på menyn i Azure-portalen. I listan över resurser anger du Lagringskonton. När du börjar skriva filtreras listan baserat på det du skriver. Välj Lagringskonton.

  2. I fönstret Lagringskonton som visas väljer du Skapa.

  3. Välj den prenumeration där du vill skapa lagringskontot.

  4. Under fältet Resursgrupp väljer du den resursgrupp som innehåller webbappen i den nedrullningsbara menyn.

  5. Ange sedan ett namn för lagringskontot. Namnet du väljer måste vara unikt för Azure. Namnet måste också vara mellan 3 och 24 tecken långt och kan endast innehålla siffror och gemener.

  6. Välj en plats (region) för ditt lagringskonto eller använd standardvärdet.

  7. Lämna dessa fält med respektive standardvärde:

    Fält Värde
    Distributionsmodell Resource Manager
    Prestanda Standard
    Typ av konto StorageV2 (generell användning v2)
    Replikering Geo-redundant lagring med läsbehörighet (RA-GRS)
    Åtkomstnivå Het
  8. Välj Granska + skapa för att granska inställningarna för ditt lagringskonto och skapa kontot.

  9. Välj Skapa.

Följ dessa steg för att skapa en Blob Storage-container i Azure Storage.

  1. Gå till ditt nya lagringskonto i Azure-portalen.

  2. I den vänstra menyn för lagringskontot bläddrar du till avsnittet Datalagring och väljer sedan Containrar.

  3. Välj knappen + Container.

  4. Ange ett namn för den nya containern. Containernamnet får bara innehålla gemener, måste börja med en bokstav eller siffra och får bara innehålla bokstäver, siffror och bindestreck (-).

  5. Ställ in nivån för allmän åtkomst till containern. Standardnivån är Privat (ingen anonym åtkomst).

  6. Skapa behållare genom att välja OK.

Bevilja åtkomst till lagringskontot

Du måste ge webbappen åtkomst till lagringskontot innan du kan skapa, läsa eller ta bort blobar. I ett tidigare steg konfigurerade du webbappen som körs på App Service med en hanterad identitet. Med Azure RBAC kan du ge den hanterade identiteten åtkomst till en annan resurs, precis som alla säkerhetsobjekt. Rollen Storage Blob Data Contributor ger webbappen (representerad av den systemtilldelade hanterade identiteten) läs-, skriv- och borttagningsåtkomst till blobcontainern och data.

Kommentar

Vissa åtgärder på privata blobcontainrar stöds inte av Azure RBAC, till exempel att visa blobar eller kopiera blobar mellan konton. En blobcontainer med privat åtkomstnivå kräver en SAS-token för alla åtgärder som inte är auktoriserade av Azure RBAC. Mer information finns i När du ska använda en signatur för delad åtkomst.

Gå till ditt lagringskonto i Azure-portalen för att ge webbappen åtkomst. Välj Åtkomstkontroll (IAM) i den vänstra rutan och välj sedan Rolltilldelningar. Du ser en lista över vem som har åtkomst till lagringskontot. Nu vill du lägga till en rolltilldelning till en robot, apptjänsten som behöver åtkomst till lagringskontot. Välj Lägg till>rolltilldelning för att öppna sidan Lägg till rolltilldelning.

Tilldela rollen Storage Blob Data-deltagare till App Service i prenumerationsomfånget. Läs mer om att tilldela roller i Tilldela Azure-roller via Azure Portal.

Din webbapp har nu åtkomst till ditt lagringskonto.

Åtkomst till Blob Storage

Klassen DefaultAzureCredential används för att hämta en tokenautentiseringsuppgift för din kod för att auktorisera begäranden till Azure Storage. Skapa en instans av klassen DefaultAzureCredential , som använder den hanterade identiteten för att hämta token och koppla dem till tjänstklienten. I följande kodexempel hämtas autentiseringsuppgifterna för autentiserade token och används för att skapa ett tjänstklientobjekt som laddar upp en ny blob.

Om du vill se den här koden som en del av ett exempelprogram kan du läsa exemplet på GitHub.

Installera klientbibliotekspaket

Installera NuGet-paketet för Blob Storage för att fungera med Blob Storage och Azure Identity-klientbiblioteket för .NET NuGet-paketet för att autentisera med Microsoft Entra-autentiseringsuppgifter. Installera klientbiblioteken med hjälp av kommandoradsgränssnittet för .NET Core eller Package Manager-konsolen i Visual Studio.

.NET Core-kommandorad

  1. Öppna en kommandorad och växla till katalogen som innehåller projektfilen.

  2. Kör installationskommandona.

    dotnet add package Azure.Storage.Blobs
    
    dotnet add package Azure.Identity
    

Package Manager-konsol

  1. Öppna projektet eller lösningen i Visual Studio och öppna konsolen med hjälp av kommandot Verktyg>NuGet Package Manager>Package Manager Console.

  2. Kör installationskommandona.

    Install-Package Azure.Storage.Blobs
    
    Install-Package Azure.Identity
    

.NET-exempel

using System;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text;
using System.IO;
using Azure.Identity;

// Some code omitted for brevity.

static public async Task UploadBlob(string accountName, string containerName, string blobName, string blobContents)
{
    // Construct the blob container endpoint from the arguments.
    string containerEndpoint = string.Format("https://{0}.blob.core.windows.net/{1}",
                                                accountName,
                                                containerName);

    // Get a credential and create a client object for the blob container.
    BlobContainerClient containerClient = new BlobContainerClient(new Uri(containerEndpoint),
                                                                    new DefaultAzureCredential());

    try
    {
        // Create the container if it does not exist.
        await containerClient.CreateIfNotExistsAsync();

        // Upload text to a new block blob.
        byte[] byteArray = Encoding.ASCII.GetBytes(blobContents);

        using (MemoryStream stream = new MemoryStream(byteArray))
        {
            await containerClient.UploadBlobAsync(blobName, stream);
        }
    }
    catch (Exception e)
    {
        throw e;
    }
}

Rensa resurser

Om du är klar med den här självstudien och inte längre behöver webbappen eller associerade resurser rensar du de resurser som du skapade.

Ta bort resursgruppen

I Azure-portalen väljer du Resursgrupper på portalmenyn och väljer den resursgrupp som innehåller din App Service- och App Service-plan.

Välj Ta bort resursgrupp för att ta bort resursgruppen och alla resurser.

Screenshot that shows deleting the resource group.

Det kan ta flera minuter att köra det här kommandot.

Nästa steg

I den här självstudiekursen lärde du dig att:

  • Skapa en systemtilldelad hanterad identitet.
  • Skapa ett lagringskonto och en Blob Storage-container.
  • Få åtkomst till lagring från en webbapp med hjälp av hanterade identiteter.