Tutorial: Verwenden identitätsbasierter Verbindungen anstelle von Geheimnissen bei Triggern und Bindungen

Dieses Tutorial zeigt Ihnen, wie Sie Azure Functions so konfigurieren, dass beim Herstellen einer Verbindung mit Azure Service Bus-Warteschlangen verwaltete Identitäten anstelle von Geheimnissen verwendet werden, die in den Einstellungen der Funktions-App gespeichert sind. Das Tutorial ist eine Fortsetzung des Tutorials Erstellen einer Funktions-App ohne Standardspeicher-Secrets in ihrer Definition. Weitere Informationen zu identitätsbasierten Verbindungen finden Sie unter Konfigurieren einer identitätsbasierten Verbindung.

Obwohl die gezeigten Verfahren in der Regel für alle Sprachen funktionieren, werden in diesem Tutorial derzeit speziell C#-Klassenbibliotheksfunktionen für Windows unterstützt.

In diesem Tutorial lernen Sie Folgendes:

  • Erstellen Sie einen Service Bus-Namespace und eine Service Bus-Warteschlange.
  • Konfigurieren Ihrer Funktions-App mit einer verwalteten Identität
  • Erstellen einer Rollenzuweisung, die dieser Identität die Berechtigung zum Lesen aus der Service Bus-Warteschlange erteilt
  • Erstellen und Bereitstellen einer Funktions-App mit einem Service Bus-Trigger
  • Überprüfen Ihrer identitätsbasierten Verbindung mit Service Bus

Voraussetzung

Beenden Sie die vorherige Anleitung: Erstellen Sie eine Funktions-App mit identitätsbasierten Verbindungen.

Erstellen einer Service Bus-Instanz und -Warteschlange

  1. Klicken Sie im Azure-Portal auf Ressource erstellen.

  2. Klicken Sie auf der Seite Ressource erstellen auf Integration>Service Bus.

  3. Verwenden Sie auf der Registerkarte Grundlagen die folgende Tabelle, um die Einstellungen für den Service Bus-Namespace zu konfigurieren. Behalten Sie für die übrigen Optionen die Standardwerte bei.

    Option Vorgeschlagener Wert BESCHREIBUNG
    Abonnement Ihr Abonnement Das Abonnement, in dem Ihre Ressourcen erstellt werden.
    Ressourcengruppe myResourceGroup Die Ressourcengruppe aus, die Sie mit Ihrer Funktions-App erstellt haben.
    Namespacename Global eindeutiger Name Der Namespace Ihrer Instanz, über die Ihre Funktion ausgelöst werden soll. Da der Namespace öffentlich zugänglich ist, müssen Sie einen Namen verwenden, der in Azure global eindeutig ist. Der Name muss außerdem zwischen 6 und 50 Zeichen lang sein, kann nur alphanumerische Zeichen und Bindestriche enthalten und darf nicht mit einer Zahl beginnen.
    Location myFunctionRegion Die Region, in der Sie Ihre Funktions-App erstellt haben.
    Preisstufe Basic Der Basistarif von Service Bus.
  4. Klicken Sie auf Überprüfen + erstellen. Wählen Sie Erstellen aus, wenn die Validierung erfolgreich war.

  5. Klicken Sie nach Abschluss der Bereitstellung auf Zu Ressource wechseln.

  6. Wählen Sie in Ihrem neuen Service Bus-Namespace + Warteschlange aus, um eine Warteschlange hinzuzufügen.

  7. Geben Sie myinputqueue als Namen der neuen Warteschlange ein, und klicken Sie auf Erstellen.

Nachdem Sie nun über eine Warteschlange verfügen, werden Sie der verwalteten Identität Ihrer Funktions-App eine Rollenzuweisung hinzufügen.

Konfigurieren Ihres Service Bus-Triggers mit einer verwalteten Identität

Um Service Bus-Trigger mit identitätsbasierten Verbindungen zu verwenden, müssen Sie die Rollenzuweisung Azure Service Bus-Datenempfänger zur verwalteten Identität in Ihrer Funktions-App hinzufügen. Diese Rolle ist erforderlich, wenn verwaltete Identitäten für eine Auslösung über den Service Bus-Namespace verwendet werden. Sie können dieser Rolle auch Ihr eigenes Konto hinzufügen, um während lokaler Tests eine Verbindung mit dem Service Bus-Namespace herstellen zu können.

Hinweis

