Freigeben über


Lernprogramm: Verwenden der verwalteten Identität zum Verbinden einer Azure Web App mit einer Azure SQL-Datenbank ohne geheime Schlüssel

Azure App Service bietet einen hochgradig skalierbaren Webhostingdienst mit Self-Patching in Azure. Der App-Dienst stellt auch eine verwaltete Identität für Ihre App bereit, bei der es sich um eine schlüsselfertige Lösung zum Sichern des Zugriffs auf Azure SQL und andere Azure-Dienste handelt. Verwaltete Identitäten in App Service sorgen dafür, dass Ihre App sicherer wird, indem geheime Schlüssel wie Anmeldeinformationen in Verbindungszeichenfolgen eliminiert werden.

In diesem Lernprogramm erfahren Sie, wie Sie einer .NET-Beispiel-App verwaltete Identität hinzufügen, die über ein Azure SQL-Back-End verfügt. Nach Abschluss des Vorgangs kann Ihre App sicher eine Verbindung mit der Azure SQL-Datenbank herstellen, ohne dass ein Benutzername und ein Kennwort erforderlich sind.

Architekturdiagramm für das Tutorialszenario.

In diesem Tutorial erfahren Sie:

  • Aktivieren sie verwaltete Identitäten.
  • Gewähren Sie Azure SQL-Datenbankzugriff auf die verwaltete Identität.
  • Konfigurieren Sie Entity Framework für die Verwendung der Microsoft Entra-Authentifizierung mit SQL-Datenbank.
  • Stellen Sie mithilfe der Microsoft Entra-Authentifizierung eine Verbindung mit der SQL-Datenbank aus Visual Studio her.

Anleitungen zur Verwendung von Azure Database for MySQL oder Azure Database for PostgreSQL in Node.js, Python und Java Frameworks finden Sie im Lernprogramm: Herstellen einer Verbindung mit Azure-Datenbanken von App Service ohne geheime Schlüssel mithilfe einer verwalteten Identität.

Hinweis

Voraussetzungen

  • Wenn Sie nicht über ein Azure-Konto verfügen, erstellen Sie ein kostenloses Konto , bevor Sie beginnen.

  • Verfügen Sie über einen einfachen Azure App Service ASP.NET MVC oder ASP.NET Core MVC create-read-update-delete (CRUD)-App, die Azure SQL-Datenbank mit SQL-Authentifizierung als Back-End verwendet. Die Schritte in diesem Lernprogramm unterstützen die folgenden .NET-Versionen:

    • .NET Framework 4.8 und höher
    • .NET 6.0 und höher
  • Lassen Sie die Clientverbindung von Ihrem Computer zu Azure zu, damit Sie Ihre App in Ihrer Entwicklungsumgebung debuggen können. Sie können die Client-IP-Adresse hinzufügen, indem Sie die Schritte unter Verwalten von IP-Firewallregeln auf Serverebene mithilfe des Azure-Portals ausführen.

  • Melden Sie sich bei Azure Cloud Shell an, oder bereiten Sie Ihre Umgebung für die Verwendung der Azure CLI vor.

Gewähren des Datenbankadministratorzugriffs auf einen Microsoft Entra-Benutzer

Aktivieren Sie die Microsoft Entra-Authentifizierung für die Azure SQL-Datenbank, indem Sie einen Microsoft Entra-Benutzer als Administrator des Azure SQL-Servers zuweisen. Der Microsoft Entra-Administrator muss ein Benutzer sein, der erstellt, importiert, synchronisiert oder zur Microsoft Entra-ID eingeladen wird. Dieser Benutzer ist möglicherweise nicht identisch mit dem Microsoft-Kontobenutzer für Ihr Azure-Abonnement.

Führen Sie die folgenden Befehle in der Bash-Umgebung von Azure Cloud Shell oder nach der lokalen Anmeldung bei Azure CLI aus.

  1. Verwenden Sie az ad user list mit dem display-name, filter, oder upn Parameter, um die Objekt-ID für den Microsoft Entra ID-Benutzer abzurufen, den Sie als Administratoren erstellen möchten. Führen Sie az ad user list eigenständig aus, um Informationen für alle Benutzer im Microsoft Entra-Verzeichnis anzuzeigen.

    Der folgende Befehl listet beispielsweise Informationen für einen Microsoft Entra ID-Benutzer mit dem display-name Vorname Nachname auf.

    az ad user list --display-name "Firstname Lastname"
    

    Hier ist eine Beispielausgabe:

     "businessPhones": [],
     "displayName": "Firstname Lastname",
     "givenName": null,
     "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
     "jobTitle": null,
     "mail": "firstname@contoso.com",
     "mobilePhone": null,
     "officeLocation": null,
     "preferredLanguage": null,
     "surname": null,
     "userPrincipalName": "firstname@contoso.com"
    
  2. Fügen Sie den Microsoft Entra ID-Benutzer mithilfe von az sql server ad-admin create mit dem object-id Parameter als Administrator auf dem Azure SQL-Server hinzu. Ersetzen Sie <server-name> im folgenden Befehl durch den Servernamen minus dem .database.windows.net Suffix und <entra-id> durch den id Wert aus der Ausgabe des vorherigen az ad user list Befehls.

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

