Tutorial: Verbindungsherstellung mit Azure-Datenbanken über App Service 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, wobei es sich um eine vorgefertigte Lösung zum Schutz des Zugriffs auf Azure-Datenbank handelt, einschließlich:

Hinweis

Dieses Tutorial enthält keine Anleitungen für Azure Cosmos DB, die Microsoft Entra-Authentifizierung auf andere Weise unterstützt. Weitere Informationen finden Sie in der Azure Cosmos DB-Dokumentation, z. B. unter Verwenden von systemseitig zugewiesenen verwalteten Identitäten für den Zugriff auf Azure Cosmos DB-Daten.

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 wird gezeigt, wie Sie eine Verbindung mit den oben erwähnten Datenbanken aus App Service mithilfe verwalteter Identitäten herstellen.

Sie lernen Folgendes:

  • Konfigurieren eines Microsoft Entra-Benutzers oder einer Microsoft Entra-Benutzerin als Administrator*in für Ihre Azure-Datenbank
  • Herstellen einer Verbindung mit Ihrer Datenbank als Microsoft Entra-Benutzer*in
  • Konfigurieren einer systemseitig oder benutzerseitig zugewiesenen verwalteten Identität für eine App Service-App.
  • Gewähren von Datenbankzugriff auf die verwaltete Identität.
  • Herstellen einer Verbindung mit der Azure-Datenbank aus Ihrem Code (.NET Framework 4.8, .NET 6, Node.js, Python, Java) mithilfe einer verwalteten Identität.
  • Herstellen einer Verbindung mit der Azure-Datenbank aus Ihrer Entwicklungsumgebung mithilfe des Microsoft Entra-Benutzers oder der Microsoft Entra-Benutzerin

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

Voraussetzungen

  • Erstellen Sie eine App in App Service, basierend auf .NET, Node.js, Python oder Java.
  • Erstellen Sie einen Datenbankserver mit Azure SQL-Datenbank, Azure Database for MySQL oder Azure Database for PostgreSQL.
  • Sie sollten mit dem Standardkonnektivitätsmuster (mit Benutzername und Kennwort) vertraut und in der Lage sein, eine erfolgreiche Verbindung von Ihrer App Service-App mit Ihrer ausgewählten Datenbank herzustellen.

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. Installieren der kennwortlosen Dienstconnector-Erweiterung

Installieren Sie die aktuelle kennwortlose Dienstconnector-Erweiterung für die Azure CLI:

az extension add --name serviceconnector-passwordless --upgrade

Hinweis

Überprüfen Sie mit az version, ob Sie Version 2.0.2 oder höher der Erweiterung „serviceconnector-passwordless“ ausführen. Möglicherweise müssen Sie zuerst ein Upgrade der Azure CLI durchführen, um die Erweiterungsversion upzugraden.

2. Erstellen einer kennwortlosen Verbindung

Erstellen Sie als nächstes eine kennwortlose Verbindung mit dem Dienstconnector.

Tipp

Das Azure-Portal kann Ihnen beim Verfassen der folgenden Befehle helfen. Wechseln Sie im Azure-Portal zu Ihrer Azure App Service-Ressource, wählen Sie Service Connector im linken Menü aus und wählen Sie Erstellen aus. Füllen Sie das Formular mit allen erforderlichen Parametern aus. Azure generiert automatisch den Verbindungserstellungsbefehl, den Sie kopieren können, um ihn in der CLI zu verwenden oder in Azure Cloud Shell auszuführen.

Der folgende Azure CLI-Befehl verwendet einen --client-type-Parameter.

  1. Führen Sie optional az webapp connection create sql -h aus, um die unterstützten Clienttypen abzurufen.

  2. Wählen Sie einen Clienttyp aus und führen Sie den entsprechenden Befehl aus. Ersetzen Sie die folgenden Platzhalter durch Ihre eigenen Informationen:

    az webapp connection create sql \
        --resource-group <group-name> \
        --name <server-name> \
        --target-resource-group <sql-group-name> \
        --server <sql-name> \
        --database <database-name> \
        --user-identity client-id=<client-id> subs-id=<subscription-id> \
        --client-type <client-type>
    

