Authentifizieren von in Azure gehosteten Apps für Azure-Ressourcen mit dem Azure SDK für .NET

Wenn eine App in Azure mit einem Dienst wie Azure App Service, Azure Virtual Machines oder Azure Container Instances gehostet wird, wird die Verwendung einer verwalteten Identität empfohlen, um eine App bei Azure-Ressourcen zu authentifizieren.

Eine verwaltete Identität stellt eine Identität für Ihre App bereit, sodass sie eine Verbindung mit anderen Azure-Ressourcen herstellen kann, ohne einen geheimen Schlüssel oder ein anderes Anwendungsgeheimnis verwenden zu müssen. Intern kennt Azure die Identität Ihrer App und die Ressourcen, mit der eine Verbindung hergestellt werden darf. Azure verwendet diese Informationen, um automatisch Microsoft Entra-Token für die App abzurufen, damit sie eine Verbindung mit anderen Azure-Ressourcen herstellen kann, ohne dass Sie Anwendungsgeheimnisse verwalten müssen.

Arten von verwalteten Identitäten

Es gibt zwei Arten von verwalteten Identitäten:

  • Systemseitig zugewiesen: Diese Art verwalteter Identitäten wird von einer Azure-Ressource bereitgestellt und direkt an sie gebunden. Wenn Sie die verwaltete Identität für eine Azure-Ressource aktivieren, erhalten Sie eine systemseitig zugewiesene verwaltete Identität für diese Ressource. Eine systemseitig zugewiesene verwaltete Identität ist an den Lebenszyklus der Azure-Ressource gebunden, der sie zugeordnet ist. Azure löscht automatisch die Identität, wenn die Ressource gelöscht wird. Da Sie nur die verwaltete Identität für die Azure-Ressource aktivieren müssen, die Ihren Code hostt, ist dies der am einfachsten zu verwendende Typ der verwalteten Identität.
  • Benutzerseitig zugewiesen: Sie können eine verwaltete Identität auch als eigenständige Azure-Ressource erstellen. Dies wird am häufigsten verwendet, wenn Ihre Lösung über mehrere Workloads verfügt, die auf mehreren Azure-Ressourcen ausgeführt werden und die alle dieselbe Identität und dieselben Berechtigungen gemeinsam nutzen müssen. Wenn Ihre Lösung beispielsweise Über Komponenten verfügt, die auf mehreren App Service- und VM-Instanzen ausgeführt wurden, die alle Zugriff auf denselben Satz von Azure-Ressourcen benötigen, wäre das Erstellen und Verwenden einer benutzerseitig zugewiesenen verwalteten Identität für diese Ressourcen sinnvoll.

In diesem Artikel werden die Schritte zum Aktivieren und Verwenden einer systemseitig zugewiesenen verwalteten Identität für eine App beschrieben. Wenn Sie eine benutzerseitig zugewiesene verwaltete Identität verwenden müssen, lesen Sie den Artikel Verwalten benutzerseitig zugewiesener verwalteter Identitäten , um zu erfahren, wie Sie eine benutzerseitig zugewiesene verwaltete Identität erstellen.

1: Aktivieren der verwalteten Identität in der Azure-Ressource, die die App hosten

Der erste Schritt besteht darin, die verwaltete Identität in Azure-Ressourcen zu aktivieren, die Ihre App hosten. Wenn Sie beispielsweise eine .NET-App mit Azure App Service hosten, müssen Sie die verwaltete Identität für die App Service-Web-App aktivieren, die Ihre App hostet. Wenn Sie einen virtuellen Computer zum Hosten Ihrer App verwenden, würden Sie Ihrem virtuellen Computer die Verwendung einer verwalteten Identität ermöglichen.

Sie können die Verwendung der verwalteten Identität für eine Azure-Ressource mithilfe der Azure-Portal oder der Azure CLI aktivieren.

Anweisungen Screenshot
Navigieren Sie im Azure-Portal zu der Ressource, die Ihren Anwendungscode hostet. Sie können beispielsweise den Namen Ihrer Ressource in das Suchfeld oben auf der Seite eingeben und zu ihr navigieren, indem Sie sie im Dialogfeld auswählen. Screenshot: Verwenden der oberen Suchleiste im Azure-Portal, um eine Azure-Ressource zu suchen und zu ihr zu navigieren
Wählen Sie auf der Seite für Ihre Ressource im linken Menü das Menüelement Identität aus. Alle Azure-Ressourcen, die verwaltete Identitäten unterstützen können, verfügen über das Menüelement Identität, auch wenn das Layout des Menüs geringfügig variieren kann. Screenshot: Speicherort des Menüelements Identität im linken Menü für eine Azure-Ressource.
Auf der Seite Identität :
  1. Schieben Sie den Schieberegler Status auf Ein.
  2. Wählen Sie Speichern.
