Guida introduttiva: Configurare Durable Functions con l'identità gestita

Questo quickstart mostra come configurare un'app Durable Functions per utilizzare connessioni basate su identità sia per il backend di Durable Task Scheduler sia per il provider Archiviazione di Azure. La piattaforma Azure gestisce un'identità gestita di Microsoft Entra ID: non è necessario effettuare il provisioning o la rotazione di segreti.

Questo percorso presuppone che la tua app sia già configurata per usare il backend Durable Task Scheduler. Se la tua app utilizza ancora il provider Archiviazione di Azure, scegli il percorso Archiviazione di Azure in questo articolo.

Contenuto dell'articolo:

Note

L'identità gestita è supportata nelle versioni Durable Functions dalla 2.7.0 in poi.

Se non si ha un account Azure, creare un account gratuito prima di iniziare.

Prerequisiti

Per completare questo avvio rapido, avrai bisogno di:

  • Un progetto di Durable Functions esistente creato nel portale di Azure o un progetto di Durable Functions locale distribuito in Azure.
  • Familiarità con l'esecuzione di un'app Durable Functions in Azure.

Se non è disponibile un progetto di Durable Functions esistente distribuito in Azure, è consigliabile iniziare con uno degli argomenti di avvio rapido seguenti:

Configurazione di sviluppo locale

Sono disponibili due opzioni per lo sviluppo locale. Usa l'emulatore locale Durable Task Scheduler per test rapidi senza credenziali Azure. Se devi testare le connessioni basate sull'identità con una risorsa di scheduler in tempo reale, usa invece le tue credenziali di sviluppatore.

Opzione 1: Usa l'emulatore locale Durable Task Scheduler

Quando sviluppi localmente, usa l'emulatore Durable Task Scheduler così puoi testare la tua app senza le credenziali Azure. Configura le impostazioni dell'app per puntare all'emulatore e usa il task hub predefinito.

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "DTS_CONNECTION_STRING": "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None",
    "TASKHUB_NAME": "default"
  }
}

Opzione 2: Connessioni basate su identità per lo sviluppo locale

A rigor di termini, un'identità gestita è disponibile solo per le app quando vengono eseguite in Azure. Tuttavia, puoi comunque configurare un'app in esecuzione locale per utilizzare connessioni basate sull'identità usando le tue credenziali di sviluppatore per autenticarti con la risorsa del scheduler. Poi, quando viene distribuita su Azure, l'app utilizza invece la configurazione di identità gestita.

Quando usi le credenziali dello sviluppatore, la connessione tenta di ottenere un token dalle seguenti posizioni, in quest'ordine:

  1. Una cache locale condivisa tra le applicazioni Microsoft
  2. Il contesto utente attuale in Visual Studio
  3. Il contesto utente corrente in Visual Studio Code
  4. Il contesto utente corrente nell'interfaccia della riga di comando di Azure

Se nessuna di queste opzioni ha esito positivo, viene visualizzato un errore che indica che l'app non può recuperare un token di autenticazione. Verifica di aver effettuato l'accesso a uno degli strumenti elencati con un account che abbia accesso alla risorsa di pianificazione.

Configurare il runtime per l'uso dell'identità dello sviluppatore locale

  1. Nelle impostazioni locali, imposta l'endpoint dello scheduler e usa Authentication=DefaultAzure in modo che l'app utilizzi le tue credenziali sviluppatore.

    {
      "IsEncrypted": false,
      "Values": {
        "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "DTS_CONNECTION_STRING": "Endpoint=https://<your-scheduler-name>.<region>.durabletask.io;TaskHub=<your-task-hub>;Authentication=DefaultAzure",
        "TASKHUB_NAME": "<your-task-hub>"
      }
    }
    
  2. Assegnare all'identità sviluppatore il ruolo Durable Task Data Contributor nella risorsa dello scheduler o nell'ambito specifico del task hub.

Connessioni basate su identità per l'app distribuita in Azure

Abilitare una risorsa di identità gestita

Abilita un'identità gestita per la tua app di funzione. L'app per le funzioni deve disporre di un'identità gestita assegnata dal sistema o di un'identità gestita assegnata dall'utente. Per abilitare un'identità gestita per l'app per le funzioni e per altre informazioni sulle differenze tra i due tipi di identità, vedere Panoramica delle identità gestite.

Assegnare ruoli di accesso all'identità gestita

Navigare fino alla risorsa dello scheduler nel portale Azure e assegnare il ruolo Durable Task Data Contributor all'identità gestita. Per l'accesso a privilegi minimi, assegnare il ruolo nell'ambito del task hub invece che nell'intero scheduler. Se usi un'identità assegnata dall'utente, seleziona Identità gestita e poi + Seleziona membri.

Aggiungere la configurazione dell'identità gestita all'app

