Freigeben über


Lernprogramm: Herstellen einer Verbindung mit Azure Datenbanken von App Service ohne geheime Schlüssel mithilfe einer verwalteten Identität

App Service bietet in Azure einen hoch skalierbaren Self-Patching-Webhostingdienst. Außerdem stellt sie eine managed Identity für Ihre App bereit, die eine turn-key-Lösung zum Sichern des Zugriffs auf Azure Datenbanken ist, einschließlich:

Hinweis

Dieses Lernprogramm enthält keine Anleitungen für Azure Cosmos DB, die Microsoft Entra Authentifizierung anders unterstützt. Weitere Informationen finden Sie in der Azure Cosmos DB-Dokumentation, z. B. Verwenden von systemzugewiesenen verwalteten Identitäten zum 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 Sie einen Microsoft Entra Benutzer als Administrator für Ihre Azure-Datenbank.
  • Stellen Sie eine Verbindung mit Ihrer Datenbank als Microsoft Entra Benutzer her.
  • Konfigurieren einer systemseitig oder benutzerseitig zugewiesenen verwalteten Identität für eine App Service-App.
  • Gewähren von Datenbankzugriff auf die verwaltete Identität.
  • Stellen Sie mithilfe einer verwalteten Identität eine Verbindung mit der Azure-Datenbank aus Ihrem Code (.NET Framework 4.8, .NET 6, Node.js, Python, Java) her.
  • Stellen Sie mithilfe des Microsoft Entra Benutzers eine Verbindung mit der Azure-Datenbank aus Ihrer Entwicklungsumgebung her.

Wenn Sie kein Azure Konto haben, erstellen Sie ein free-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 Database, 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 Ihre Umgebung auf die Azure CLI vor.

1. Installieren der kennwortlosen Dienstconnector-Erweiterung

Installieren Sie die neueste Kennwortlose Erweiterung für Service Connector 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 Azure CLI zuerst aktualisieren, um die Erweiterungsversion zu aktualisieren.

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 zur Ressource Azure App Service, wählen Sie Service Connector im linken Menü aus, und wählen Sie Create aus. Füllen Sie das Formular mit allen erforderlichen Parametern aus. Azure generiert automatisch den Verbindungserstellungsbefehl, den Sie kopieren können, um sie in der CLI zu verwenden oder in Azure Cloud Shell auszuführen.

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

  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 entweder die systemzugewiesene verwaltete Identität oder weisen Sie eine Benutzeridentität für die App <server-name> zu, die von Azure App Service gehostet wird.
  • 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 im connection string in der vorherigen Befehlsausgabe.
  • Legen Sie Konfigurationen namens AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRING oder AZURE_SQL_CONNECTIONSTRING auf die Azure Ressource basierend auf dem Datenbanktyp 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 Database connection string aus der Umgebungsvariable ab, die von Service Connector hinzugefügt wurde.

    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 Using Active Directory Managed Identity Authentication.

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

4. Einrichten Ihrer Entwicklungsumgebung

Dieser Beispielcode verwendet DefaultAzureCredential, um ein verwendbares Token für Ihre Azure Datenbank aus Microsoft Entra ID abzurufen und sie dann der Datenbankverbindung hinzufügt. Sie können DefaultAzureCredential zwar anpassen, doch es ist bereits standardmäßig sehr vielseitig. Es ruft ein Token vom angemeldeten Microsoft Entra Benutzer oder von einer verwalteten Identität ab, je nachdem, ob Sie es lokal in Ihrer Entwicklungsumgebung oder in App Service ausführen.

Ohne weitere Änderungen kann Ihr Code in Azure ausgeführt werden. Um Den Code lokal zu debuggen, benötigt Ihre Entwicklungsumgebung jedoch einen angemeldeten Microsoft Entra Benutzer. In diesem Schritt konfigurieren Sie Ihre Gewünschte Umgebung, indem Sie sich mit Ihrem Microsoft Entra Benutzer anmelden.

  1. Visual Studio für Windows ist in Microsoft Entra Authentifizierung integriert. Um die Entwicklung und das Debuggen in Visual Studio zu aktivieren, fügen Sie Ihren Microsoft Entra Benutzer in Visual Studio hinzu, indem Sie File>Account Settings aus dem Menü auswählen, und wählen Sie Sign in oder Add aus.

  2. So legen Sie den Microsoft Entra Benutzer für Azure Dienstauthentifizierung fest, wählen Sie Tools>Options aus dem Menü und dann Azure Service Authentication>Account Selection aus. Wählen Sie den hinzugefügten Microsoft Entra Benutzer aus, und wählen Sie OK aus.

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

Sie können Ihre App jetzt mit der SQL-Datenbank als Back-End entwickeln und debuggen, indem Sie 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 kann auf die Datenbank zugreifen, da er als Microsoft Entra Administrator für die Datenbank konfiguriert ist.

  2. Veröffentlichen Sie Ihren Code auf Azure mit der bevorzugten Veröffentlichungsmethode. 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 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.

Wie füge ich die verwaltete Identität zu einer Microsoft Entra Gruppe hinzu?

Wenn Sie möchten, können Sie die Identität zu einer Microsoft Entra Gruppe hinzufügen und dann der Microsoft Entra Gruppe anstelle der Identität Zugriff 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 Erteilen 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.

Für das Herstellen einer Verbindung mit der Azure-Datenbank sind zusätzliche Einstellungen erforderlich, die über den Umfang dieses Lernprogramms hinausgehen. Weitere Informationen dazu finden Sie unter den folgenden Links:

Konfigurieren Sie die TLS-Konnektivität in Azure Database for PostgreSQL – Single ServerKonfigurieren Sie die SSL-Konnektivität in Ihrer Anwendung, um eine sichere Verbindung mit Azure Database for MySQL herzustellen

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 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. Es gilt auch für Azure Cloud Shell. Sie können jedoch Cloud Shell im virtuellen Netzwerk bereitstellen und dann den Dienstconnectorbefehl in diesem Cloud Shell ausführen.

Nächste Schritte

Sie haben Folgendes gelernt:

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

Wie verwaltete Identitäten für App Service und Azure Functions

Tutorial: Stellen Sie eine Verbindung mit Azure Diensten her, die verwaltete Identitäten (mithilfe von Key Vault)