Mit diesem Dienstconnector-Befehl werden die folgenden Aufgaben im Hintergrund ausgeführt:

  • Aktivieren Sie die vom System zugewiesene verwaltete Identität oder weisen Sie eine Benutzeridentität für die von Azure App Service gehostete <server-name>-App zu.
  • Legen Sie den Microsoft Entra-Administrator auf den aktuellen angemeldeten Benutzer fest.
  • Fügen Sie einen Datenbankbenutzer für die vom System zugewiesene verwaltete Identität oder vom Benutzer zugewiesene verwaltete Identität hinzu. Gewähren Sie diesem Benutzer alle Berechtigungen für die Datenbank <database-name>. Der Benutzername befindet sich in der Verbindungszeichenfolge in der vorherigen Befehlsausgabe.
  • Legen Sie Konfigurationen mit dem Namen AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRING oder AZURE_SQL_CONNECTIONSTRING entsprechend dem Datenbanktyp auf die Azure-Ressource fest.
  • Für App Service werden die Konfigurationen auf dem Blatt App-Einstellungen festgelegt.

Wenn beim Erstellen einer Verbindung Probleme auftreten, finden Sie hier Informationen zur Problembehandlung.

3. Ändern Ihres Codes

  1. Installieren Sie Abhängigkeiten.

    dotnet add package Microsoft.Data.SqlClient
    
  2. Rufen Sie die Azure SQL-Datenbank-Verbindungszeichenfolge aus der Umgebungsvariable ab, die vom Dienstconnector hinzugefügt wird.

    using Microsoft.Data.SqlClient;
    
    // AZURE_SQL_CONNECTIONSTRING should be one of the following:
    // For system-assigned managed identity:"Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;TrustServerCertificate=True"
    // For user-assigned managed identity: "Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;User Id=<client-id-of-user-assigned-identity>;TrustServerCertificate=True"
    
    string connectionString = 
        Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")!;
    
    using var connection = new SqlConnection(connectionString);
    connection.Open();
    

    Weitere Informationen finden Sie unter Verwenden der Active Directory mit verwalteter Identität-Authentifizierung.

Weitere Informationen finden Sie unter Startseite für die Clientprogrammierung in Microsoft SQL Server. Weitere Codebeispiele finden Sie unter Erstellen einer kennwortlosen Verbindung mit einem Datenbankdienst über Dienstconnector.

4. Einrichten Ihrer Entwicklungsumgebung

In diesem Beispielcode wird DefaultAzureCredential dazu verwendet, ein nutzbares Token für Ihre Azure-Datenbank aus Microsoft Entra ID abzurufen, das dann der Datenbankverbindung hinzugefügt wird. Sie können DefaultAzureCredential zwar anpassen, doch es ist bereits standardmäßig sehr vielseitig. Es wird ein Token vom angemeldeten Microsoft Entra-Benutzer bzw. von der angemeldeten Microsoft Entra-Benutzerin oder von einer verwalteten Identität abgerufen, je nachdem, ob Sie ihn lokal in Ihrer Entwicklungsumgebung oder in App Service ausführen.

Ohne weitere Änderungen ist Ihr Code zur Ausführung in Azure bereit. Um Ihren Code lokal zu debuggen, benötigt Ihre Entwicklungsumgebung jedoch einen angemeldeten Microsoft Entra-Benutzer oder eine angemeldete Microsoft Entra-Benutzerin. In diesem Schritt konfigurieren Sie die Umgebung Ihrer Wahl, indem Sie sich mit Ihrem*r Microsoft Entra-Benutzer*in anmelden.

  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.

5. Testen und Veröffentlichen

  1. Führen Sie Ihren Code in Ihrer Entwicklungsumgebung aus. Ihr Code verwendet den angemeldeten Microsoft Entra-Benutzer in Ihrer Umgebung, um eine Verbindung mit der Back-End-Datenbank herzustellen. Der Benutzer oder die Benutzerin kann auf die Datenbank zugreifen, da er bzw. sie als Microsoft Entra-Administrator*in für die Datenbank konfiguriert ist.

  2. Veröffentlichen Sie Ihren Code mithilfe der bevorzugten Veröffentlichungsmethode in Azure. In App Service verwendet Ihr Code die verwaltete Identität der App, um eine Verbindung mit der Back-End-Datenbank herzustellen.

