Tutorial: Verwenden identitätsbasierter Verbindungen anstelle von Geheimnissen bei Triggern und Bindungen
In diesem Tutorial erfahren Sie, wie Sie Azure Functions so konfigurieren, dass mithilfe verwalteter Identitäten eine Verbindung mit Azure Service Bus-Warteschlangen herstellt wird, anstatt in den Einstellungen für die Funktions-App gespeicherte Geheimnisse zu verwenden. 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 Prozeduren 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 gewährt
- Erstellen und Bereitstellen einer Funktions-App mit einem Service Bus-Trigger
- Bestätigen Ihrer identitätsbasierten Verbindung bei der Service Bus-Instanz
Voraussetzungen
Beenden Sie die vorherige Anleitung: Erstellen Sie eine Funktions-App mit identitätsbasierten Verbindungen.
Erstellen eines Service Bus-Namespace und einer Service Bus-Warteschlange
Klicken Sie im Azure-Portal auf Ressource erstellen (+) .
Suchen Sie auf der Seite Ressource erstellen nach Service Bus, und wählen Sie anschließend Erstellen aus.
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. Klicken Sie auf Überprüfen + erstellen. Wählen Sie Erstellen aus, wenn die Validierung erfolgreich war.
Klicken Sie nach Abschluss der Bereitstellung auf Zu Ressource wechseln.
Wählen Sie in Ihrem neuen Service Bus-Namespace + Warteschlange aus, um eine Warteschlange hinzuzufügen.
Geben Sie myinputqueue als Namen der neuen Warteschlange ein, und wählen Sie Erstellen aus.
Nachdem Sie nun über eine Warteschlange verfügen, können 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 in Ihrer Funktions-App der verwalteten Identität die Rollenzuweisung Azure Service Bus-Datenempfänger hinzufügen. Diese Rolle ist bei der Verwendung verwalteter Identitäten für die Auslösung von Ihrem Service Bus-Namespace erforderlich. Sie können dieser Rolle ebenfalls Ihr eigenes Konto hinzufügen, wodurch Sie bei lokalen Tests eine Verbindung mit dem Service Bus-Namespace herstellen 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 bestimmten Rollenanforderungen finden Sie in der Dokumentation zu Triggern und Bindungen für den Dienst.
Wählen Sie in Ihrem Service Bus-Namespace Zugriffssteuerung (IAM) aus. Auf dieser Seite können Sie anzeigen und konfigurieren, wer Zugriff auf die Ressource hat.
Wählen Sie + Hinzufügen und anschließend Rollenzuweisung hinzufügen aus.
Suchen Sie nach der Rolle Azure Service Bus-Datenempfänger, und wählen Sie diese anschließend aus. Wählen Sie daraufhin Weiter aus.
Wählen Sie auf der Registerkarte Mitglieder unter Zugriff zuweisen zu die Option Verwaltete Identität aus.
Wählen Sie Mitglieder auswählen aus, um das Panel Verwaltete Identitäten auswählen zu öffnen.
Vergewissern Sie sich, dass unter Abonnement das Abonnement aufgeführt ist, in dem Sie zuvor die Ressource erstellt haben.
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 der Apps im Abonnement mit systemseitig zugewiesenen Identitäten angibt.
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.
Wählen Sie Ihre Anwendung aus. Sie sollte nach unten in den Abschnitt Ausgewählte Mitglieder verschoben werden. Wählen Sie Auswählen.
Kehren Sie zum Bildschirm Rollenzuweisung hinzufügen zurück, und wählen Sie Überprüfen + zuweisen aus. Überprüfen Sie die Konfiguration, und wählen Sie anschließend Überprüfen + zuweisen aus.
Sie haben Ihrer Funktions-App mithilfe verwalteter Identitäten Zugriff auf den Service Bus-Namespace gewährt.
Herstellen einer Verbindung mit der Service Bus-Instanz in Ihrer Funktions-App
Suchen Sie im Portal nach der Funktions-App, die Sie im vorheriges Tutorial erstellt haben, oder suchen Sie sie auf der Seite Funktions-App.
Erweitern Sie in Ihrer Funktions-App Einstellungen, und wählen Sie dann Umgebungsvariablen aus.
Wählen Sie auf der Registerkarte App-Einstellungen + Hinzufügen aus, um eine Einstellung zu erstellen. Verwenden Sie die Informationen in der folgenden Tabelle, um Name und Wert für die neue Einstellung einzugeben:
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. Wählen Sie Anwenden aus, und wählen Sie anschließend Anwenden und Bestätigen aus, um Ihre Änderungen zu speichern und die App-Funktion neu zu starten.
Hinweis
Wenn Sie Azure App Configuration oder Key Vault verwenden, um Einstellungen für Verbindungen mit verwalteten Identitäten bereitzustellen, sollten Sie für die Einstellungsnamen ein gültiges Schlüsseltrennzeichen wie :
oder /
anstelle von __
verwenden, damit die Namen ordnungsgemäß aufgelöst werden.
Beispiel: ServiceBusConnection:fullyQualifiedNamespace
.
Nachdem Sie die Funktions-App mithilfe einer verwalteten Identität für die Verbindung mit dem Service Bus-Namespace 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
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
Navigieren Sie zum Projektordner:
cd LocalFunctionProj
Führen Sie im Stammordner des Projekts die folgenden Befehle aus:
dotnet add package Microsoft.Azure.WebJobs.Extensions.ServiceBus --version 5.2.0
Durch diesen Befehl wird die Standardversion des Service Bus-Erweiterungspakets durch eine Version ersetzt, die verwaltete Identitäten unterstützt.
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
Dieser Befehl fügt den Code für einen neuen Service Bus-Trigger und einen Verweis auf das Erweiterungspaket hinzu. Sie müssen für diesen Trigger eine Verbindungseinstellung für den Service Bus-Namespace hinzufügen.
Ö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 aufServiceBusConnection
festgelegt. Bei diesem Namen handelt es sich um den Service Bus-Namespace, der von der identitätsbasierten VerbindungServiceBusConnection__fullyQualifiedNamespace
verwendet wird, die Sie im Portal konfiguriert haben.
Hinweis
Wenn Sie nun versuchen, Ihre Funktionen mithilfe von func start
auszuführen, wird eine Fehlermeldung angezeigt. Dies liegt daran, dass Sie lokal noch keine identitätsbasierte Verbindung definiert haben. Legen Sie in der Datei local.settings.json
die App-Einstellung ServiceBusConnection__fullyQualifiedNamespace
wie im [vorherigen Abschnitt](#connect-to-the service-bus-in-your-function-app) fest, wenn Sie Ihre Funktion lokal ausführen möchten. Darüber hinaus müssen Sie Ihrer Entwickleridentität die Rolle zuweisen. Weitere Informationen finden Sie unter Lokale 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.
Führen Sie den folgenden Befehl aus, um die für das Bereitstellungspaket benötigten Dateien lokal zu generieren:
dotnet publish --configuration Release
Navigieren Sie zum Unterordner
\bin\Release\netcoreapp3.1\publish
, und erstellen Sie eine ZIP-Datei aus ihrem Inhalt.Veröffentlichen Sie ZIP-Datei, indem Sie den folgenden Befehl ausführen und dabei die Parameter
FUNCTION_APP_NAME
,RESOURCE_GROUP_NAME
undPATH_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 mithilfe der Identität überprüfen, ob dieser funktioniert.
Validieren Ihrer Änderungen
Suchen Sie im Portal nach
Application Insights
, und wählen Sie unter Dienste die Option Application Insights aus.Suchen Sie in Application Insights nach Ihrer benannten Instanz.
Klicken Sie in Ihrer Instanz unterhalb von Untersuchen auf Livemetriken.
Lassen Sie die vorherige Registerkarte geöffnet, und öffnen Sie das Azure-Portal auf einer neuen Registerkarte. Navigieren Sie auf der neuen Registerkarte zum Service Bus-Namespace, und wählen Sie im linken Menü Warteschlangen aus.
Wählen Sie Ihre Warteschlange namens
myinputqueue
aus.Wählen Sie im Menü auf der linken Seite Service Bus Explorer aus.
Senden sie eine Testnachricht.
Wählen Sie die geöffnete Registerkarte Livemetriken aus, und verfolgen Sie die Ausführung der Service Bus-Warteschlange.
Herzlichen Glückwunsch! Sie haben den Trigger für Ihre Service Bus-Warteschlange 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.
Fahren Sie mit dem nächsten Artikel fort, um zu erfahren, wie Sie Identitäten verwalten.