Die Rollenanforderungen für die Verwendung identitätsbasierter Verbindungen variieren je nach Dienst und Art der Verbindung. Die Anforderungen variieren außerdem abhängig von Trigger, Eingabe- und Ausgabebindungen. Weitere Informationen zu spezifischen Rollenanforderungen finden Sie in der Trigger- und Bindungsdokumentation für den Dienst.

  1. Wählen Sie in Ihrem soeben erstellten Service Bus-Namespace die Option Zugriffssteuerung (IAM) aus. Mithilfe dieser Optionen können Sie anzeigen und konfigurieren, wer Zugriff auf die Ressource hat.

  2. Klicken Sie auf Hinzufügen, und wählen Sie Rollenzuweisung hinzufügen aus.

  3. Suchen Sie nach Azure Service Bus-Datenempfänger, wählen Sie die Einstellung aus, und klicken Sie auf Weiter.

  4. Wählen Sie auf der Registerkarte Mitglieder unter Zugriff zuweisen zu die Option Verwaltete Identität aus.

  5. Klicken Sie auf Mitglieder auswählen, um den Bereich Verwaltete Identitäten auswählen zu öffnen.

  6. Vergewissern Sie sich, dass unter Abonnement das Abonnement aufgeführt ist, in dem Sie zuvor die Ressource erstellt haben.

  7. Wählen Sie in der Auswahl Verwaltete Identität aus der Kategorie Systemseitig zugewiesene verwaltete Identität die Option Funktions-App aus. Neben der Bezeichnung „Funktions-App“ wird möglicherweise eine Zahl in Klammern angezeigt, die die Anzahl von Apps im Abonnement mit systemseitig zugewiesenen Identitäten angibt.

  8. Ihre App sollte in einer Liste unterhalb der Eingabefelder angezeigt werden. Andernfalls können Sie das Feld Auswählen verwenden, um die Ergebnisse nach dem Namen Ihrer App zu filtern.

  9. Klicken Sie auf Ihre Anwendung. Sie sollte nach unten in den Abschnitt Ausgewählte Mitglieder verschoben werden. Klicken Sie auf Auswählen.

  10. Klicken Sie im Bildschirm Rollenzuweisung hinzufügen auf Überprüfen + zuweisen. Überprüfen Sie die Konfiguration, und klicken Sie dann auf Überprüfen + zuweisen.

Sie haben Ihrer Funktions-App mithilfe von verwalteten Identitäten Zugriff auf den Service Bus-Namespace erteilt.

Herstellen einer Verbindung mit Service Bus in Ihrer Funktions-App

  1. Suchen Sie im Portal nach der Funktions-App, die Sie im vorheriges Tutorial erstellt haben, oder suchen Sie sie auf der Seite Funktions-App.

  2. Wählen Sie in Ihrer Funktions-App unter Einstellungen die Option Konfigurationen aus.

  3. Wählen Sie unter Anwendungseinstellungen die Option + Neue Anwendungseinstellung aus, um die neue Einstellung in der folgenden Tabelle zu erstellen.

    Name Wert Beschreibung
    ServiceBusConnection__fullyQualifiedNamespace <SERVICE_BUS_NAMESPACE>.servicebus.windows.net Durch diese Einstellung werden bei der Verbindungsherstellung zwischen Ihrer Funktions-App und Service Bus identitätsbasierte Verbindungen anstelle von Geheimnissen verwendet.
  4. Klicken Sie nach der Erstellung der zwei Einstellungen auf Speichern>Bestätigen.

Hinweis

Wenn Sie Azure App Configuration oder Key Vault verwenden, um Einstellungen für Verbindungen mit verwalteter Identität bereitzustellen, sollten die Namen der Einstellungen ein gültiges Schlüsseltrennzeichen wie : oder / anstelle von __ verwenden, um sicherzustellen, dass die Namen richtig aufgelöst werden.

Beispiel: ServiceBusConnection:fullyQualifiedNamespace.

Nachdem Sie die Funktions-App auf die Verbindung mit dem Service Bus-Namespace unter Verwendung einer verwalteten Identität vorbereitet haben, können Sie Ihrem lokalen Projekt eine neue Funktion hinzufügen, die einen Service Bus-Trigger verwendet.

Hinzufügen einer über Service Bus ausgelösten Funktion

  1. Führen Sie den Befehl func init wie folgt aus, um in einem Ordner mit dem Namen LocalFunctionProj ein Funktionsprojekt mit der angegebenen Runtime zu erstellen:

    func init LocalFunctionProj --dotnet
    
  2. Navigieren Sie zum Projektordner:

    cd LocalFunctionProj
    
  3. Führen Sie im Stammprojektordner die folgenden Befehle aus:

    dotnet add package Microsoft.Azure.WebJobs.Extensions.ServiceBus --version 5.2.0
    

    Dadurch wird die Standardversion des Service Bus-Erweiterungspakets durch eine Version ersetzt, die verwaltete Identitäten unterstützt.

  4. Führen Sie den folgenden Befehl aus, um dem Projekt eine über Service Bus ausgelöste Funktion hinzuzufügen:

    func new --name ServiceBusTrigger --template ServiceBusQueueTrigger 
    

    Der Befehl fügt Code für einen neuen Service Bus-Trigger und einen Verweis auf das Erweiterungspaket hinzu. Sie müssen eine Service Bus-Namespace-Verbindungseinstellung für diesen Trigger hinzufügen.

  5. Öffnen Sie die neue Projektdatei „ServiceBusTrigger.cs“, und ersetzen Sie die ServiceBusTrigger-Klasse durch den folgenden Code:

    public static class ServiceBusTrigger
    {
        [FunctionName("ServiceBusTrigger")]
        public static void Run([ServiceBusTrigger("myinputqueue", 
            Connection = "ServiceBusConnection")]string myQueueItem, ILogger log)
        {
            log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
        }
    }
    

    In diesem Codebeispiel wird der Warteschlangenname in myinputqueue geändert – den Namen der zuvor erstellten Warteschlange. Außerdem wird der Name der Service Bus-Verbindung auf ServiceBusConnection festgelegt. Dies ist der Service Bus-Namespace, der von der identitätsbasierten Verbindung ServiceBusConnection__fullyQualifiedNamespace verwendet wird, die Sie im Portal konfiguriert haben.

