Tutorial: Zugreifen auf Azure-Dienste aus einer .NET-Web-App

Es wird beschrieben, wie Sie aus einer Web-App (kein angemeldeter Benutzer), die in Azure App Service ausgeführt wird, mit verwalteten Identitäten auf Azure-Dienste wie Azure Storage zugreifen. In diesem Tutorial wird das Herstellen einer Verbindung mit Azure Storage als Beispiel veranschaulicht.

Auf jeden Dienst, der die verwaltete Identität unterstützt (B in der folgenden Abbildung), kann mithilfe dieses Tutorials sicher zugegriffen werden:

  • Azure Storage
  • Azure SQL-Datenbank
  • Azure-Schlüsseltresor

Diagram that shows how to access storage.

Sie möchten sicheren Zugriff auf Azure-Dienste (Azure Storage, Azure SQL-Datenbank, Azure Key Vault oder andere Dienste) aus Ihrer Web-App hinzufügen. Sie können auch einen gemeinsam verwendeten Schlüssel nutzen. In diesem Fall müssen Sie sich aber Gedanken über den sicheren Betrieb machen – also darüber, wer das Geheimnis erstellen, bereitstellen und verwalten kann. Darüber hinaus kann es sein, dass der Schlüssel in GitHub eingecheckt wird – und Hacker wissen, wie man einen entsprechenden Scanvorgang zur Ermittlung durchführt. Eine sicherere Möglichkeit, wie Sie für Ihre Web-App den Zugriff auf Daten ermöglichen können, ist die Verwendung von verwalteten Identitäten.

Mit einer verwalteten Identität von Microsoft Entra ID kann App Service mittels rollenbasierter Zugriffssteuerung (Role-Based Access Control, RBAC) auf Ressourcen zugreifen, ohne dass App-Anmeldeinformationen benötigt werden. Nachdem Sie Ihrer Web-App eine verwaltete Identität zugewiesen haben, kümmert sich Azure um die Erstellung und Verteilung eines Zertifikats. Die Benutzer müssen sich keine Gedanken über die Verwaltung von Geheimnissen oder App-Anmeldeinformationen machen.

In diesem Tutorial lernen Sie Folgendes:

  • Erstellen einer systemseitig zugewiesenen verwalteten Identität in einer Web-App
  • Erstellen eines Speicherkontos und eines Azure Blob Storage-Containers
  • Zugreifen auf Speicher über eine Web-App mit verwalteten Identitäten

Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.

Voraussetzungen

Aktivieren einer verwalteten Identität in einer App

Wenn Sie Ihre Web-App mit Visual Studio erstellen und veröffentlichen, wird die verwaltete Identität für Sie in Ihrer App aktiviert. Wählen Sie auf Ihrer App Service-Instanz im linken Bereich die Option Identität und dann Vom System zugewiesen aus. Vergewissern Sie sich, dass der Status auf Ein festgelegt ist. Falls nicht, wählen Sie Ein und dann Speichern aus. Wählen Sie im Bestätigungsdialogfeld Ja aus, um die systemseitig zugewiesene verwaltete Identität zu aktivieren. Wenn die verwaltete Identität aktiviert ist, ist der Status auf Ein festgelegt, und die Objekt-ID ist verfügbar.

Screenshot that shows the System assigned identity option.

In diesem Schritt wird eine neue Objekt-ID erstellt, die sich von der im Bereich Authentifizierung/Autorisierung erstellten App-ID unterscheidet. Kopieren Sie die Objekt-ID der systemseitig zugewiesenen verwalteten Identität. Sie benötigen die Information später.

Erstellen eines Speicherkontos und Blob Storage-Containers

Nun können Sie ein Speicherkonto und einen Blob Storage-Container erstellen.

Jedes Speicherkonto muss zu einer Azure-Ressourcengruppe gehören. Eine Ressourcengruppe ist ein logischer Container zur Gruppierung Ihrer Azure-Dienste. Beim Erstellen eines Speicherkontos haben Sie die Möglichkeit, eine neue Ressourcengruppe zu erstellen oder eine vorhandene Ressourcengruppe zu verwenden. In diesem Artikel wird gezeigt, wie Sie eine neue Ressourcengruppe erstellen.

