Zugreifen auf Azure Storage über eine Web-App mit verwalteten Identitäten
Es wird beschrieben, wie Sie für eine Web-App (kein angemeldeter Benutzer), die in Azure App Service ausgeführt wird, mit verwalteten Identitäten auf Azure-Speicher zugreifen.
Sie möchten den Zugriff auf die Azure-Datenebene (Azure Storage, Azure SQL-Datenbank, Azure Key Vault oder andere Dienste) über Ihre 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
- Eine unter Azure App Service ausgeführte Webanwendung, für die das App Service-Modul für die Authentifizierung/Autorisierung aktiviert ist.
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 Speichern und dann 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.
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.
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.
Wählen Sie im angezeigten Fenster Speicherkonten die Option Erstellen aus.
Wählen Sie das Abonnement aus, in dem das Speicherkonto erstellt werden soll.
Wählen Sie unter dem Feld Ressourcengruppe im Dropdownmenü die Ressourcengruppe aus, die Ihre Web-App enthält.
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.
Wählen Sie einen Standort für Ihr Speicherkonto aus, oder verwenden Sie den Standardstandort.
Wählen Sie unter Leistung die Option Standard aus.
Wählen Sie unter Redundanz die Option Lokal redundanter Speicher (LRS) in der Dropdownliste aus.
Wählen Sie Überprüfen aus, um die Speicherkontoeinstellungen zu überprüfen und das Konto zu erstellen.
Klicken Sie auf Erstellen.
Führen Sie die folgenden Schritte aus, um einen Blob Storage-Container in Azure Storage zu erstellen.
Navigieren Sie im Azure-Portal zu Ihrem neuen Speicherkonto.
Scrollen Sie im linken Menü für das Speicherkonto zum Abschnitt Datenspeicher, und klicken Sie auf Container.
Wählen Sie die Schaltfläche + Container.
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.
Legen Sie die öffentliche Zugriffsebene für den Container fest. Die Standardebene ist Private (no anonymous access) (Privat (kein anonymer Zugriff)).
Klicken Sie auf Erstellen, 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.
Wählen Sie auf der Registerkarte Zuweisungstyp die Option Auftragsfunktionstyp und dann Weiter aus.
Wählen Sie auf der Registerkarte Rolle die Rolle Mitwirkender an Storage-Blobdaten in der Dropdownliste und dann Weiter aus.
Wählen Sie auf der Registerkarte Mitglieder die Option Zugriff zuweisen an ->Verwaltete Identität und dann Mitglieder ->Mitglieder auswählen aus. Suchen Sie im Fenster Verwaltete Identitäten auswählen in der Liste Verwaltete Identität die verwaltete Identität, die für Ihre App Service-Instanz erstellt wurde, und wählen Sie diese aus. Wählen Sie die Schaltfläche Auswählen aus.
Wählen Sie Überprüfen und zuweisen und dann erneut Überprüfen und zuweisen aus.
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-Befehlszeilenschnittstelle (CLI) oder die Paket-Manager-Konsole in Visual Studio.
.NET CLI
Öffnen Sie eine Befehlszeile, und wechseln Sie zu dem Verzeichnis, in dem Ihre Projektdatei enthalten ist.
Führen Sie die Installationsbefehle aus.
dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity
Paket-Manager-Konsole
Öffnen Sie das Projekt bzw. die Projektmappe in Visual Studio und dann die Konsole mit dem Befehl Extras>NuGet-Paket-Manager>Paket-Manager-Konsole.
Führen Sie die Installationsbefehle aus.
Install-Package Azure.Storage.Blobs
Install-Package Azure.Identity
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.