Tutorial: Verbinden einer Funktions-App in Azure SQL mit verwalteter Identität und SQL-Bindungen

Azure Functions macht eine verwaltete Identität verfügbar. Hierbei handelt es sich um eine vorgefertigte Lösung zum Schutz des Zugriffs auf Azure SQL-Datenbank und andere Azure-Dienste. Verwaltete Identitäten erhöhen die Sicherheit der App, indem Geheimnisse (wie Anmeldeinformationen in Verbindungszeichenfolgen) aus der App entfernt werden. In diesem Tutorial fügt man einer Funktions-App eine verwaltete Identität hinzu, die Azure SQL-Bindungen verwendet.

Dieses Tutorial verwendet eine benutzerzugewiesene verwaltete Identität (UAMI), die empfohlen wird, da sie ressourcenübergreifend geteilt werden kann und unabhängig vom App-Lebenszyklus ist. Für weitere Informationen zu identitätsbasierten Verbindungen in Azure Functions siehe Verbindungen zu entfernten Diensten konfigurieren.

Wenn du dieses Tutorial abgeschlossen hast, verbindet sich deine Funktions-App mit der Azure SQL-Datenbank, ohne dass Benutzername und Passwort benötigt werden.

Ein Überblick über die Schritte, die Sie unternehmen:

Gewähren des Datenbankzugriffs für Microsoft Entra-Benutzer

Erstens: Aktivieren Sie die Microsoft Entra-Authentifizierung für die SQL-Datenbank, indem ein Microsoft Entra-Benutzer als Active Directory-Administrator des Servers zugewiesen wird. 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 finden Sie unter Microsoft Entra-Features und -Einschränkungen in SQL-Datenbank.

Sie können die Microsoft Entra-Authentifizierung über das Azure-Portal, PowerShell oder die Azure CLI aktivieren. Die Anleitungen für die Azure CLI finden Sie im folgenden Abschnitt. Informationen zur Durchführung dieser Aufgabe über das Azure-Portal und PowerShell finden Sie in der Azure SQL-Dokumentation zur Microsoft Entra-Authentifizierung.

  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. Finden Sie die Objekt-ID des Microsoft Entra-Benutzers mithilfe des az ad user list-Befehls, und ersetzen Sie <user-principal-name>. Speichere das Ergebnis auf eine Variable.

    Für Azure CLI 2.37.0 und neuer:

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

    Für ältere Versionen der Azure-Befehlszeilenschnittstelle:

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].objectId --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 als Active Directory-Administrator hinzu, indem Sie den az sql server ad-admin create Befehl in Cloud Shell verwenden. 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 eines Active Directory-Administrators finden Sie unter Bereitstellen eines Microsoft Entra-Administrators für Ihren Server.

Erstellen einer benutzerseitig zugewiesenen verwalteten Identität

Erstelle eine benutzerdefinierte verwaltete Identität und weise sie deiner Funktions-App zu. Verwenden Sie eine benutzerdefinierte Identität, weil Sie sie über mehrere Ressourcen hinweg wiederverwenden können und ihr Lebenszyklus unabhängig von Ihrer Funktionsanwendung ist.

  1. Suchen Sie im Azure-Portal nach Verwaltete Identitäten und wählen Sie Erstellen aus.

  2. Wählen Sie Ihr Abonnement, Ihre Ressourcengruppe, Ihre Region und geben Sie der Identität einen Namen (zum Beispiel, my-sql-identity).

  3. Klicken Sie auf Überprüfen und erstellen und dann auf Erstellen.

  4. Nachdem die Identität erstellt wurde, gehe im Portal zu deiner Funktionsanwendung.

  5. Unter Einstellungen wählen Sie Identität und dann die Registerkarte Benutzerzugewiesen.

  6. Wählen Sie Hinzufügen, wählen Sie die verwaltete Identität, die Sie erstellt haben, und wählen Sie Hinzufügen.

Tipp

Du kannst auch eine systemzugeordnete verwaltete Identität verwenden. Wenn Sie die systemseitig zugewiesene Option bevorzugen, aktivieren Sie sie auf der Registerkarte Systemseitig zugewiesen auf der Seite Identität. Wenn du systemzugewiesene Identität verwendest, ist das <identity-name> in den SQL-Befehlen der Name deiner Funktions-App, und du brauchst den Parameter User Id in der Verbindungszeichenfolge nicht.

Gewähren von SQL-Datenbank-Zugriff für die verwaltete Identität

In diesem Schritt verbinden Sie sich mit der SQL-Datenbank über ein Microsoft Entra-Benutzerkonto und gewähren der verwalteten Identität Zugriff auf die Datenbank.

  1. Öffnen Sie Ihr bevorzugtes SQL-Tool und melden Sie sich mit einem Microsoft Entra-Benutzerkonto an, wie zum Beispiel dem Microsoft Entra-Benutzer, den Sie als Administrator zugewiesen haben. Diesen Schritt kannst du in Cloud Shell mit dem SQLCMD-Befehl ausführen.

    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 Funktion die nötigen Berechtigungen zu erteilen. Zum Beispiel

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

    <identity-name> ist der Name der verwalteten Identität in Microsoft Entra ID. Für eine vom Benutzer zugewiesene Identität ist dieser Name der, den Sie der Identität bei der Erstellung gegeben haben (zum Beispiel, my-sql-identity). Bei einer systemzugewiesenen Identität ist der Name immer derselbe wie der Name Ihrer Funktions-App.

    Note

    Wenn Sie den trigger Azure SQL verwenden, erfordert Ihre verwaltete Identität zusätzliche Berechtigungen, die über db_datareader und db_datawriter hinausgehen. Weitere Informationen finden Sie unter Grant-Berechtigungen für Azure SQL Trigger.

Konfigurieren der SQL-Verbindungszeichenfolge der Azure Function

Im letzten Schritt konfigurieren Sie die SQL-Verbindungszeichenfolge der Funktionsanwendung so, dass sie die Authentifizierung mit verwalteter Identität von Microsoft Entra verwendet.

Du identifizierst den Namen der Verbindungszeichenfolge-Einstellung in deinem Funktionscode als das Binding-Attribut ConnectionStringSetting, wie in den SQL-Eingabe-Binding-Attributen und Annotationen zu sehen ist.

In den Anwendungseinstellungen Ihrer Funktions-App aktualisieren Sie die SQL-Verbindungszeichenfolge-Einstellung so, dass sie diesem Format folgt:

Server=<server-name>.database.windows.net; Authentication=Active Directory Default; Database=<database-name>; User Id=<client-id-of-user-assigned-identity>

Ersetzen Sie <server-name> sie durch Ihren SQL-Servernamen, <database-name> Ihren Datenbanknamen und <client-id-of-user-assigned-identity> die Client-ID Ihrer benutzerzugewiesenen verwalteten Identität. Die Client-ID finden Sie auf der Übersichtsseite Ihrer verwalteten Identitätsressource im Azure-Portal.

Tipp

Das Active Directory Default Authentifizierungsstichwort funktioniert sowohl lokal (mit deinen Entwicklerzugangsdaten) als auch in Azure (unter Verwendung der verwalteten Identität). Diese Funktion bedeutet, dass du denselben Verbindungszeichenfolge in beiden Umgebungen verwenden kannst. Für systemzugewiesene verwaltete Identität sollten Sie den Parameter User Id weglassen.

Weitere Informationen zu identitätsbasierten Verbindungen finden Sie unter Verbindungen zu entfernten Diensten konfigurieren.

Nächste Schritte