Einrichten der verwalteten Identitätskonnektivität für die App

Die folgenden Schritte konfigurieren Ihre App so, dass sie eine Verbindung mit der Azure SQL-Datenbank mithilfe einer vom System zugewiesenen verwalteten Identität herstellt. Informationen zum Verwenden einer vom Benutzer zugewiesenen Identität finden Sie im Lernprogramm: Herstellen einer Verbindung mit Azure-Datenbanken über App Service ohne geheime Schlüssel mithilfe einer verwalteten Identität.

Aktivieren der verwalteten Identität für die App

Um eine verwaltete Identität für Ihre Azure-App zu aktivieren, verwenden Sie den Befehl az webapp identity assign und ersetzen Sie <app-name> durch den Namen Ihrer App. Der Name einer vom System zugewiesenen Identität ist immer identisch mit dem App-Namen.

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

Beispiel für die Ausgabe:

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

Um die verwaltete Identität für einen Bereitstellungsplatz zu aktivieren, fügen Sie --slot <slot-name> zum vorherigen Befehl hinzu und verwenden Sie den Namen des Bereitstellungsplatzes in <slot-name>. Der Name einer vom System zugewiesenen Identität für einen Bereitstellungsplatz lautet <app-name>/slots/<slot-name>.

Sie können die Identität auch zu einer Microsoft Entra-Gruppe hinzufügen und dann sql-Datenbankzugriff auf die Microsoft Entra-Gruppe statt auf die Identität gewähren. Um Berechtigungen für eine Microsoft Entra-Gruppe zu erteilen, verwenden Sie den Anzeigenamen der Gruppe. Mit den folgenden Befehlen wird die Beispiel-Managed-Identität zu einer neuen Gruppe hinzugefügt, die myAzureSQLDBAccessGroup genannt wird.

$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

Erteilen von Berechtigungen für die verwaltete Identität

Erteilen Sie der Identität die Mindestberechtigungen, die Ihre App benötigt.

  1. Öffnen Sie eine PowerShell-Befehlszeile, und melden Sie sich mit dem folgenden SQLCMD-Befehl bei der SQL-Datenbank an. Ersetzen Sie <server-name> durch Ihren Servernamen, <db-name> durch Ihren Datenbanknamen und <admin-user> mit dem userPrincipalName des Administratorbenutzers aus der Ausgabe des vorherigen az ad user list-Befehls.

    sqlcmd -S <servername>.database.windows.net -d <db-name> -U <admin-user> -G -l 30
    

    Folge den Anweisungen, um sich anzumelden.

  2. Führen Sie an der SQL-Eingabeaufforderung die folgenden Befehle aus, um der App die mindestberechtigungen zu erteilen, die sie für die Datenbank benötigt. Ersetzen Sie <identity-name> durch den Namen der verwalteten Identität in Microsoft Entra ID, der mit dem App-Name identisch ist.

    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
    

Hinweis

Die verwalteten Back-End-Identitätsdienste verwalten einen Tokencache , der das Token für eine Zielressource nur aktualisiert, wenn es abläuft. Wenn Sie versuchen, die Berechtigungen Ihrer SQL-Datenbank zu ändern, nachdem Sie mit Ihrer App ein Token erhalten haben, bekommen Sie erst ein neues Token mit aktualisierten Berechtigungen, wenn das zwischengespeicherte Token abläuft.

Entfernen der ursprünglichen Verbindungszeichenfolge

Jegliche Änderungen, die Sie in web.config oder appsettings.json vorgenommen haben, funktionieren mit der verwalteten Identität. Sie können die ursprüngliche Verbindungszeichenfolge entfernen, die Sie beim ersten Bereitstellen Der App verwendet haben. Führen Sie zum Löschen der Verbindungszeichenfolge den folgenden Azure CLI-Befehl aus, indem Sie `<app-name>` durch den Namen Ihrer App und `<connection-string-name>` durch den Namen der Verbindungszeichenfolge ersetzen.

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

