Condividi tramite


Esercitazione: Come usare un'identità gestita per richiamare Funzioni di Azure da un'app di Azure Spring Apps

Nota

I piani Basic, Standard ed Enterprise saranno deprecati a partire dalla metà di marzo 2025, con un periodo di ritiro di 3 anni. È consigliabile eseguire la transizione ad App Azure Container. Per altre informazioni, vedere l'annuncio di ritiro di Azure Spring Apps.

Il piano Standard a consumo e dedicato sarà deprecato a partire dal 30 settembre 2024, con un arresto completo dopo sei mesi. È consigliabile eseguire la transizione ad App Azure Container. Per altre informazioni, vedere Eseguire la migrazione del consumo di Azure Spring Apps Standard e del piano dedicato alle app Azure Container.

Questo articolo si applica a: ✔️ Basic/Standard ✔️ Enterprise

Questo articolo illustra come creare un'identità gestita per un'app ospitata in Azure Spring Apps e usarla per richiamare funzioni attivate tramite HTTP.

Sia Funzioni di Azure che Servizi app includono il supporto predefinito per l'autenticazione di Microsoft Entra. Usando questa funzionalità di autenticazione predefinita insieme a Identità gestite per Azure Spring Apps, è possibile richiamare i servizi RESTful usando la moderna semantica di OAuth. Questo metodo non richiede l'archiviazione di segreti nel codice e fornisce controlli più granulari dell'accesso a risorse esterne.

Prerequisiti

Creare un gruppo di risorse

Un gruppo di risorse è un contenitore logico in cui vengono distribuite e gestite le risorse di Azure. Usare il comando seguente per creare un gruppo di risorse per contenere un'app per le funzioni:

az group create --name <resource-group-name> --location <location>

Per altre informazioni, vedere il comando az group create.

Creare un'app per le funzioni

Per creare un'app per le funzioni, è prima necessario creare un account di archiviazione di backup. È possibile usare il comando az storage account create.

Importante

È necessario che ogni app per le funzioni e ogni account di archiviazione abbiano un nome univoco.

Usare il comando seguente per creare l'account di archiviazione. Sostituire <function-app-name> con il nome dell'app per le funzioni e <storage-account-name> con il nome dell'account di archiviazione.

az storage account create \
    --resource-group <resource-group-name> \
    --name <storage-account-name> \
    --location <location> \
    --sku Standard_LRS

Dopo aver creato l'account di archiviazione, usare il comando seguente per creare l'app per le funzioni:

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

Prendere nota del valore hostNames restituito, che è nel formato https://<your-functionapp-name>.azurewebsites.net. Usare questo valore nell'URL radice dell'app per le funzioni per testare l'app per le funzioni.

Abilitare l'autenticazione di Microsoft Entra

Usare la procedura seguente per abilitare l'autenticazione di Microsoft Entra per accedere all'app per le funzioni.

  1. Nel portale di Azure passare al gruppo di risorse, quindi aprire l'app per le funzioni creata.
  2. Nel riquadro di spostamento selezionare Autenticazione, quindi selezionare Aggiungi provider di identità nel riquadro principale.
  3. Nella pagina Aggiungi provider di identità selezionare Microsoft dal menu a discesa Provider di identità.
  4. Selezionare Aggiungi.
  5. Per le impostazioni di base nella pagina Aggiungi un provider di identità, impostare Tipi di account supportati su Qualsiasi directory Microsoft Entra - Multi-tenant.
  6. Impostare Richieste non autenticate su HTTP 401 Non autorizzato: consigliato per le API. Questa impostazione assicura che tutte le richieste non autenticate vengano negate (risposta 401).
  7. Selezionare Aggiungi.

Dopo aver aggiunto le impostazioni, l'app per le funzioni viene riavviata e a tutte le richieste successive viene chiesto di accedere tramite Microsoft Entra ID. È possibile verificare che le richieste non autenticate vengano attualmente rifiutate con l'URL radice dell'app per le funzioni (restituito nell'output hostNames del comando az functionapp create). Si dovrebbe quindi essere reindirizzati alla schermata di accesso di Microsoft Entra dell'organizzazione.

