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:
- Tutorial: Erstellen einer ASP.NET-App in Azure mit Azure SQL-Datenbank
- Tutorial: Erstellen einer ASP.NET Core- und Azure SQL-Datenbank-App in Azure App Service
Danach stellt Ihre Beispiel-App ganz ohne Benutzername und Kennwort eine sichere Verbindung mit SQL-Datenbank her.
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:
- Tutorial: Erstellen einer ASP.NET-App in Azure mit SQL-Datenbank
- Tutorial: Erstellen einer ASP.NET Core- und SQL-Datenbank-App in Azure App Service.
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.
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.
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.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
- Visual Studio für Windows
- Visual Studio für macOS
- Visual Studio Code
- Azure-Befehlszeilenschnittstelle
- Azure PowerShell
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.
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.
Ö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
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 VerbindungszeichenfolgeMyDbConnection
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.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
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
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).
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.
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.
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.
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