Dela via


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

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.

  1. I Azure Portal navigerar du till resursgruppen och öppnar sedan funktionsappen som du skapade.
  2. I navigeringsfönstret väljer du Autentisering och sedan Lägg till identitetsprovider i huvudfönstret.
  3. På sidan Lägg till en identitetsprovider väljer du Microsoft i listrutan Identitetsprovider .
  4. Markera Lägga till.
  5. För grundinställningarna på sidan Lägg till en identitetsprovider anger du Kontotyper som stöds till Alla Microsoft Entra-kataloger – flera klientorganisationer.
  6. 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).
  7. 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.

Skärmbild av Azure Portal som visar sidan Autentisering för en funktionsapp med funktionsappens namn markerat i identitetsprovidern.

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.

Skärmbild av Azure Portal som visar sidan Exponera ett API för en funktionsapp med program-ID:ts URI markerat.

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.

  1. Använd följande kommando för att klona exempelprojektet:

    git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
    
  2. 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
    
  3. 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>
    
  4. Använd följande kommando för att paketera exempelappen:

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

Nästa steg