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
- Una sottoscrizione di Azure. Se non si ha già una sottoscrizione, creare un account gratuito prima di iniziare.
- Interfaccia della riga di comando di Azure versione 2.45.0 o successiva.
- Git.
- Apache Maven, versione 3.0 o successiva.
- Installare Azure Functions Core Tools versione 4.x.
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.
- Nel portale di Azure passare al gruppo di risorse, quindi aprire l'app per le funzioni creata.
- Nel riquadro di spostamento selezionare Autenticazione, quindi selezionare Aggiungi provider di identità nel riquadro principale.
- Nella pagina Aggiungi provider di identità selezionare Microsoft dal menu a discesa Provider di identità.
- Selezionare Aggiungi.
- Per le impostazioni di base nella pagina Aggiungi un provider di identità, impostare Tipi di account supportati su Qualsiasi directory Microsoft Entra - Multi-tenant.
- 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).
- 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.
Per ottenere l'URI ID applicazione, selezionare Esporre un'API nel riquadro di spostamento, quindi copiare il valore URI ID applicazione.
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.
Usare il comando seguente per clonare il progetto di esempio:
git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
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
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>
Usare il comando seguente per creare un pacchetto dell'app di esempio:
mvn clean package
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
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.