Schnellstart: Konfigurieren einer Durable Functions-App mit einer verwalteten Identität

Mit einer verwalteten Identität vom Zugriffsverwaltungsdienst Microsoft Entra ID kann Ihre App auf andere von Microsoft Entra geschützte Ressourcen, z. B. ein Azure Storage-Konto, zugreifen, ohne geheime Schlüssel manuell verarbeiten zu müssen. Die Identität wird von der Azure-Plattform verwaltet, sodass Sie keine Geheimnisse bereitstellen oder rotieren müssen. Die empfohlene Methode zum Authentifizieren des Zugriffs auf Azure-Ressourcen ist die Verwendung einer solchen Identität.

In dieser Schnellstartanleitung führen Sie die Schritte zum Konfigurieren einer Durable Functions-App mithilfe des standardmäßigen Azure Storage-Anbieters aus, um identitätsbasierte Verbindungen für den Zugriff auf Speicherkonten zu verwenden.

Hinweis

Verwaltete Identitäten werden in der Durable Functions Erweiterung ab Version 2.7.0 unterstützt.

Sollten Sie kein Azure-Konto haben, erstellen Sie zunächst ein kostenloses Konto.

Voraussetzungen

Für die Durchführung dieses Schnellstarts benötigen Sie Folgendes:

  • Ein bestehendes Durable Functions-Projekt, das im Azure-Portal erstellt wurde, oder ein lokales Durable Functions-Projekt, das in Azure bereitgestellt wurde.
  • Kenntnisse beim Ausführen einer Durable Functions-App in Azure.

Wenn Sie kein vorhandenes Durable Functions-Projekt in Azure bereitgestellt haben, empfehlen wir, mit einer der folgenden Schnellstarts zu beginnen:

Lokale Entwicklung

Verwenden des Azure Storage-Emulators

Bei der lokalen Entwicklung wird empfohlen, Azurite zu verwenden, was der lokale Emulator von Azure Storage ist. Konfigurieren Sie Ihre App für den Emulator, indem Sie "AzureWebJobsStorage": "UseDevelopmentStorage = true" in der Datei „local.settings.json“ angeben.

Identitätsbasierte Verbindungen für die lokal Entwicklung

Genau genommen ist eine verwaltete Identität nur für Apps verfügbar, wenn diese in Azure ausgeführt werden. Sie können jedoch weiterhin eine lokal ausgeführte App für die Verwendung einer identitätsbasierten Verbindung konfigurieren, indem Sie Ihre Anmeldeinformationen für die Fachkraft in der Entwicklung verwenden, um sich bei Azure-Ressourcen zu authentifizieren. Nach der Bereitstellung in Azure verwendet die App stattdessen Ihre Konfiguration der verwalteten Identität.

Bei Verwendung der Anmeldeinformationen für die Fachkraft in der Entwicklung versucht die Verbindung, ein Token von den folgenden Speicherorten in der angegebenen Reihenfolge für den Zugriff auf Ihre Azure-Ressourcen abzurufen:

  • Lokaler Cache, der von Microsoft-Anwendungen gemeinsam genutzt wird
  • Aktueller Benutzerkontext in Visual Studio
  • Aktueller Benutzerkontext in Visual Studio Code
  • Aktueller Benutzerkontext in der Azure CLI

Wenn keine dieser Optionen erfolgreich ist, wird ein Fehler angezeigt, der besagt, dass die App kein Authentifizierungstoken für Ihre Azure-Ressourcen abrufen kann.

Konfigurieren der Laufzeit für die Verwendung der lokalen Identität der Fachkraft in der Entwicklung

  1. Geben Sie den Namen Ihres Azure Storage-Kontos in der Datei „local.settings.json“ an, z. B.:

    {
       "IsEncrypted": false,
       "Values": {
          "AzureWebJobsStorage__accountName": "<<your Azure Storage account name>>",
          "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
       }
    }
    
  2. Wechseln Sie im Azure-Portal zur Azure Storage-Kontoressource, navigieren Sie zur Registerkarte Zugriffssteuerung (IAM), und klicken Sie auf Rollenzuweisung hinzufügen. Suchen Sie nach den folgenden Rollen:

    • Mitwirkender an Storage-Warteschlangendaten
    • Mitwirkender an Storage-Blobdaten
    • Mitwirkender an Storage-Tabellendaten

    Weisen Sie sich die Rollen selbst zu, indem Sie auf „+ Mitglieder auswählen“ klicken und Ihre E-Mail-Adresse im Popupfenster suchen. (Diese E-Mail-Adresse ist die E-Mail-Adresse, die Sie zum Anmelden bei Microsoft-Anwendungen, der Azure CLI oder Editoren in der Visual Studio-Familie verwenden.)

    Screenshot, der die Zugriffszuweisung für den Benutzer zeigt.

Identitätsbasierte Verbindungen für eine in Azure bereitgestellte App

Aktivieren der Ressource der verwalteten Identität

Aktivieren Sie zunächst eine verwaltete Identität für Ihre Anwendung. Ihre Funktions-App muss entweder über eine vom System zugewiesene verwaltete Identität oder eine von der benutzenden Person zugewiesene verwaltete Identität verfügen. Um eine verwaltete Identität für Ihre Funktions-App zu aktivieren und mehr über die Unterschiede zwischen den beiden Arten von Identitäten zu erfahren, lesen Sie die Übersicht über verwaltete Identitäten.

Zuweisen von Zugriffsrollen zur verwalteten Identität

Navigieren Sie im Azure-Portal zur Azure Storage-Ressource Ihrer App, und weisen Sie Ihrer Ressource der verwalteten Identität drei Rollen für die rollenbasierte Zugriffssteuerung (RBAC) zu:

  • Mitwirkender an Storage-Warteschlangendaten
  • Mitwirkender an Storage-Blobdaten
  • Mitwirkender an Storage-Tabellendaten

Um Ihre Identitätsressource zu finden, wählen Sie zunächst für „Zuweisen des Zugriffs auf“ die Option Verwaltete Identität und dann + Mitglieder auswählen aus

Screenshot, der die Zugriffszuweisung für die verwaltete Identität zeigt.

Hinzufügen der Konfiguration einer verwalteten Identität zu Ihrer App

Bevor Sie die verwaltete Identität Ihrer App verwenden können, müssen Sie einige Änderungen an den App-Einstellungen vornehmen:

  1. Wählen Sie im Azure-Portal im Menü Ihrer Funktions-App-Ressource unter Einstellungen die Option Umgebungsvariablen aus.

  2. Suchen Sie in der Liste der Einstellungen nach AzureWebJobsStorage, und wählen Sie das Symbol Löschen aus. Screenshot der Standardspeichereinstellung.

  3. Fügen Sie eine Einstellung hinzu, um Ihr Azure-Speicherkonto mit der Anwendung zu verknüpfen.

    Verwenden Sie je nach der Cloud, in der Ihre Anwendung läuft, eine der folgenden Methoden:

    • Azure-Cloud: Wenn Ihre App in der globalen Azure-Umgebung ausgeführt wird, fügen Sie die Einstellung AzureWebJobsStorage__accountName hinzu, die einen Azure-Speicherkontonamen identifiziert. Beispielwert: mystorageaccount123

    • Nicht-Azure-Cloud: Wenn Ihre Anwendung in einer Cloud außerhalb von Azure ausgeführt wird, müssen Sie die folgenden drei Einstellungen hinzufügen, um bestimmte Dienst-URIs (oder Endpunkte) des Speicherkontos anstelle eines Kontonamens hinzufügen.

      • Einstellungsname: AzureWebJobsStorage__blobServiceUri

        Beispielwert: https://mystorageaccount123.blob.core.windows.net/

      • Einstellungsname: AzureWebJobsStorage__queueServiceUri

        Beispielwert: https://mystorageaccount123.queue.core.windows.net/

      • Einstellungsname: AzureWebJobsStorage__tableServiceUri

        Beispielwert: https://mystorageaccount123.table.core.windows.net/

    Sie können die Werte für diese URI-Variablen in den Speicherkontoinformationen auf der Registerkarte Endpunkte abrufen.

    Screenshot des Endpunktbeispiels.

    Hinweis

    Wenn Sie Azure Government oder eine andere Cloud verwenden, die von der globalen Azure-Umgebung getrennt ist, müssen Sie die Option verwenden, die bestimmte Dienst-URIs anstelle des Speicherkontonamens bereitstellt. Weitere Informationen zur Verwendung von Azure Storage mit Azure Government finden Sie unter Entwickeln mithilfe der Speicher-API in Azure Government.

  4. Beenden Sie die Konfiguration der verwalteten Identität (denken Sie daran, nach den getätigten Einstellungsänderungen auf „Übernehmen“ zu klicken):

    • Wenn Sie eine vom System zugewiesene Identität verwenden, nehmen Sie keine anderen Änderungen vor.

    • Wenn Sie eine benutzerseitig zugewiesene Identität verwenden, fügen Sie Ihrer App-Konfiguration die folgenden Einstellungen hinzu:

      • AzureWebJobsStorage__credential, geben Sie managedidentity ein

      • AzureWebJobsStorage__clientId, rufen Sie diesen GUID-Wert aus Ihrer Ressource der verwalteten Identität ab

      Screenshot der Client-ID der Benutzeridentität.

    Hinweis

    Die Durable Functions-App unterstützt managedIdentityResourceId bei Verwendung einer benutzerseitig zugewiesenen Identität nicht. Verwenden Sie stattdessen clientId.