Tutorial: Verbindungsherstellung mit SQL-Datenbank über App Service (.NET) ohne Geheimnisse mithilfe einer verwalteten Identität

App Service bietet einen hochgradig skalierbaren Webhostingdienst mit Self-Patching in Azure. Außerdem steht eine verwaltete Identität für Ihre App zur Verfügung. Hierbei handelt es sich um eine vorgefertigte Lösung zum Schutz des Zugriffs auf Azure SQL-Datenbank und andere Azure-Dienste. Verwaltete Identitäten in App Service machen Ihre App frei von Geheimnissen (wie etwa Anmeldeinformationen in Verbindungszeichenfolgen) und verbessern so die Sicherheit Ihrer App. In diesem Tutorial fügen Sie der in einem der folgenden Tutorials erstellten Beispiel-Web-App eine verwaltete Identität hinzu:

Danach stellt Ihre Beispiel-App ganz ohne Benutzername und Kennwort eine sichere Verbindung mit SQL-Datenbank her.

Architekturdiagramm für das Tutorialszenario.

Hinweis

Die in diesem Tutorial behandelten Schritte gelten für die folgenden Versionen:

  • .NET Framework 4.8 und höher
  • .NET 6.0 und höher

Anleitungen für Azure Database for MySQL oder Azure Database for PostgreSQL in anderen Sprachframeworks (Node.js, Python und Java) finden Sie unter Tutorial: Verbindungsherstellung mit Azure-Datenbanken über App Service ohne Geheimnisse mithilfe einer verwalteten Identität.

Sie lernen Folgendes:

  • Aktivieren von verwalteten Identitäten
  • Gewähren von SQL-Datenbank-Zugriff für die verwaltete Identität
  • Konfigurieren von Entity Framework für die Verwendung der Microsoft Entra-Authentifizierung mit SQL-Datenbank
  • Herstellen einer Verbindung mit SQL-Datenbank aus Visual Studio mithilfe der Microsoft Entra-Authentifizierung

Hinweis

Die Microsoft Entra-Authentifizierung unterscheidet sich von der integrierten Windows-Authentifizierung im lokalen Active Directory (AD DS). AD DS und Microsoft Entra ID verwenden grundverschiedene Authentifizierungsprotokolle. Weitere Informationen finden Sie unter Dokumentation zu Microsoft Entra Domain Services.

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

Voraussetzungen

Dieser Artikel wird an der Stelle fortgesetzt, an der Sie eines der folgenden beiden Tutorials unterbrochen haben:

Absolvieren Sie zunächst eins der beiden Tutorials, sofern noch nicht geschehen. Alternativ können Sie die Schritte für Ihre eigene .NET-App mit SQL-Datenbank anpassen.

Vergewissern Sie sich zum Debuggen Ihrer App mit SQL-Datenbank als Back-End, dass Sie Clientverbindung von Ihrem Computer zugelassen haben. Falls nicht, fügen Sie die Client-IP mithilfe der Schritte unter the steps at IP-Firewallregeln für Azure SQL-Datenbank and SQL Data Warehouse hinzu.

Bereiten Sie die Umgebung für die Azure CLI vor.

  • Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.

  • Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.

    • Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.

    • Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.

    • Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.

1. Gewähren des Datenbankzugriffs für Microsoft Entra-Benutzer*innen

Aktivieren Sie zunächst die Microsoft Entra-Authentifizierung für SQL-Datenbank, indem Sie eine*n Microsoft Entra-Benutzer*in als Administrator*in des Servers zuweisen. Dieser Benutzer unterscheidet sich von dem Microsoft-Konto, das Sie bei der Registrierung für Ihr Azure-Abonnement verwendet haben. Es muss sich um eine*n Benutzer*in handeln, den bzw. die Sie in Microsoft Entra ID erstellt, importiert, synchronisiert oder eingeladen haben. Weitere Informationen zu zulässigen Microsoft Entra-Benutzer*innen finden Sie unter Microsoft Entra-Features und -Einschränkungen in SQL-Datenbank.

  1. Wenn Ihr Microsoft Entra-Mandant noch keine Benutzer*innen enthält, erstellen Sie diese, indem Sie die Schritte unter Hinzufügen oder Löschen von Benutzer*innen mit Microsoft Entra ID ausführen.

  2. Ermitteln Sie die Objekt-ID des Microsoft Entra-Benutzers bzw. der Microsoft Entra-Benutzerin mithilfe von az ad user list, und ersetzen Sie den Platzhalter <user-principal-name>. Das Ergebnis wird in einer Variablen gespeichert.

    $azureaduser=(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query '[].id' --output tsv)
    

    Tipp

    Um die Liste aller Benutzerprinzipalnamen in Microsoft Entra ID anzuzeigen, führen Sie az ad user list --query '[].userPrincipalName' aus.

  3. Fügen Sie diesen Microsoft Entra-Benutzer mithilfe des Befehls az sql server ad-admin create in Cloud Shell als Active Directory-Administrator hinzu. Ersetzen Sie im folgenden Befehl <server-name> durch den Servernamen (ohne das Suffix .database.windows.net).

    az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    

Weitere Informationen zum Hinzufügen von Active Directory-Administrator*innen finden Sie unter Bereitstellen von Microsoft Entra-Administrator*innen für Ihren Server.

2. Einrichten der Entwicklungsumgebung

  1. Visual Studio für Windows ist in die Microsoft Entra-Authentifizierung integriert. Sie fügen in Visual Studio Microsoft Entra-Benutzer*innen hinzu, damit diese in Visual Studio entwickeln und debuggen können. Wählen Sie dazu das Menü Datei>Kontoeinstellungen und anschließend Anmelden oder Hinzufügen aus.

  2. Wählen Sie das Menü Extras>Optionen und anschließend Azure-Dienstauthentifizierung>Kontoauswahl aus, um Microsoft Entra-Benutzer*innen für die Azure-Dienstauthentifizierung festzulegen. Wählen Sie die hinzugefügten Microsoft Entra-Benutzer*innen und dann OK aus.

Weitere Informationen zum Einrichten der Entwicklungsumgebung für die Microsoft Entra-Authentifizierung finden Sie unter Azure Identity-Clientbibliothek für .NET.

Nun können Sie Ihre App mit SQL-Datenbank als Back-End entwickeln und debuggen und dabei die Microsoft Entra-Authentifizierung verwenden.

3. Ändern des Projekts

Hinweis

Die Verwendung von Microsoft.Azure.Services.AppAuthentication wird für das neue Azure SDK nicht mehr empfohlen. Sie wird durch die neue Azure-Identitätsclientbibliothek ersetzt, die für .NET, Java, TypeScript und Python verfügbar ist und für alle Neuentwicklungen verwendet werden sollte. Informationen zur Migration zu Azure Identity finden Sie im Azure Identity.

Welche Schritte Sie für das Projekt ausführen, hängt davon ab, ob Sie Entity Framework (Standardeinstellung für ASP.NET) oder Entity Framework Core (Standardeinstellung für ASP.NET Core) verwenden.

  1. Öffnen Sie in Visual Studio die Paket-Manager-Konsole, und fügen Sie das NuGet-Paket Microsoft.Data.SqlClient hinzu:

    Install-Package Microsoft.Data.SqlClient -Version 5.1.0
    
  2. Im Tutorial ASP.NET Core und SQL-Datenbank wird die Verbindungszeichenfolge MyDbConnection in appsettings.json noch nicht verwendet. Sowohl die lokale Umgebung als auch die Azure-Umgebung erhalten Verbindungszeichenfolgen aus ihren jeweiligen Umgebungsvariablen, damit Verbindungsgeheimnisse aus der Quelldatei herausgehalten werden. Mit der Active Directory-Authentifizierung gibt es jetzt jedoch keine Geheimnisse mehr. Ersetzen Sie in appsettings.json den Wert der Verbindungszeichenfolge MyDbConnection durch Folgendes:

    "Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"
    

    Hinweis

    Der Active Directory-Standardauthentifizierungstyp kann sowohl auf dem lokalen Computer als auch in Azure App Service verwendet werden. Der Treiber versucht, mit verschiedenen Verfahren ein Token von Microsoft Entra ID abzurufen. Wenn die App bereitgestellt wird, erhält der Treiber ein Token aus der vom System zugewiesenen verwalteten Identität der App. Sie kann sich auch mit einer vom Benutzer zugewiesenen verwalteten Identität authentifizieren, wenn Sie User Id=<client-id-of-user-assigned-managed-identity>; in Ihre Verbindungszeichenfolge einschließen. Wenn die App lokal ausgeführt wird, wird versucht, ein Token aus Visual Studio, Visual Studio Code und aus der Azure CLI abzurufen.

    Das ist alles, was Sie benötigen, um eine Verbindung mit SQL-Datenbank herzustellen. Wenn Sie in Visual Studio debuggen, verwendet Ihr Code den/die Microsoft Entra-Benutzer*in, den/die Sie unter 2. Einrichten Ihrer Entwicklungsumgebung konfiguriert haben. Sie richten die SQL-Datenbank später ein, um eine Verbindung von der verwalteten Identität ihrer App Service-App zuzulassen. Die DefaultAzureCredential-Klasse speichert das Token im Arbeitsspeicher zwischen und ruft es kurz vor dem Ablauf von Microsoft Entra ID ab. Sie benötigen keinen benutzerdefinierten Code, um das Token zu aktualisieren.

  3. Drücken Sie Ctrl+F5, um die App erneut auszuführen. Dieselbe CRUD-App in Ihrem Browser stellt nun unter Verwendung der Microsoft Entra-Authentifizierung eine Direktverbindung mit Azure SQL-Datenbank her. Dieses Setup ermöglicht das Ausführen von Datenbankmigrationen über Visual Studio.

4. Verwenden von Konnektivität mit verwalteter Identität

Als Nächstes konfigurieren Sie Ihre App Service-App so, dass sie beim Herstellen der Verbindung mit SQL-Datenbank eine vom System zugewiesene verwaltete Identität verwendet.

Hinweis

Die Anweisungen in diesem Abschnitt gelten für eine systemseitig zugewiesene Identität. Informationen zur Verwendung einer benutzerseitig zugewiesenen Identität finden Sie unter Tutorial: Verbindungsherstellung mit Azure-Datenbanken über App Service ohne Geheimnisse mithilfe einer verwalteten Identität.

Aktivieren einer verwalteten Identität für die App

Verwenden Sie den Befehl az webapp identity assign in Cloud Shell, um eine verwaltete Identität für Ihre Azure-App zu aktivieren. Ersetzen Sie im folgenden Befehl den Platzhalter <app-name>.

az webapp identity assign --resource-group myResourceGroup --name <app-name>

Hinweis

Wenn Sie eine verwaltete Identität für einen Bereitstellungsslot aktivieren möchten, fügen Sie --slot <slot-name> hinzu, und verwenden Sie in <slot-name> den Namen des Slots.

Dies ist ein Beispiel für die Ausgabe:

{
  "additionalProperties": {},
  "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "type": "SystemAssigned"
}

Erteilen von Berechtigungen für eine verwaltete Identität

Hinweis

Wenn Sie möchten, können Sie die Identität einer Microsoft Entra-Gruppe hinzufügen und dann SQL-Datenbank Zugriff auf die Microsoft Entra-Gruppe anstatt auf die Identität gewähren. Mit den folgenden Befehlen wird beispielsweise die verwaltete Identität aus dem vorherigen Schritt zu einer neuen Gruppe namens myAzureSQLDBAccessGroup hinzugefügt:

$groupid=(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
$msiobjectid=(az webapp identity show --resource-group myResourceGroup --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid
  1. Melden Sie sich in Cloud Shell mithilfe des Befehls „sqlcmd“ bei SQL-Datenbank an. Ersetzen Sie <server-name> durch den Namen Ihres Servers, <db-name> durch den von Ihrer App verwendeten Datenbanknamen sowie <aad-user-name> und <aad-password> durch die Anmeldeinformationen Ihres/Ihrer Microsoft Entra-Benutzers/Benutzerin.

    sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
    
  2. Führen Sie an der SQL-Eingabeaufforderung für die gewünschte Datenbank die folgenden Befehle aus, um der App die nötigen Mindestberechtigungen zu erteilen. Ein auf ein Objekt angewendeter

    CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
    ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>];
    GO
    

    <identity-name> ist der Name der verwalteten Identität in Microsoft Entra ID. Bei einer systemseitig zugewiesenen Identität wird immer der Namen Ihrer App Service-App verwendet. Bei einem Bereitstellungsslot lautet der Name der systemseitig zugewiesenen Identität <App-Name>/slots/<Slotname>. Wenn Sie Berechtigungen für eine Microsoft Entra-Gruppe zuweisen möchten, verwenden Sie stattdessen den Anzeigenamen der Gruppe (z. B. myAzureSQLDBAccessGroup).

  3. Geben Sie EXIT ein, um zur Cloud Shell-Eingabeaufforderung zurückzukehren.

    Hinweis

    Die Back-End-Dienste verwalteter Identitäten verwalten darüber hinaus einen Tokencache, der das Token für eine Zielressource nur bei Ablauf aktualisiert. Wenn Sie beim Konfigurieren der Berechtigungen für SQL-Datenbank einen Fehler machen und die Berechtigungen ändern möchten, nachdem Sie versucht haben, mit Ihrer App ein Token abzurufen, erhalten Sie tatsächlich erst dann ein neues Token mit den aktualisierten Berechtigungen, wenn das zwischengespeicherte Token abläuft.

    Hinweis

    Microsoft Entra ID und verwaltete Identitäten werden für lokale SQL Server-Instanzen nicht unterstützt.

Ändern der Verbindungszeichenfolge

Zur Erinnerung: Die in Web.config oder appsettings.json vorgenommenen Änderungen funktionieren auch mit der verwalteten Identität. Sie müssen also lediglich die vorhandene Verbindungszeichenfolge in App Service entfernen, die von Visual Studio im Zuge der erstmaligen Bereitstellung Ihrer App erstellt wurde. Verwenden Sie den folgenden Befehl, und ersetzen Sie dabei den Platzhalter <app-name> durch den Namen Ihrer App.

az webapp config connection-string delete --resource-group myResourceGroup --name <app-name> --setting-names MyDbConnection

5. Veröffentlichen der Änderungen

Nun müssen die Änderungen nur noch in Azure veröffentlicht werden.

  1. Wurden Sie vom Tutorial: Erstellen einer ASP.NET-App in Azure mit SQL-Datenbank weitergeleitet, veröffentlichen Sie Ihre Änderungen in Visual Studio. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt DotNetAppSqlDb, und wählen Sie Veröffentlichen aus.

    Veröffentlichen über den Projektmappen-Explorer

  2. Wählen Sie auf der Veröffentlichungsseite die Option Veröffentlichen aus.

    Wichtig

    Stellen Sie sicher, dass der App Service-Name nicht mit vorhandenen App-Registrierungen übereinstimmt. Dies führt zu Prinzipal-ID-Konflikten.

Wenn die neue Webseite Ihre Aufgabenliste anzeigt, stellt Ihre App unter Verwendung der verwalteten Identität eine Verbindung mit der Datenbank her.

Azure-App nach Code First-Migration

Die Aufgabenliste sollte sich nun wie gewohnt bearbeiten lassen.

Bereinigen von Ressourcen

In den vorherigen Schritten haben Sie Azure-Ressourcen in einer Ressourcengruppe erstellt. Wenn Sie diese Ressourcen in Zukunft nicht mehr benötigen, löschen Sie die Ressourcengruppe, indem Sie den folgenden Befehl in Cloud Shell ausführen:

az group delete --name myResourceGroup

Die Ausführung dieses Befehls kann eine Minute in Anspruch nehmen.

Nächste Schritte

Sie haben Folgendes gelernt:

  • Aktivieren von verwalteten Identitäten
  • Gewähren von SQL-Datenbank-Zugriff für die verwaltete Identität
  • Konfigurieren von Entity Framework für die Verwendung der Microsoft Entra-Authentifizierung mit SQL-Datenbank
  • Herstellen einer Verbindung mit SQL-Datenbank aus Visual Studio mithilfe der Microsoft Entra-Authentifizierung