Ein universelles v2-Speicherkonto bietet Zugriff auf sämtliche Azure Storage-Dienste: Blobs, Dateien, Warteschlangen, Tabellen und Datenträger. In den hier beschriebenen Schritten wird ein Speicherkonto vom Typ „Universell v2“ erstellt. Die Schritte für die Erstellung einer anderen Art von Speicherkonto sind jedoch ähnlich.

Blobs in Azure Storage sind in Containern organisiert. Bevor Sie später in diesem Tutorial ein Blob hochladen können, müssen Sie zunächst einen Container erstellen.

Führen Sie die folgenden Schritte aus, wenn Sie ein allgemeines Speicherkonto vom Typ „Universell V2“ über das Azure-Portal erstellen möchten.

  1. Wählen Sie im Menü des Azure-Portals die Option Alle Dienste aus. Geben Sie in der Liste der Ressourcen Speicherkonten ein. Sobald Sie mit der Eingabe beginnen, wird die Liste auf der Grundlage Ihrer Eingabe gefiltert. Wählen Sie Speicherkonten.

  2. Wählen Sie im angezeigten Fenster Speicherkonten die Option Erstellen aus.

  3. Wählen Sie das Abonnement aus, in dem das Speicherkonto erstellt werden soll.

  4. Wählen Sie unter dem Feld Ressourcengruppe im Dropdownmenü die Ressourcengruppe aus, die Ihre Web-App enthält.

  5. Geben Sie als Nächstes einen Namen für Ihr Speicherkonto ein. Der gewählte Name muss innerhalb von Azure eindeutig sein. Der Name muss ebenfalls zwischen 3 und 24 Zeichen lang sein und darf nur Zahlen und Kleinbuchstaben enthalten.

  6. Wählen Sie einen Standort (eine Region) für Ihr Speicherkonto aus, oder verwenden Sie den Standardwert.

  7. Behalten Sie die Standardwerte für diese Felder bei:

    Feld Wert
    Bereitstellungsmodell Ressourcen-Manager
    Leistung Standard
    Kontoart StorageV2 (universell v2)
    Replikation Georedundanter Speicher mit Lesezugriff (RA-GRS)
    Zugriffsebene Hot
  8. Wählen Sie Überprüfen + erstellen, um die Speicherkontoeinstellungen zu überprüfen und das Konto zu erstellen.

  9. Klicken Sie auf Erstellen.

Führen Sie die folgenden Schritte aus, um einen Blob Storage-Container in Azure Storage zu erstellen.

  1. Navigieren Sie im Azure-Portal zu Ihrem neuen Speicherkonto.

  2. Scrollen Sie im linken Menü für das Speicherkonto zum Abschnitt Datenspeicher, und klicken Sie auf Container.

  3. Wählen Sie die Schaltfläche + Container.

  4. Geben Sie unter Name einen Namen für den neuen Container ein. Der Containername muss klein geschrieben werden, mit einem Buchstaben oder einer Zahl beginnen und darf nur Buchstaben, Zahlen und Bindestriche (-) enthalten.

  5. Legen Sie die öffentliche Zugriffsebene für den Container fest. Die Standardebene ist Private (no anonymous access) (Privat (kein anonymer Zugriff)).

  6. Wählen Sie OK aus, um den Container zu erstellen.

Gewähren des Zugriffs auf das Speicherkonto

Sie müssen Ihrer Web-App Zugriff auf das Speicherkonto gewähren, bevor Sie Blobs erstellen, lesen oder löschen können. In einem vorherigen Schritt haben Sie die in App Service ausgeführte Web-App mit einer verwalteten Identität konfiguriert. Mit der rollenbasierten Zugriffssteuerung von Azure (Azure RBAC) können Sie der verwalteten Identität Zugriff auf eine andere Ressource gewähren (wie für jeden anderen Sicherheitsprinzipal). Mit der Rolle „Mitwirkender an Storage-Blobdaten“ wird der Web-App (repräsentiert durch die systemseitig zugewiesene verwaltete Identität) Lese-, Schreib- und Löschzugriff auf den Blobcontainer und die Daten gewährt.

Hinweis