Prima di poter usare l'identità gestita dell'app, apportare alcune modifiche alle impostazioni dell'app:

  1. Nel portale di Azure, nel menu delle risorse dell'app per le funzioni in Impostazioni selezionare Variabili di ambiente.

  2. Aggiungi o aggiorna l'impostazione DTS_CONNECTION_STRING in modo che l'app si connetta al tuo scheduler usando l'identità gestita dell'app.

    Endpoint=https://<your-scheduler-name>.<region>.durabletask.io;TaskHub=<your-task-hub>;Authentication=ManagedIdentity
    

    Se usi un'identità gestita assegnata dall'utente, includi l'ID client nella stringa di connessione:

    Endpoint=https://<your-scheduler-name>.<region>.durabletask.io;TaskHub=<your-task-hub>;Authentication=ManagedIdentity;ClientID=<your-user-assigned-identity-client-id>
    
  3. Aggiungi o aggiorna l'impostazione TASKHUB_NAME con lo stesso nome del task hub.

  4. Se il tuo host di funzioni ha bisogno di Archiviazione di Azure per operazioni a livello di host, configura AzureWebJobsStorage separatamente. Il backend dello scheduler usa la stringa di connessione DTS invece che AzureWebJobsStorage per lo stato Durable.

Verificare la configurazione

Per verificare che la configurazione dell'identità gestita funzioni:

  1. Nel portale di Azure, passa all'app per le funzioni e avvia l'orchestrazione di Durable Functions.
  2. Controlla che l'orchestrazione si concluda con successo interrogando l'endpoint di stato o controllando la scheda Monitor .
  3. Se vengono visualizzati errori di autenticazione, verificare che:
    • L'identità gestita dispone del ruolo Durable Task Data Contributor nella risorsa scheduler o nell'ambito del task hub.
    • Le DTS_CONNECTION_STRING impostazioni e TASKHUB_NAME sono corrette.
    • L'app utilizza l'identità attesa quando viene eseguita in Azure.

Configurazione di sviluppo locale

Sono disponibili due opzioni per lo sviluppo locale. Usare Azurite per test locali rapidi senza Azure credenziali. Se è necessario testare le connessioni basate sull'identità con un account Archiviazione di Azure reale, usare invece le credenziali dello sviluppatore.

Opzione 1: Usare l'emulatore Archiviazione di Azure

Quando si sviluppa in locale, è consigliabile usare Azurite, che è Archiviazione di Azure emulatore locale. Configurare l'app per l'emulatore specificando "AzureWebJobsStorage": "UseDevelopmentStorage=true" nel file local.settings.json.

Opzione 2: Connessioni basate su identità per lo sviluppo locale

In senso stretto, un'identità gestita è disponibile solo per le app durante l'esecuzione in Azure. Tuttavia, è comunque possibile configurare un'app in esecuzione in locale per usare la connessione basata sull'identità usando le credenziali dello sviluppatore per l'autenticazione con le risorse Azure. Quindi, quando viene distribuito in Azure, l'app utilizzerà invece la configurazione dell'identità gestita.

Quando si usano le credenziali dello sviluppatore, la connessione tenta di ottenere un token dalle posizioni seguenti, in questo ordine:

  1. Una cache locale condivisa tra le applicazioni Microsoft
  2. Il contesto utente attuale in Visual Studio
  3. Il contesto utente corrente in Visual Studio Code
  4. Il contesto utente corrente nell'interfaccia della riga di comando di Azure

Se nessuna di queste opzioni ha esito positivo, viene visualizzato un errore che indica che l'app non può recuperare un token di autenticazione. Assicurati di aver effettuato l'accesso a uno degli strumenti elencati con un account che abbia accesso al tuo account di archiviazione di Azure.

Configurare il runtime per l'uso dell'identità dello sviluppatore locale

  1. Specificare il nome dell'account Archiviazione di Azure in local.settings.json, ad esempio:

    {
       "IsEncrypted": false,
       "Values": {
          "AzureWebJobsStorage__accountName": "<<your Azure Storage account name>>",
          "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
       }
    }
    
  2. Accedi alla risorsa di account di archiviazione di Azure nel portale di Azure.

  3. Selezionare la scheda Controllo di accesso (IAM) e quindi selezionare Aggiungi assegnazione di ruolo.

  4. Assegnare a se stessi ognuno dei ruoli seguenti. Per ogni ruolo selezionare "+ Seleziona membri" e cercare il messaggio di posta elettronica usato per accedere a Visual Studio, Visual Studio Code o il interfaccia della riga di comando di Azure.

    • Collaboratore ai dati della coda di archiviazione
    • Collaboratore ai dati di Storage Blob
    • Contributore dei dati alle tabelle di archiviazione

    Note

    Questi sono gli stessi tre ruoli necessari per l'identità gestita durante la distribuzione in Azure. Vedere Assegnare i ruoli di accesso all'identità gestita.

    Screenshot dell'assegnazione del ruolo di Collaboratore ai dati di archiviazione a un utente nella pagina di controllo degli accessi del portale di Azure.

Connessioni basate su identità per l'app distribuita in Azure

Abilitare una risorsa di identità gestita

Per iniziare, abilitare un'identità gestita per l'applicazione. L'app per le funzioni deve disporre di un'identità gestita assegnata dal sistema o di un'identità gestita assegnata dall'utente. Per abilitare un'identità gestita per l'app per le funzioni e per altre informazioni sulle differenze tra i due tipi di identità, vedere Panoramica delle identità gestite.

Assegnare ruoli di accesso all'identità gestita

Passare alla risorsa di Archiviazione di Azure dell'app nel portale di Azure e assegnare tre ruoli di controllo degli accessi in base al ruolo alla risorsa di identità gestita:

  • Collaboratore ai dati della coda di archiviazione
  • Collaboratore ai dati di Storage Blob
  • Contributore dei dati alle tabelle di archiviazione

Per trovare la risorsa di identità, selezionare Assegna accesso all'identità gestita e quindi + Seleziona membri

Screenshot dell'assegnazione di ruoli di accesso alle risorse di archiviazione a un'identità gestita nel portale Azure.

Aggiungere la configurazione dell'identità gestita all'app

Prima di poter usare l'identità gestita dell'app, apportare alcune modifiche alle impostazioni dell'app:

  1. Nel portale di Azure, nel menu delle risorse dell'app per le funzioni in Impostazioni selezionare Variabili di ambiente.

  2. Nell'elenco delle impostazioni trovare AzureWebJobsStorage e selezionare l'icona Elimina. Screenshot della variabile di ambiente AzureWebJobsStorage nelle impostazioni delle funzioni dell'applicazione nel portale Azure.

  3. Aggiungere un'impostazione per collegare l'account di archiviazione Azure all'applicazione.

    Usare uno dei metodi seguenti a seconda del cloud in cui viene eseguita l'app:

    • Azure cloud: se l'app viene eseguita in globale Azure, aggiungere l'impostazione AzureWebJobsStorage__accountName che identifica un nome di account di archiviazione Azure. Valore di esempio: mystorageaccount123

    • Non-Azure cloud: se l'applicazione viene eseguita in un cloud al di fuori di Azure, è necessario aggiungere le tre impostazioni seguenti per fornire URI di servizio specifici (o endpoint) dell'account di archiviazione anziché un nome account.

      • Il nome dell'impostazione: AzureWebJobsStorage__blobServiceUri

        Valore di esempio: https://mystorageaccount123.blob.core.windows.net/

      • Il nome dell'impostazione: AzureWebJobsStorage__queueServiceUri

        Valore di esempio: https://mystorageaccount123.queue.core.windows.net/

      • Il nome dell'impostazione: AzureWebJobsStorage__tableServiceUri

        Valore di esempio: https://mystorageaccount123.table.core.windows.net/

    È possibile ottenere i valori per queste variabili URI nelle informazioni sull'account di archiviazione dalla scheda Endpoint.

    Screenshot della scheda degli endpoint dell'account di archiviazione che mostra gli URI dei servizi blob, coda e tabelle.

    Note

    Se si usa Azure per enti pubblici o qualsiasi altro cloud separato dall'Azure globale, è necessario usare l'opzione che fornisce URI di servizio specifici anziché solo il nome dell'account di archiviazione. Per altre informazioni sull'uso di Archiviazione di Azure con Azure per enti pubblici, vedere Develop usando l'API di archiviazione in Azure per enti pubblici.

  4. Completare la configurazione dell'identità gestita (ricordarsi di fare clic su "Applica" dopo aver apportato le modifiche alle impostazioni):

    • Se si usa un'identità assegnata dal sistema, non apportare altre modifiche.

    • Se si usa un'identità assegnata dall'utente, aggiungere le impostazioni seguenti nella configurazione dell'app:

      • AzureWebJobsStorage__credential, inserire managedidentity

      • AzureWebJobsStorage__clientId: ottenere questo valore GUID dalla risorsa di identità gestita

    Screenshot della risorsa identità gestita assegnata all'utente che mostra il valore dell'ID cliente.

    Note

    Durable Functions non supporta managedIdentityResourceId quando si usa l'identità assegnata dall'utente. Utilizzare invece clientId.

Verificare la configurazione

Per verificare che la configurazione dell'identità gestita funzioni:

  1. Nel portale di Azure, passare all'app delle funzioni e attivare l'orchestrazione delle Funzioni durevoli, per esempio utilizzando una funzione trigger HTTP.
  2. Verificare che l'orchestrazione venga completata correttamente eseguendo una query sull'endpoint di stato o controllando la scheda Monitoraggio .
  3. Se vengono visualizzati errori di autenticazione, verificare che:
    • Tutti e tre i ruoli di Collaboratore dati di archiviazione sono assegnati all'identità corretta.
    • L'impostazione AzureWebJobsStorage stringa di connessione viene rimossa.
    • Le AzureWebJobsStorage__accountName impostazioni (o URI del servizio) sono corrette.

Passaggi successivi