Självstudie: Använda en hanterad identitet för att anropa Azure Functions från en Azure Spring Apps-app
Kommentar
Basic-, Standard- och Enterprise-planerna kommer att vara inaktuella från och med mitten av mars 2025, med en 3-årig pensionsperiod. Vi rekommenderar att du övergår till Azure Container Apps. Mer information finns i meddelandet om azure Spring Apps-pensionering.
Standardförbrukningen och den dedikerade planen kommer att vara inaktuell från och med den 30 september 2024, med en fullständig avstängning efter sex månader. Vi rekommenderar att du övergår till Azure Container Apps. Mer information finns i Migrera Azure Spring Apps Standard-förbrukning och dedikerad plan till Azure Container Apps.
Den här artikeln gäller för: ✔️ Basic/Standard ✔️ Enterprise
Den här artikeln visar hur du skapar en hanterad identitet för en app som finns i Azure Spring Apps och använder den för att anropa HTTP-utlösta funktioner.
Både Azure Functions och App Services har inbyggt stöd för Microsoft Entra-autentisering. Genom att använda den här inbyggda autentiseringsfunktionen tillsammans med hanterade identiteter för Azure Spring Apps kan du anropa RESTful-tjänster med modern OAuth-semantik. Den här metoden kräver inte lagring av hemligheter i kod och ger mer detaljerade kontroller för att kontrollera åtkomsten till externa resurser.
Förutsättningar
- En Azure-prenumeration. Om du inte har någon prenumeration skapar du ett kostnadsfritt konto innan du börjar.
- Azure CLI version 2.45.0 eller senare.
- Git.
- Apache Maven version 3.0 eller senare.
- Installera Azure Functions Core Tools version 4.x.
Skapa en resursgrupp
En resursgrupp är en logisk container där Azure-resurser distribueras och hanteras. Använd följande kommando för att skapa en resursgrupp som ska innehålla en funktionsapp:
az group create --name <resource-group-name> --location <location>
Mer information finns i kommandot az group create .
Skapa en funktionsapp
Om du vill skapa en funktionsapp måste du först skapa ett lagringskonto för säkerhetskopiering. Du kan använda kommandot az storage account create .
Viktigt!
Varje funktionsapp och lagringskonto måste ha ett unikt namn.
Använd följande kommando för att skapa lagringskontot. Ersätt <function-app-name> med namnet på funktionsappen och <lagringskontonamnet> med namnet på ditt lagringskonto.
az storage account create \
--resource-group <resource-group-name> \
--name <storage-account-name> \
--location <location> \
--sku Standard_LRS
När lagringskontot har skapats använder du följande kommando för att skapa funktionsappen:
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
Anteckna det returnerade hostNames
värdet, som är i formatet https://<your-functionapp-name>.azurewebsites.net
. Använd det här värdet i funktionsappens rot-URL för att testa funktionsappen.
Aktivera Microsoft Entra-autentisering
Använd följande steg för att aktivera Microsoft Entra-autentisering för åtkomst till funktionsappen.
- I Azure Portal navigerar du till resursgruppen och öppnar sedan funktionsappen som du skapade.
- I navigeringsfönstret väljer du Autentisering och sedan Lägg till identitetsprovider i huvudfönstret.
- På sidan Lägg till en identitetsprovider väljer du Microsoft i listrutan Identitetsprovider .
- Markera Lägga till.
- För grundinställningarna på sidan Lägg till en identitetsprovider anger du Kontotyper som stöds till Alla Microsoft Entra-kataloger – flera klientorganisationer.
- Ange Icke-autentiserade begäranden till HTTP 401 Obehörig: rekommenderas för API:er. Den här inställningen säkerställer att alla oautentiserade begäranden nekas (401-svar).
- Markera Lägga till.
När du har lagt till inställningarna startas funktionsappen om och alla efterföljande begäranden uppmanas att logga in via Microsoft Entra-ID. Du kan testa att oautentiserade begäranden för närvarande avvisas med funktionsappens rot-URL (returneras i hostNames
kommandots az functionapp create
utdata). Du bör sedan omdirigeras till din organisations Microsoft Entra-inloggningsskärm.
Du behöver program-ID:t och program-ID-URI:n för senare användning. I Azure Portal navigerar du till funktionsappen som du skapade.
Hämta program-ID:t genom att välja Autentisering i navigeringsfönstret och sedan kopiera app-ID-värdet (klient)-värdet för identitetsprovidern som innehåller namnet på funktionsappen.
Om du vill hämta URI:n för program-ID väljer du Exponera ett API i navigeringsfönstret och kopierar sedan URI-värdet för program-ID.
Skapa en HTTP-utlöst funktion
I en tom lokal katalog använder du följande kommandon för att skapa en ny funktionsapp och lägga till en HTTP-utlöst funktion:
func init --worker-runtime node
func new --template HttpTrigger --name HttpTrigger
Som standard använder funktioner nyckelbaserad autentisering för att skydda HTTP-slutpunkter. Om du vill aktivera Microsoft Entra-autentisering för att skydda åtkomsten till funktionerna anger du authLevel
nyckeln till anonymous
i filen function.json , som du ser i följande exempel:
{
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
...
}
]
}
Mer information finns i avsnittet Säkra HTTP-slutpunkter i Skydda Azure Functions.
Använd följande kommando för att publicera appen till den instans som skapades i föregående steg:
func azure functionapp publish <function-app-name>
Utdata från publiceringskommandot bör visa URL:en till din nyligen skapade funktion, enligt följande utdata:
Deployment completed successfully.
Syncing triggers...
Functions in <your-functionapp-name>:
HttpTrigger - [httpTrigger]
Invoke url: https://<function-app-name>.azurewebsites.net/api/httptrigger
Skapa en Azure Spring Apps-tjänstinstans och ett program
Använd följande kommandon för att lägga till spring-tillägget och för att skapa en ny instans av Azure Spring Apps:
az extension add --upgrade --name spring
az spring create \
--resource-group <resource-group-name> \
--name <Azure-Spring-Apps-instance-name> \
--location <location>
Använd följande kommando för att skapa ett program med namnet msiapp
med en systemtilldelad hanterad identitet, enligt parametern --assign-identity
:
az spring app create \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name "msiapp" \
--assign-endpoint true \
--assign-identity
Skapa en Spring Boot-exempelapp för att anropa funktionen
Det här exemplet anropar den HTTP-utlösta funktionen genom att först begära en åtkomsttoken från MSI-slutpunkten och använda den token för att autentisera funktionens HTTP-begäran. Mer information finns i avsnittet Hämta en token med HTTP i Så här använder du hanterade identiteter för Azure-resurser på en virtuell Azure-dator för att hämta en åtkomsttoken.
Använd följande kommando för att klona exempelprojektet:
git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
Använd följande kommando för att ange din funktions-URI och utlösarnamnet i appegenskaperna:
cd azure-spring-apps-samples/managed-identity-function vim src/main/resources/application.properties
Om du vill använda hanterad identitet för Azure Spring Apps-appar lägger du till följande egenskaper med dessa värden i 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>
Använd följande kommando för att paketera exempelappen:
mvn clean package
Använd följande kommando för att distribuera appen till 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
Använd följande kommando för att komma åt den offentliga slutpunkten eller testslutpunkten för att testa din app:
curl https://<Azure-Spring-Apps-instance-name>-msiapp.azuremicroservices.io/func/springcloud
Följande meddelande returneras i svarstexten.
Function Response: Hello, springcloud. This HTTP triggered function executed successfully.