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 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
- Ein Azure-Abonnement. Wenn Sie kein Abonnement besitzen, erstellen Sie ein kostenloses Konto, bevor Sie beginnen.
- Azure CLI (ab Version 2.45.0)
- Git.
- Apache Maven Version 3.0 oder höher.
- Installation von Azure Functions Core Tools Version 4.x.
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.
- Navigieren Sie im Azure-Portal zu Ihrer Ressourcengruppe und öffnen Sie dann die von Ihnen erstellte Funktions-App.
- Wählen Sie im Navigationsbereich Authentifizierung und dann Identitätsanbieter hinzufügen im Hauptbereich aus.
- Wählen Sie auf der Seite Identitätsanbieter hinzufügen im Dropdownmenü Identitätsanbieter die Option Microsoft aus.
- Klicken Sie auf Hinzufügen.
- 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.
- 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).
- 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.
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.
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 anonymous
function.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.
Verwenden Sie den folgenden Befehl, um das Beispielprojekt zu klonen:
git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
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
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>
Verwenden Sie den folgenden Befehl, um Ihre Beispiel-App zu packen:
mvn clean package
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
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.