Freigeben über


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

Hinweis

Die Pläne Basic, Standard und Enterprise gelten ab Mitte März 2025 als veraltet und werden über einen Zeitraum von drei (3) Jahren eingestellt. Es wird empfohlen, auf Azure Container Apps umzustellen. Weitere Informationen finden Sie in der Ankündigung zur Einstellung von Azure Spring Apps.

Der Plan Standardverbrauch und dediziert gilt ab dem 30. September 2024 als veraltet und wird nach sechs Monaten vollständig eingestellt. Es wird empfohlen, auf Azure Container Apps umzustellen. Weitere Informationen finden Sie unter Migrieren des Plans „Standardverbrauch und dediziert“ von Azure Spring Apps zu Azure Container Apps.

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.
  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).
  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 des Microsoft Azure-Portals mit der Authentifizierungsseite einer Funktions-App. Der Name der Funktions-App im Identitätsanbieter ist hervorgehoben.

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 des Microsoft Azure-Portals mit der Seite „Eine API verfügbar machen“ für eine Funktions-App. Der Anwendungs-ID-URI ist hervorgehoben.

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 Sichere HTTP-Endpunkte unter Sichern von 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