Hinweis

Wenn Sie jetzt versuchen, Ihre Funktionen mit func start auszuführen, erhalten Sie einen Fehler. Dies liegt daran, dass Sie lokal noch keine identitätsbasierte Verbindung definiert haben. Wenn Sie Ihre Funktion lokal ausführen möchten, legen Sie die App-Einstellung ServiceBusConnection__fullyQualifiedNamespace in local.settings.json so wie im vorherigen Abschnitt fest. Darüber hinaus müssen Sie die Rolle Ihrer Entwickleridentität zuweisen. Weitere Informationen finden Sie in der Dokumentation zur lokalen Entwicklung mit identitätsbasierten Verbindungen.

Hinweis

Wenn Sie Azure App Configuration oder Key Vault verwenden, um Einstellungen für Verbindungen mit verwalteter Identität bereitzustellen, sollten die Namen der Einstellungen ein gültiges Schlüsseltrennzeichen wie : oder / anstelle von __ verwenden, um sicherzustellen, dass die Namen richtig aufgelöst werden.

Beispiel: ServiceBusConnection:fullyQualifiedNamespace.

Veröffentlichen Sie das aktualisierte Projekt.

  1. Führen Sie den folgenden Befehl aus, um die für das Bereitstellungspaket benötigten Dateien lokal zu generieren:

    dotnet publish --configuration Release
    
  2. Navigieren Sie zum Unterordner \bin\Release\netcoreapp3.1\publish, und erstellen Sie eine ZIP-Datei aus ihrem Inhalt.

  3. Veröffentlichen Sie ZIP-Datei, indem Sie den folgenden Befehl ausführen und dabei die Parameter FUNCTION_APP_NAME, RESOURCE_GROUP_NAME und PATH_TO_ZIP entsprechend ersetzen:

    az functionapp deploy -n FUNCTION_APP_NAME -g RESOURCE_GROUP_NAME --src-path PATH_TO_ZIP
    

Nachdem Sie nun die Funktions-App mit dem neuen Trigger aktualisiert haben, können Sie überprüfen, ob sie mit der Identität funktioniert.

Validieren Ihrer Änderungen

  1. Suchen Sie im Portal nach Application Insights, und wählen Sie unter Dienste die Option Application Insights aus.

  2. Suchen Sie in Application Insights nach Ihrer benannten Instanz.

  3. Klicken Sie in Ihrer Instanz unterhalb von Untersuchen auf Livemetriken.

  4. Lassen Sie die vorherige Registerkarte geöffnet, und öffnen Sie das Azure-Portal auf einer neuen Registerkarte. Navigieren Sie auf der neuen Registerkarte zu Ihrem Service Bus-Namespace, und wählen Sie im linken Blatt Warteschlangen aus.

  5. Wählen Sie Ihre Warteschlange namens myinputqueue aus.

  6. Wählen Sie im linken Blatt Service Bus Explorer aus.

  7. Senden sie eine Testnachricht.

  8. Wählen Sie die geöffnete Registerkarte Livemetriken aus, und verfolgen Sie die Ausführung der Service Bus-Warteschlange.

Glückwunsch! Sie haben Ihren Service Bus-Warteschlangentrigger erfolgreich mit einer verwalteten Identität eingerichtet!

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, können Sie sie löschen, indem Sie die Ressourcengruppe löschen.

Wählen Sie im Azure-Portalmenü oder auf der Startseite die Option Ressourcengruppen aus. Wählen Sie auf der Seite Ressourcengruppen die Option myResourceGroup aus.

Stellen Sie auf der Seite myResourceGroup sicher, dass die Ressourcen aufgelistet sind, die Sie löschen möchten.

Wählen Sie die Option Löschen aus, geben Sie zur Bestätigung im Textfeld myResourceGroup ein, und wählen Sie anschließend Löschen aus.

Nächste Schritte

In diesem Tutorial haben Sie eine Funktions-App mit identitätsbasierten Verbindungen erstellt.

Verwenden Sie die folgenden Links, um mehr über Azure Functions mit identitätsbasierten Verbindungen zu erfahren: