Share via


Tutorial: Verwenden einer verwalteten Identität zum Aufrufen von Azure Functions über eine Azure Spring Apps-App

Hinweis

Azure Spring Apps ist der neue Name für den Azure Spring Cloud-Dienst. Obwohl der Dienst umbenannt wurde, wird der alte Name noch an einigen Stellen verwendet, solange wir Ressourcen wie Screenshots, Videos und Diagramme aktualisieren.

Dieser Artikel gilt für: ✔️ Basic/Standard ✔️ Enterprise

In diesem Artikel erfahren Sie, wie Sie eine verwaltete Identität für eine in Azure Spring Apps gehostete App erstellen und damit über HTTP ausgelöste Funktionen aufrufen.

Sowohl Azure Functions als auch App Services haben integrierte Unterstützung für die Microsoft Entra-Authentifizierung. Die Verwendung dieser integrierten Authentifizierungsfunktion in Kombination mit verwalteten Identitäten für Azure Spring Apps ermöglicht das Aufrufen von RESTful-Diensten mit moderner OAuth-Semantik. Diese Methode erfordert keine Speicherung von Geheimnissen im Code und ermöglicht eine präzisere Steuerung des Zugriffs auf externe Ressourcen.

Voraussetzungen

Erstellen einer Ressourcengruppe

Eine Ressourcengruppe ist ein logischer Container, in dem Azure-Ressourcen bereitgestellt und verwaltet werden. Verwenden Sie den folgenden Befehl, um eine Ressourcengruppe zu erstellen, die eine Funktions-App enthält:

az group create --name <resource-group-name> --location <location>

Weitere Informationen finden Sie im Befehl az group create .

Erstellen einer Funktions-App

Um eine Funktions-App erstellen zu können, müssen Sie zunächst ein unterstützendes Speicherkonto erstellen. Verwenden Sie dazu den Befehl az storage account create.

Wichtig

Jede Funktions-App und jedes Speicherkonto muss über einen eindeutigen Namen verfügen.

Verwenden Sie den folgenden Befehl, um ein Speicherkonto zu erstellen. Ersetzen Sie <function-app-name> durch den Namen Ihrer Funktions-App und <storage-account-name> durch den Namen Ihres Speicherkontos.

az storage account create \
    --resource-group <resource-group-name> \
    --name <storage-account-name> \
    --location <location> \
    --sku Standard_LRS

Nachdem das Speicherkonto erstellt wurde, verwenden Sie den folgenden Befehl, um die Funktions-App zu erstellen:

az functionapp create \
    --resource-group <resource-group-name> \
    --name <function-app-name> \
    --consumption-plan-location <location> \
    --os-type windows \
    --runtime node \
    --storage-account <storage-account-name> \
    --functions-version 4

Notieren Sie sich die zurückgegebenen hostNames-Wert. Er hat das Format https://<your-functionapp-name>.azurewebsites.net. Verwenden Sie diesen Wert in der Stamm-URL der Funktions-App, um die Funktions-App zu testen.

Microsoft Entra-Authentifizierung aktivieren

Führen Sie die folgenden Schritte aus, um die Microsoft Entra-Authentifizierung für den Zugriff auf Ihre Funktions-App zu aktivieren.

  1. Navigieren Sie im Azure-Portal zu Ihrer Ressourcengruppe und öffnen Sie dann die von Ihnen erstellte Funktions-App.

  2. Wählen Sie im Navigationsbereich Authentifizierung und dann Identitätsanbieter hinzufügen im Hauptbereich aus.

  3. Wählen Sie auf der Seite Identitätsanbieter hinzufügen im Dropdownmenü Identitätsanbieter die Option Microsoft aus.

    Screenshot of the Azure portal showing the Add an identity provider page with Microsoft highlighted in the identity provider dropdown menu.

  4. Klicken Sie auf Hinzufügen.

  5. Legen Sie für die Einstellungen Grundlagen auf der Seite Identitätsanbieter hinzufügen die Option Unterstützte Kontotypen auf Beliebiges Microsoft Entra-Verzeichnis – Mehrinstanzenfähig fest.

  6. Legen Sie Nicht authentifizierte Anforderungen auf HTTP 401 Nicht autorisiert: empfohlen für APIs fest. Diese Einstellung sorgt dafür, dass alle nicht authentifizierten Anforderungen abgelehnt werden (401-Antwort).

    Screenshot of the Azure portal showing the Add an identity provider page with Support account types and Unauthenticated requests highlighted.

  7. Klicken Sie auf Hinzufügen.

Nachdem Sie die Einstellungen hinzugefügt haben, wird die Funktions-App neu gestartet, und bei allen nachfolgenden Anforderungen wird eine Anmeldung über Microsoft Entra ID angefordert. Sie können testen, dass nicht authentifizierte Anforderungen derzeit mit der Stamm-URL der Funktions-App abgelehnt werden (die in der hostNames-Ausgabe des Befehls az functionapp create zurückgegeben wird). Anschließend sollten Sie zum Microsoft Entra-Anmeldebildschirm Ihrer Organisation weitergeleitet werden.

Sie benötigen später noch die Anwendungs-ID und den Anwendungs-ID-URI. Navigieren Sie im Microsoft Azure-Portal zu der von Ihnen erstellten Funktions-App.

Um die Anwendungs-ID abzurufen, wählen Sie im Navigationsbereich Authentifizierung aus, und kopieren Sie dann den Wert App (Client) ID für den Identitätsanbieter, der den Namen der Funktions-App enthält.

Screenshot of the Azure portal showing the Authentication page for a Function app, with the Function app name highlighted in the Identity provider.

Um den Anwendungs-ID-URI abzurufen, wählen Sie im Navigationsbereich Eine API verfügbar machen aus, und kopieren Sie dann den Wert des Anwendungs-ID-URI.

Screenshot of the Azure portal showing the Expose an API page for a Function app with the Application ID URI highlighted.

Erstellen einer durch HTTP ausgelösten Funktion

Verwenden Sie in einem leeren lokalen Verzeichnis die folgenden Befehle, um eine neue Funktions-App zu erstellen und eine über HTTP ausgelöste Funktion hinzuzufügen:

func init --worker-runtime node
func new --template HttpTrigger --name HttpTrigger

Funktionen verwenden zum Schutz von HTTP-Endpunkten standardmäßig eine schlüsselbasierte Authentifizierung. Um die Microsoft Entra-Authentifizierung zum Sichern des Zugriffs auf die Funktionen zu aktivieren, legen Sie den authLevel-Schlüssel in der Datei anonymousfunction.json auf fest, wie im folgenden Beispiel gezeigt:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      ...
    }
  ]
}

Weitere Informationen finden Sie im Abschnitt Schützen eines HTTP-Endpunkts in einer Produktionsumgebung von HTTP-Trigger in Azure Functions.

Verwenden Sie den folgenden Befehl, um die App in der im vorherigen Schritt erstellten Instanz zu veröffentlichen:

func azure functionapp publish <function-app-name>

Die Ausgabe des Veröffentlichungsbefehls sollte die URL Ihrer neu erstellten Funktion enthalten, wie in der folgenden Ausgabe gezeigt:

Deployment completed successfully.
Syncing triggers...
Functions in <your-functionapp-name>:
    HttpTrigger - [httpTrigger]
        Invoke url: https://<function-app-name>.azurewebsites.net/api/httptrigger

Erstellen einer Azure Spring Apps-Dienstinstanz und einer App

Verwenden Sie die folgenden Befehle, um die Spring-Erweiterung hinzuzufügen und eine neue Instanz von Azure Spring Apps zu erstellen:

az extension add --upgrade --name spring
az spring create \
    --resource-group <resource-group-name> \
    --name <Azure-Spring-Apps-instance-name> \
    --location <location>

Im folgenden Beispiel wird eine App namens msiapp mit einer systemseitig zugewiesenen verwalteten Identität erstellt, wie vom Parameter --assign-identity angefordert:

az spring app create \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name "msiapp" \
    --assign-endpoint true \
    --assign-identity

Erstellen einer Spring Boot-Beispiel-App zum Aufrufen der Funktion

In diesem Beispiel wird die über HTTP ausgelöste Funktion aufgerufen. Hierzu wird zunächst ein Zugriffstoken vom MSI-Endpunkt angefordert und dieses Token dann zum Authentifizieren der HTTP-Anforderung der Funktion verwendet. Weitere Informationen finden Sie im Abschnitt Abrufen eines Tokens über HTTP unter Verwenden von verwalteten Identitäten für Azure-Ressourcen auf einem virtuellen Azure-Computer zum Abrufen eines Zugriffstokens.

  1. Verwenden Sie den folgenden Befehl, um das Beispielprojekt zu klonen:

    git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
    
  2. Verwenden Sie den folgenden Befehl, um Ihren Funktions-URI und den Triggernamen in Ihren App-Eigenschaften anzugeben:

    cd azure-spring-apps-samples/managed-identity-function
    vim src/main/resources/application.properties
    
  3. Um die verwaltete Identität für Azure Spring Apps-Apps zu verwenden, fügen Sie die folgenden Eigenschaften mit diesen Werten zu src/main/resources/application.properties hinzu.

    azure.function.uri=https://<function-app-name>.azurewebsites.net
    azure.function.triggerPath=httptrigger
    azure.function.application-id.uri=<function-app-application-ID-uri>
    
  4. Verwenden Sie den folgenden Befehl, um Ihre Beispiel-App zu packen:

    mvn clean package
    
  5. Verwenden Sie den folgenden Befehl, um die App in Azure Spring Apps bereitzustellen:

    az spring app deploy \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-instance-name> \
        --name "msiapp" \
        --artifact-path target/asc-managed-identity-function-sample-0.1.0.jar
    
  6. Verwenden Sie den folgenden Befehl, um auf den öffentlichen Endpunkt oder Testendpunkt zuzugreifen und Ihre App zu testen:

    curl https://<Azure-Spring-Apps-instance-name>-msiapp.azuremicroservices.io/func/springcloud
    

    Die folgende Meldung wird im Antworttext zurückgegeben.

    Function Response: Hello, springcloud. This HTTP triggered function executed successfully.
    

Nächste Schritte