Einrichten Ihrer Entwicklungsumgebung

Richten Sie Ihre ausgewählte Entwicklungsumgebung ein, und melden Sie sich bei Azure an. Weitere Informationen zum Einrichten der Entwicklungsumgebung für die Microsoft Entra-Authentifizierung finden Sie unter Azure Identity-Clientbibliothek für .NET.

Visual Studio für Windows ist in die Microsoft Entra-Authentifizierung integriert.

  1. Um die Entwicklung und das Debuggen in Visual Studio zu aktivieren, fügen Sie Ihren Microsoft Entra-Benutzer in Visual Studio hinzu, indem Sie im oberen Menü "Dateikontoeinstellungen>" auswählen und dann "Anmelden" oder "Hinzufügen" auswählen.
  2. Wenn Sie den Microsoft Entra-Benutzer für die Azure-Dienstauthentifizierung festlegen möchten, wählen Sie im oberen Menü Extras>Optionen, und wählen Sie dann Azure-Dienstauthentifizierung>Kontenauswahl aus. Wählen Sie die hinzugefügten Microsoft Entra-Benutzer*innen und dann OK aus.

Ändern Des Projekts und Veröffentlichen der App

Ihre azure SQL-Datenbank-gesicherte Web-App verwendet einen Datenbankkontext, um eine Verbindung mit der Datenbank herzustellen. Um die Microsoft Entra-Authentifizierung zum Arbeiten mit der App zu verwenden, müssen Sie den Datenbankkontext aktualisieren, um auf den Entity Framework SQL Server-Anbieter zu verweisen, der vom modernen Microsoft.Data.SqlClient-anbieter ADO.NET abhängt.

Der Entity Framework-Anbieter ersetzt den integrierten SQL Server-Anbieter und unterstützt die Microsoft Entra ID-Authentifizierungsmethoden System.Data.SqlClient . Weitere Informationen finden Sie unter Microsoft.EntityFramework.SqlServer.

[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))] funktioniert lokal mit der Verwendung von Microsoft.Data.SqlClient für den Datenbankkontext, aber da System.Data.SqlClient als Anbieter im Azure App Service hartcodiert ist, müssen Sie MicrosoftSqlDbConfiguration erweitern, um Verweise von System.Data.SqlClient zu Microsoft.Data.SqlClient umzuleiten. Die Schritte unterscheiden sich je nachdem, ob Sie über eine ASP.NET oder ASP.NET Core-App verfügen.

Eine ASP.NET Core-App verwendet Entity Framework Core standardmäßig.

  1. Fügen Sie in der Visual Studio Package Manager-Konsole das NuGet-Paket "Microsoft.Data.SqlClient" hinzu.

    Install-Package Microsoft.Data.SqlClient
    
  2. Ersetzen Sie in appsettings.json den Wert der Verbindungszeichenfolge mit dem folgenden Code und ersetzen Sie <server-name und <database-name> durch Ihren Servernamen und Datenbanknamen.

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

    Hinweis

    Sie können die Active Directory-Standardauthentifizierung sowohl auf Ihrem lokalen Computer als auch in Azure App Service verwenden. Der Treiber kann ein Token von microsoft Entra ID auf verschiedene Arten abrufen.

    Wenn die App bereitgestellt wird, ruft der Treiber ein Token aus der systemseitig zugewiesenen verwalteten Identität der App ab. Der Treiber 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 aufnehmen.

    Die DefaultAzureCredential Klasse speichert das Token im Arbeitsspeicher und ruft es vor dem Ablauf aus der Microsoft Entra ID ab. Sie benötigen keinen benutzerdefinierten Code, um das Token zu aktualisieren.

    Sie haben jetzt alles, was Sie zum Herstellen einer Verbindung mit der Azure SQL-Datenbank benötigen, wenn Sie in Visual Studio debuggen. Ihr Code verwendet den Microsoft Entra-Benutzer, den Sie beim Einrichten Ihrer Entwicklungsumgebung konfiguriert haben.

  3. Führen Sie Ihre App aus. Die CRUD-App in Ihrem Browser stellt mithilfe der Microsoft Entra-Authentifizierung eine direkte Verbindung mit der Azure SQL-Datenbank bereit. Dieses Setup ermöglicht das Ausführen von Datenbankmigrationen über Visual Studio.

  4. Veröffentlichen Sie Ihre Änderungen mithilfe der folgenden Git-Befehle:

    git commit -am "configure managed identity"
    git push azure main
    

Testen der App

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

Screenshot der Azure-App nach der ersten Codemigration.

Sie können jetzt die to-do Liste bearbeiten.

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.