Delen via


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 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.

  1. Navigeer in Azure Portal naar uw resourcegroep en open vervolgens de functie-app die u hebt gemaakt.

  2. Selecteer Verificatie in het navigatiedeelvenster en selecteer vervolgens Id-provider toevoegen in het hoofdvenster.

  3. Selecteer Op de pagina Een id-provider toevoegen Microsoft in de vervolgkeuzelijst Id-provider.

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

  4. Selecteer Toevoegen.

  5. Voor de basisinstellingen op de pagina Een id-provider toevoegen stelt u Ondersteunde accounttypen in op Elke Microsoft Entra-map - Meerdere tenants.

  6. 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).

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

  7. 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.

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

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.

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

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.

  1. Gebruik de volgende opdracht om het voorbeeldproject te klonen:

    git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
    
  2. 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
    
  3. 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>
    
  4. Gebruik de volgende opdracht om uw voorbeeld-app te verpakken:

    mvn clean package
    
  5. 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
    
  6. 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