Häufig gestellte Fragen

Unterstützt die verwaltete Identität SQL Server?

Ja. Weitere Informationen finden Sie unter:

Ich erhalte den Fehler Login failed for user '<token-identified principal>'..

Die verwaltete Identität, für die Sie versuchen, ein Token anzufordern, ist nicht berechtigt, auf die Azure-Datenbank zuzugreifen.

Ich habe Änderungen an der App Service-Authentifizierung oder der zugehörigen App-Registrierung vorgenommen. Warum erhalte ich weiterhin das alte Token?

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 die Konfiguration ändern, 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. Die beste Möglichkeit, um dies zu umgehen, besteht darin, Ihre Änderungen mit einem neuen InPrivate (Edge)/privatem (Safari)/Incognito (Chrome)-Fenster zu testen. Auf diese Weise können Sie sicher sein, dass Sie mit einer neuen authentifizierten Sitzung beginnen.

Gewusst wie: Hinzufügen der verwalteten Identität zu einer Microsoft Entra-Gruppe

Wenn Sie möchten, können Sie die Identität einer Microsoft Entra-Gruppe hinzufügen und dann 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 <group-name> --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid

Informationen zum Gewähren von Datenbankberechtigungen für eine Microsoft Entra-Gruppe finden Sie in der Dokumentation für den jeweiligen Datenbanktyp.

Ich erhalte den Fehler SSL connection is required. Please specify SSL options and retry.

Das Herstellen einer Verbindung mit der Azure-Datenbank erfordert zusätzliche Einstellungen und geht über den Umfang dieses Tutorials hinaus. Weitere Informationen dazu finden Sie unter den folgenden Links:

Konfigurieren von TSL-Verbindungen in Azure Database for PostgreSQL – EinzelserverKonfigurieren von SSL-Verbindungen in der Anwendung für eine sichere Verbindung mit Azure Database for MySQL

Ich habe meine App mit der Vorlage „Web App + Datenbank” erstellt, und jetzt kann ich keine verwaltete Identitätsverbindung mit den Dienstconnector-Befehlen konfigurieren.

Dienstconnector benötigt Netzwerkzugriff auf die Datenbank, um Zugriff auf die App-Identität zu gewähren. Wenn Sie eine sichere standardmäßige App- und Datenbankarchitektur im Azure-Portal mit der Vorlage „Web App + Datenbank” erstellen, sperrt die Architektur den Netzwerkzugriff auf die Datenbank und lässt nur Verbindungen aus dem virtuellen Netzwerk zu. Das gilt auch für Azure Cloud Shell. Sie können Cloud Shell jedoch im virtuellen Netzwerk bereitstellen, und dann den Dienstconnector-Befehl in dieser Cloud Shell ausführen.

Nächste Schritte

Sie haben Folgendes gelernt:

  • Konfigurieren eines Microsoft Entra-Benutzers oder einer Microsoft Entra-Benutzerin als Administrator*in für Ihre Azure-Datenbank
  • Herstellen einer Verbindung mit Ihrer Datenbank als Microsoft Entra-Benutzer*in
  • Konfigurieren einer systemseitig oder benutzerseitig zugewiesenen verwalteten Identität für eine App Service-App.
  • Gewähren von Datenbankzugriff auf die verwaltete Identität.
  • Herstellen einer Verbindung mit der Azure-Datenbank aus Ihrem Code (.NET Framework 4.8, .NET 6, Node.js, Python, Java) mithilfe einer verwalteten Identität.
  • Herstellen einer Verbindung mit der Azure-Datenbank aus Ihrer Entwicklungsumgebung mithilfe des Microsoft Entra-Benutzers oder der Microsoft Entra-Benutzerin