Share via


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

Nota

Azure Spring Apps è il nuovo nome del servizio Azure Spring Cloud. Anche se il servizio ha un nuovo nome, il nome precedente verrà visualizzato in alcune posizioni per un po' mentre si lavora per aggiornare gli asset, ad esempio screenshot, video e diagrammi.

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 servizio app hanno integrato il supporto per l'autenticazione di Microsoft Entra. Usando questa funzionalità di autenticazione predefinita insieme alle identità gestite per Azure Spring Apps, è possibile richiamare i servizi RESTful usando la semantica OAuth moderna. 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

Ogni app per le funzioni e l'account di archiviazione devono avere 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 restituito hostNames , 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. Nella portale di Azure passare al gruppo di risorse e quindi aprire l'app per le funzioni creata.

  2. Nel riquadro di spostamento selezionare Autenticazione e 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à.

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

  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 garantisce che tutte le richieste non autenticate vengano negate (risposta 401).

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

  7. Selezionare Aggiungi.

Dopo aver aggiunto le impostazioni, l'app per le funzioni viene riavviata e tutte le richieste successive vengono richieste 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 az functionapp create comando). Si dovrebbe quindi essere reindirizzati alla schermata di accesso di Microsoft Entra dell'organizzazione.

Sono necessari l'ID applicazione e l'URI ID applicazione per usarli in un secondo momento. Nella 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) per il provider di identità che include il nome dell'app per le funzioni.

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

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

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

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 authLevel chiave su anonymous nel file function.json , come illustrato nell'esempio seguente:

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

Per altre informazioni, vedere la sezione Proteggere un endpoint HTTP nell'ambiente di produzione di Funzioni di Azure trigger HTTP.

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'istanza e un'applicazione 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 --assign-identity parametro :

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 da HTTP richiedendo prima un token di accesso dall'endpoint MSI e usando tale token 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 Azure Spring Apps, aggiungere le proprietà seguenti con questi valori a 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
    

    Il messaggio seguente viene restituito nel corpo della risposta.

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

Passaggi successivi