Ein Bestätigungsdialogfeld überprüft, ob Sie die verwaltete Identität für Ihren Dienst aktivieren möchten. Antwort Ja , und die verwaltete Identität wird für die Azure-Ressource aktiviert.
Screenshot: Aktivieren der verwalteten Identität für eine Azure-Ressource auf der Seite Identität der Ressource.

2 - Zuweisen einer Rolle zur verwalteten Identität

Ermitteln Sie als Nächstes, welche Rollen (Berechtigungen) Ihre App benötigt, und weisen Sie die verwaltete Identität diesen Rollen in Azure zu. Einer verwalteten Identität können Rollen in einem Ressourcen-, Ressourcengruppen- oder Abonnementbereich zugewiesen werden. In diesem Beispiel wird gezeigt, wie Sie Rollen im Ressourcengruppenbereich zuweisen, da die meisten Anwendungen alle azure-Ressourcen in einer einzelnen Ressourcengruppe gruppieren.

Anweisungen Screenshot
Suchen Sie die Ressourcengruppe für Ihre App, indem Sie über das Suchfeld oben im Azure-Portal nach dem Namen der Ressourcengruppe suchen.

Navigieren Sie zu Ihrer Ressourcengruppe, indem Sie den Namen der Ressourcengruppe unter der Überschrift Ressourcengruppen im Dialogfeld auswählen.
Screenshot: Verwenden der oberen Suchleiste im Azure-Portal zum Suchen und Navigieren zu einer Ressourcengruppe in Azure. Dies ist die Ressourcengruppe, der Sie Rollen (Berechtigungen) zuweisen.
Wählen Sie auf der Seite für die Ressourcengruppe im linken Menü Die Option Zugriffssteuerung (IAM) aus. Screenshot: Speicherort des Menüelements Zugriffssteuerung (IAM) im linken Menü einer Azure-Ressourcengruppe.
Klicken Sie auf der Seite Zugriffssteuerungseinstellungen:
  1. Klicken Sie auf die Registerkarte Rollenzuweisungen.
  2. Wählen Sie im oberen Menü + Hinzufügen und aus dem dann angezeigten Dropdownmenü die Option Rollenzuweisung hinzufügen aus.
Screenshot, der zeigt, wie Sie zur Registerkarte Rollenzuweisungen und zum Speicherort der Schaltfläche navigieren, die zum Hinzufügen von Rollenzuweisungen zu einer Ressourcengruppe verwendet wird.
Auf der Seite Rollenzuweisung hinzufügen werden alle Rollen aufgelistet, die der Ressourcengruppe zugewiesen werden können.
  1. Verwenden Sie das Suchfeld, um die Liste auf eine besser verwaltbare Größe zu filtern. In diesem Beispiel wird gezeigt, wie Sie nach Storage-Blobrollen filtern.
  2. Wählen Sie die Rolle aus, die Sie zuweisen möchten.
Klicken Sie auf Weiter, um zum nächsten Bildschirm zu wechseln.
Screenshot: Filtern und Auswählen von Rollenzuweisungen, die der Ressourcengruppe hinzugefügt werden sollen.
Auf der nächsten Seite Rollenzuweisung hinzufügen können Sie angeben, welchem Benutzer die Rolle zugewiesen werden soll.
  1. Wählen Sie unter Zugriff zuweisen zu die Option Verwaltete Identität aus.
  2. Wählen Sie unter Mitglieder die Option + Mitglieder auswählen aus.
Auf der rechten Seite des Azure-Portal wird ein Dialogfeld geöffnet.
Screenshot: Auswählen der verwalteten Identität als Benutzertyp, den Sie der Rolle (Berechtigung) auf der Seite Rollenzuweisungen hinzufügen zuweisen möchten.
Im Dialogfeld Verwaltete Identitäten auswählen :
  1. Die Dropdownliste Verwaltete Identität und das Textfeld Auswählen können verwendet werden, um die Liste der verwalteten Identitäten in Ihrem Abonnement zu filtern. In diesem Beispiel werden durch Auswählen von App Service nur verwaltete Identitäten angezeigt, die einem App Service zugeordnet sind.
  2. Wählen Sie die verwaltete Identität für die Azure-Ressource aus, die Ihre App hostet.