Einige Vorgänge für private Blobcontainer werden von Azure RBAC nicht unterstützt, z. B. das Anzeigen von Blobs oder das Kopieren von Blobs zwischen Konten. Ein Blobcontainer mit privater Zugriffsebene erfordert ein SAS-Token für alle Vorgänge, die nicht von Azure RBAC autorisiert sind. Weitere Informationen finden Sie unter Wann eine freigegebene Zugriffssignatur verwendet werden soll.

Navigieren Sie im Azure-Portal zu Ihrem Speicherkonto, um für Ihre Web-App Zugriff zu gewähren. Wählen Sie im linken Bereich die Option Zugriffssteuerung (IAM) und dann Rollenzuweisungen aus. Es wird eine Liste mit den Benutzern angezeigt, die Zugriff auf das Speicherkonto haben. Nun möchten Sie eine Rollenzuweisung einem Roboter hinzufügen (der App Service-Instanz, die Zugriff auf das Speicherkonto benötigt). Wählen Sie Hinzufügen>Rollenzuweisung hinzufügen aus, um die Seite Rollenzuweisung hinzufügen zu öffnen.

Weisen Sie die Rolle Mitwirkender an Storage-Blobdaten dem App Service im Abonnementbereich zu. Ausführliche Informationen finden Sie unter Zuweisen von Azure-Rollen über das Azure-Portal.

Ihre Web-App verfügt jetzt über Zugriff auf Ihr Speicherkonto.

Zugreifen auf Blob Storage

Die Klasse DefaultAzureCredential wird zum Abrufen von Tokenanmeldeinformationen für Ihren Code verwendet, um Anforderungen für Azure Storage zu autorisieren. Erstellen Sie eine Instanz der Klasse DefaultAzureCredential, bei der die verwaltete Identität zum Abrufen von Token verwendet wird, und fügen Sie diese dem Dienstclient hinzu. Im folgenden Codebeispiel werden die authentifizierten Tokenanmeldeinformationen abgerufen und zum Erstellen eines Dienstclientobjekts verwendet, mit dem ein neues Blob hochgeladen wird.

Im Beispiel auf GitHub können Sie sich diesen Code in einer Beispielanwendung ansehen.

Installieren von Clientbibliothekspaketen

Installieren Sie das Blob Storage-NuGet-Paket, um Blob Storage zu nutzen, und das NuGet-Paket mit der Azure Identity-Clientbibliothek für .NET, um die Authentifizierung mit Microsoft Entra-Anmeldeinformationen durchzuführen. Installieren Sie die Clientbibliotheken über die .NET Core-Befehlszeilenschnittstelle oder die Paket-Manager-Konsole in Visual Studio.

.NET Core-Befehlszeile

  1. Öffnen Sie eine Befehlszeile, und wechseln Sie zu dem Verzeichnis, in dem Ihre Projektdatei enthalten ist.

  2. Führen Sie die Installationsbefehle aus.

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

Paket-Manager-Konsole

  1. Öffnen Sie das Projekt bzw. die Projektmappe in Visual Studio und dann die Konsole mit dem Befehl Extras>NuGet-Paket-Manager>Paket-Manager-Konsole.

  2. Führen Sie die Installationsbefehle aus.

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

.NET-Beispiel

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;
    }
}

Bereinigen von Ressourcen

Wenn Sie dieses Tutorial abgeschlossen haben und die Web-App und die zugehörigen Ressourcen nicht mehr benötigen, sollten Sie die von Ihnen erstellten Ressourcen bereinigen.

Löschen der Ressourcengruppe

Wählen Sie im Azure-Portal im Portalmenü die Option Ressourcengruppen und dann die Ressourcengruppe aus, die Ihren App-Dienst und den App Service-Plan enthält.

Wählen Sie Ressourcengruppe löschen aus, um die Ressourcengruppe und alle Ressourcen zu löschen.

Screenshot that shows deleting the resource group.

Die Ausführung dieses Befehls kann mehrere Minuten dauern.

Nächste Schritte

In diesem Tutorial haben Sie gelernt, wie die folgenden Aufgaben ausgeführt werden:

  • Erstellen einer systemseitig zugewiesenen verwalteten Identität
  • Erstellen eines Speicherkontos und Blob Storage-Containers
  • Zugreifen auf Speicher über eine Web-App mit verwalteten Identitäten