Sono necessari l'ID applicazione e l'URI ID applicazione, poiché verranno usati un secondo momento. Nel portale di Azure passare all'app per le funzioni creata.

Per ottenere l'ID applicazione, selezionare Autenticazione nel riquadro di spostamento e quindi copiare il valore ID app (client) del provider di identità che include il nome dell'app per le funzioni.

Screenshot del portale di Azure che mostra la pagina di autenticazione di un'app per le funzioni, con il nome dell'app per le funzioni evidenziato nel provider di identità.

Per ottenere l'URI ID applicazione, selezionare Esporre un'API nel riquadro di spostamento, quindi copiare il valore URI ID applicazione.

Screenshot del portale di Azure che mostra la pagina Esporre un'API di un'app per le funzioni con l'URI ID applicazione evidenziato.

Creare una funzione attivata tramite HTTP

In una directory locale vuota usare i comandi seguenti per creare una nuova app per le funzioni e aggiungere una funzione attivata tramite HTTP:

func init --worker-runtime node
func new --template HttpTrigger --name HttpTrigger

Per impostazione predefinita, le funzioni usano l'autenticazione basata su chiave per proteggere gli endpoint HTTP. Per abilitare l'autenticazione di Microsoft Entra per proteggere l'accesso alle funzioni, impostare la chiave authLevel su anonymous nel file function.json, come illustrato nell'esempio seguente:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      ...
    }
  ]
}

Per altre informazioni, vedere la sezione Proteggere gli endpoint HTTP in Protezione di Funzioni di Azure.

Usare il comando seguente per pubblicare l'app nell'istanza creata nel passaggio precedente:

func azure functionapp publish <function-app-name>

L'output del comando publish deve elencare l'URL della funzione appena creata, come illustrato nell'output seguente:

Deployment completed successfully.
Syncing triggers...
Functions in <your-functionapp-name>:
    HttpTrigger - [httpTrigger]
        Invoke url: https://<function-app-name>.azurewebsites.net/api/httptrigger

Creare un'applicazione e un’istanza del servizio Azure Spring Apps

Usare i comandi seguenti per aggiungere l'estensione spring e creare una nuova istanza di 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>

Usare il comando seguente per creare un'applicazione denominata msiapp con un'identità gestita assegnata dal sistema, come richiesto dal parametro --assign-identity:

az spring app create \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name "msiapp" \
    --assign-endpoint true \
    --assign-identity

Creare un'app Spring Boot di esempio per richiamare la funzione

Questo esempio richiama la funzione attivata tramite HTTP chiedendo prima di tutto all'endpoint delle identità gestite un token di accesso che userà per autenticare la richiesta HTTP della funzione. Per altre informazioni, vedere la sezione Ottenere un token usando HTTP di Come usare le identità gestite per le risorse di Azure in una macchina virtuale di Azure per acquisire un token di accesso.

  1. Usare il comando seguente per clonare il progetto di esempio:

    git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
    
  2. Usare il comando seguente per specificare l'URI della funzione e il nome del trigger nelle proprietà dell'app:

    cd azure-spring-apps-samples/managed-identity-function
    vim src/main/resources/application.properties
    
  3. Per usare l'identità gestita per le app di Azure Spring Apps, aggiungere le seguenti proprietà con questi valori in 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. Usare il comando seguente per creare un pacchetto dell'app di esempio:

    mvn clean package
    
  5. Usare il comando seguente per distribuire l'app 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. Usare il comando seguente per accedere all'endpoint pubblico o all'endpoint di test per testare l'app:

    curl https://<Azure-Spring-Apps-instance-name>-msiapp.azuremicroservices.io/func/springcloud
    

    Nel corpo della risposta verrà restituito il messaggio seguente.

    Function Response: Hello, springcloud. This HTTP triggered function executed successfully.
    

Passaggi successivi