Wählen Sie unten im Dialogfeld Auswählen aus, um den Vorgang fortzusetzen.
Screenshot: Verwenden des Dialogfelds „Verwaltete Identitäten auswählen“ zum Filtern und Auswählen der verwalteten Identität, der die Rolle zugewiesen werden soll.
Die verwaltete Identität wird nun auf dem Bildschirm Rollenzuweisung hinzufügen als ausgewählt angezeigt.

Wählen Sie Überprüfen und zuweisen aus, um zur letzten Seite zu gelangen, und wählen Sie erneut Überprüfen und zuweisen aus, um den Vorgang abzuschließen.
Screenshot des letzten Bildschirms „Rollenzuweisung hinzufügen

3 - Implementieren von DefaultAzureCredential in Ihrer Anwendung

DefaultAzureCredential ist eine dogmatische, sortierte Sequenz von Mechanismen für die Authentifizierung bei Microsoft Entra. Jeder Authentifizierungsmechanismus ist eine von der TokenCredential-Klasse abgeleitete Klasse, die als Anmeldeinformationen bezeichnet wird. Zur Laufzeit versucht DefaultAzureCredential, sich mit den ersten Anmeldeinformationen zu authentifizieren. Wenn diese Anmeldeinformationen kein Zugriffstoken abrufen, werden die nächsten Anmeldeinformationen in der Sequenz ausprobiert usw., bis erfolgreich ein Zugriffstoken abgerufen wurde. Auf diese Weise kann Ihre App unterschiedliche Anmeldeinformationen in verschiedenen Umgebungen verwenden, ohne umgebungsspezifischen Code zu schreiben.

Die Reihenfolge und die Speicherorte, in denen nach Anmeldeinformationen gesucht wird, DefaultAzureCredential finden Sie unter DefaultAzureCredential.

Fügen Sie zur Verwendung von DefaultAzureCredential das Paket Azure.Identity und optional das Paket Microsoft.Extensions.Azure zu Ihrer Anwendung hinzu:

Navigieren Sie in einem Terminal Ihrer Wahl zum Anwendungsprojektverzeichnis, und führen Sie die folgenden Befehle aus:

dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure

Auf Azure-Dienste wird mithilfe spezieller Clientklassen aus den verschiedenen Azure SDK-Clientbibliotheken zugegriffen. Diese Klassen und Ihre eigenen benutzerdefinierten Dienste sollten registriert werden, damit über die Abhängigkeitsinjektion in der gesamten App darauf zugegriffen werden kann. Führen Sie in Program.cs die folgenden Schritte aus, um eine Clientklasse und DefaultAzureCredential zu registrieren:

  1. Schließen Sie die Namespaces Azure.Identity und Microsoft.Extensions.Azure über using-Direktiven ein.
  2. Registrieren Sie den Azure-Dienstclient mithilfe der entsprechenden Erweiterungsmethode mit dem Präfix Add.
  3. Übergeben Sie eine Instanz von DefaultAzureCredential an die UseCredential-Methode.

Zum Beispiel:

using Microsoft.Extensions.Azure;
using Azure.Identity;

builder.Services.AddAzureClients(clientBuilder =>
{
    clientBuilder.AddBlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"));
    clientBuilder.UseCredential(new DefaultAzureCredential());
});

Eine Alternative zu UseCredential besteht darin, DefaultAzureCredential direkt zu instanziieren:

using Azure.Identity;

builder.Services.AddSingleton<BlobServiceClient>(_ =>
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new DefaultAzureCredential()));

Wenn der vorherige Code auf Ihrer lokalen Entwicklungsarbeitsstation ausgeführt wird, sucht er in den Umgebungsvariablen nach einem Anwendungsdienstprinzipal oder in lokal installierten Entwicklertools (etwa Visual Studio) nach einem Satz von Entwickleranmeldeinformationen. Beide Ansätze können verwendet werden, um die App während der lokalen Entwicklung bei Azure-Ressourcen zu authentifizieren.

Bei der Bereitstellung in Azure kann dieser Code Ihre App auch bei anderen Azure-Ressourcen authentifizieren. DefaultAzureCredential kann Umgebungseinstellungen und Konfigurationen für verwaltete Identitäten abrufen, um sich automatisch bei anderen Diensten zu authentifizieren.