Zelfstudie: Een beheerde identiteit gebruiken om Azure Functions aan te roepen vanuit een Azure Spring Apps-app
Notitie
Azure Spring Apps is de nieuwe naam voor de Azure Spring Cloud-service. Hoewel de service een nieuwe naam heeft, ziet u de oude naam op sommige plaatsen terwijl we werken aan het bijwerken van assets, zoals schermopnamen, video's en diagrammen.
Dit artikel is van toepassing op: ✔️ Basic/Standard ✔️ Enterprise
In dit artikel leest u hoe u een beheerde identiteit maakt voor een app die wordt gehost in Azure Spring Apps en hoe u deze gebruikt om door HTTP geactiveerde functies aan te roepen.
Zowel Azure Functions als App Services hebben ingebouwde ondersteuning voor Microsoft Entra-verificatie. Door deze ingebouwde verificatiemogelijkheid te gebruiken, samen met Beheerde identiteiten voor Azure Spring Apps, kunt u RESTful-services aanroepen met behulp van moderne OAuth-semantiek. Deze methode vereist geen opslag van geheimen in code en biedt u meer gedetailleerde besturingselementen voor het beheren van de toegang tot externe bronnen.
Vereisten
- Een Azure-abonnement. Als u geen abonnement hebt, maakt u een gratis account voordat u begint.
- Azure CLI versie 2.45.0 of hoger.
- Git.
- Apache Maven versie 3.0 of hoger.
- Installeer de Azure Functions Core Tools versie 4.x.
Een brongroep maken
Een resourcegroep is een logische container waarin Azure-resources worden geïmplementeerd en beheerd. Gebruik de volgende opdracht om een resourcegroep te maken die een functie-app bevat:
az group create --name <resource-group-name> --location <location>
Zie de opdracht az group create voor meer informatie.
Een functie-app maken
Als u een functie-app wilt maken, moet u eerst een back-upopslagaccount maken. U kunt de opdracht az storage account create gebruiken.
Belangrijk
Elke functie-app en elk opslagaccount moeten een unieke naam hebben.
Gebruik de volgende opdracht om het opslagaccount te maken. Vervang <de functie-app-naam> door de naam van uw functie-app en< de naam> van uw opslagaccount door de naam van uw opslagaccount.
az storage account create \
--resource-group <resource-group-name> \
--name <storage-account-name> \
--location <location> \
--sku Standard_LRS
Nadat het opslagaccount is gemaakt, gebruikt u de volgende opdracht om de functie-app te maken:
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
Noteer de geretourneerde hostNames
waarde, die de notatie heeft https://<your-functionapp-name>.azurewebsites.net
. Gebruik deze waarde in de hoofd-URL van de functie-app om de functie-app te testen.
Microsoft Entra-verificatie inschakelen
Gebruik de volgende stappen om Microsoft Entra-verificatie in te schakelen voor toegang tot uw functie-app.
Navigeer in Azure Portal naar uw resourcegroep en open vervolgens de functie-app die u hebt gemaakt.
Selecteer Verificatie in het navigatiedeelvenster en selecteer vervolgens Id-provider toevoegen in het hoofdvenster.
Selecteer Op de pagina Een id-provider toevoegen Microsoft in de vervolgkeuzelijst Id-provider.
Selecteer Toevoegen.
Voor de basisinstellingen op de pagina Een id-provider toevoegen stelt u Ondersteunde accounttypen in op Elke Microsoft Entra-map - Meerdere tenants.
Niet-geverifieerde aanvragen instellen op HTTP 401 Niet geautoriseerd: aanbevolen voor API's. Deze instelling zorgt ervoor dat alle niet-geverifieerde aanvragen worden geweigerd (401-antwoord).
Selecteer Toevoegen.
Nadat u de instellingen hebt toegevoegd, wordt de functie-app opnieuw opgestart en worden alle volgende aanvragen gevraagd zich aan te melden via Microsoft Entra-id. U kunt testen of niet-geverifieerde aanvragen momenteel worden geweigerd met de hoofd-URL van de functie-app (geretourneerd in de hostNames
uitvoer van de az functionapp create
opdracht). Vervolgens wordt u omgeleid naar het Microsoft Entra-aanmeldingsscherm van uw organisatie.
U hebt de toepassings-id en de URI voor de toepassings-id nodig voor later gebruik. Navigeer in Azure Portal naar de functie-app die u hebt gemaakt.
Als u de toepassings-id wilt ophalen, selecteert u Verificatie in het navigatiedeelvenster en kopieert u vervolgens de app-id-waarde (client) voor de id-provider die de naam van de functie-app bevat.
Als u de URI voor de toepassings-id wilt ophalen, selecteert u Een API beschikbaar maken in het navigatiedeelvenster en kopieert u de waarde van de URI van de toepassings-id.
Een door HTTP geactiveerde functie maken
Gebruik in een lege lokale map de volgende opdrachten om een nieuwe functie-app te maken en een door HTTP geactiveerde functie toe te voegen:
func init --worker-runtime node
func new --template HttpTrigger --name HttpTrigger
Standaard gebruiken functies verificatie op basis van sleutels om HTTP-eindpunten te beveiligen. Als u Microsoft Entra-verificatie wilt inschakelen om de toegang tot de functies te beveiligen, stelt u de authLevel
sleutel anonymous
in op het function.json-bestand , zoals wordt weergegeven in het volgende voorbeeld:
{
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
...
}
]
}
Zie het gedeelte Een HTTP-eindpunt beveiligen in de productiesectie van De HTTP-trigger van Azure Functions voor meer informatie.
Gebruik de volgende opdracht om de app te publiceren naar het exemplaar dat in de vorige stap is gemaakt:
func azure functionapp publish <function-app-name>
In de uitvoer van de publicatieopdracht moet de URL naar de zojuist gemaakte functie worden weergegeven, zoals wordt weergegeven in de volgende uitvoer:
Deployment completed successfully.
Syncing triggers...
Functions in <your-functionapp-name>:
HttpTrigger - [httpTrigger]
Invoke url: https://<function-app-name>.azurewebsites.net/api/httptrigger
Een Azure Spring Apps-service-exemplaar en -toepassing maken
Gebruik de volgende opdrachten om de spring-extensie toe te voegen en een nieuw exemplaar van Azure Spring Apps te maken:
az extension add --upgrade --name spring
az spring create \
--resource-group <resource-group-name> \
--name <Azure-Spring-Apps-instance-name> \
--location <location>
Gebruik de volgende opdracht om een toepassing met de naam msiapp
te maken met een door het systeem toegewezen beheerde identiteit, zoals aangevraagd door de --assign-identity
parameter:
az spring app create \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name "msiapp" \
--assign-endpoint true \
--assign-identity
Een Spring Boot-voorbeeld-app bouwen om de functie aan te roepen
In dit voorbeeld wordt de door HTTP geactiveerde functie aangeroepen door eerst een toegangstoken aan te vragen vanaf het MSI-eindpunt en dat token te gebruiken om de HTTP-aanvraag van de functie te verifiëren. Zie de sectie Een token ophalen met behulp van HTTP van beheerde identiteiten voor Azure-resources op een Azure-VM voor meer informatie om een toegangstoken te verkrijgen.
Gebruik de volgende opdracht om het voorbeeldproject te klonen:
git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
Gebruik de volgende opdracht om uw functie-URI en de triggernaam in uw app-eigenschappen op te geven:
cd azure-spring-apps-samples/managed-identity-function vim src/main/resources/application.properties
Als u beheerde identiteit wilt gebruiken voor Azure Spring Apps-apps, voegt u de volgende eigenschappen met deze waarden toe aan src/main/resources/application.properties.
azure.function.uri=https://<function-app-name>.azurewebsites.net azure.function.triggerPath=httptrigger azure.function.application-id.uri=<function-app-application-ID-uri>
Gebruik de volgende opdracht om uw voorbeeld-app te verpakken:
mvn clean package
Gebruik de volgende opdracht om de app te implementeren in Azure Spring Apps:
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
Gebruik de volgende opdracht om toegang te krijgen tot het openbare eindpunt of testeindpunt om uw app te testen:
curl https://<Azure-Spring-Apps-instance-name>-msiapp.azuremicroservices.io/func/springcloud
Het volgende bericht wordt geretourneerd in de hoofdtekst van het antwoord.
Function Response: Hello, springcloud. This HTTP triggered function executed successfully.
Volgende stappen
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor