Självstudie: Använda en hanterad identitet för att anropa Azure Functions från en Azure Spring Apps-app

Kommentar

Azure Spring Apps är det nya namnet på Azure Spring Cloud-tjänsten. Även om tjänsten har ett nytt namn ser du det gamla namnet på vissa platser ett tag medan vi arbetar med att uppdatera tillgångar som skärmbilder, videor och diagram.

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

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

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

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

  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. Gå till funktionsappen som du skapade i Azure-portalen.

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.

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

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.

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

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 Skydda en HTTP-slutpunkt i produktion i Azure Functions HTTP-utlösare.

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