Esercitazione: Creare un'app per le funzioni che si connette ai servizi di Azure usando identità anziché segreti

Questa esercitazione illustra come configurare un'app per le funzioni usando identità di Microsoft Entra anziché segreti o stringa di connessione, laddove possibile. L'uso delle identità consente di evitare la perdita accidentale di segreti sensibili e di offrire una migliore visibilità sul modo in cui si accede ai dati. Per altre informazioni sulle connessioni basate su identità, vedere Configurare una connessione basata su identità.

Anche se le procedure illustrate funzionano in genere per tutti i linguaggi, questa esercitazione supporta attualmente le funzioni della libreria di classi C# in Windows in modo specifico.

In questa esercitazione apprenderai a:

  • Creare un'app per le funzioni in Azure usando un modello di Resource Manager
  • Abilitare identità gestite assegnate dal sistema e assegnate dall'utente nell'app per le funzioni
  • Creare assegnazioni di ruolo che concedono autorizzazioni ad altre risorse
  • Spostare i segreti che non possono essere sostituiti con identità in Azure Key Vault
  • Configurare un'app per connettersi all'archiviazione host predefinita usando l'identità gestita

Dopo aver completato questa esercitazione, è necessario completare l'esercitazione seguente che illustra come usare connessioni basate su identità anziché segreti con trigger e associazioni.

Prerequisiti

Perché usare l'identità?

La gestione di segreti e credenziali è una sfida comune per i team di tutte le dimensioni. I segreti devono essere protetti contro il furto o la divulgazione accidentale e potrebbero dover essere ruotati periodicamente. Molti servizi di Azure consentono invece di usare un'identità in Microsoft Entra ID per autenticare i client e verificare le autorizzazioni che possono essere modificate e revocate rapidamente. Ciò consente un maggiore controllo sulla sicurezza delle applicazioni con un sovraccarico operativo inferiore. Un'identità può essere un utente umano, ad esempio lo sviluppatore di un'applicazione o un'applicazione in esecuzione in Azure con un'identità gestita.

Alcuni servizi non supportano l'autenticazione di Microsoft Entra, quindi i segreti potrebbero essere ancora richiesti dalle applicazioni. Tuttavia, è possibile archiviarli in Azure Key Vault, semplificando il ciclo di vita di gestione per i segreti. L'accesso a un insieme di credenziali delle chiavi è controllato anche con le identità.

Comprendendo come usare le identità anziché i segreti quando è possibile e usare Key Vault quando non è possibile, sarà possibile ridurre il rischio, ridurre il sovraccarico operativo e migliorare in genere il comportamento di sicurezza per le applicazioni.

Creare un'app per le funzioni che usa Key Vault per i segreti necessari

File di Azure è un esempio di servizio che non supporta ancora l'autenticazione di Microsoft Entra per le condivisioni file SMB. File di Azure è il file system predefinito per le distribuzioni di Windows nei piani Premium e a consumo. Anche se è possibile rimuovere completamente File di Azure, questa introduce limitazioni che potrebbero non essere desiderate. Il File di Azure stringa di connessione verrà invece spostato in Azure Key Vault. In questo modo viene gestito centralmente, con accesso controllato dall'identità.

Creare un Azure Key Vault

Prima di tutto è necessario un insieme di credenziali delle chiavi in cui archiviare i segreti. Verrà configurato in modo da usare il controllo degli accessi in base al ruolo di Azure per determinare chi può leggere i segreti dall'insieme di credenziali.

  1. Nella portale di Azure scegliere Crea una risorsa (+).

  2. Nella pagina Crea una risorsa selezionare Security Key Vault.On the Create a resource page, select Security>Key Vault.

  3. Nella pagina Informazioni di base usare la tabella seguente per configurare l'insieme di credenziali delle chiavi.

    Opzione Valore suggerito Descrizione
    Abbonamento Sottoscrizione in uso Sottoscrizione in cui viene creata questa nuova app per le funzioni.
    Gruppo di risorse myResourceGroup Nome del nuovo gruppo di risorse in cui si creerà l'app per le funzioni.
    Nome dell'insieme di credenziali delle chiavi Nome globalmente univoco Nome che identifica il nuovo insieme di credenziali delle chiavi. Il nome dell'insieme di credenziali deve contenere solo caratteri alfanumerici e trattini e non può iniziare con un numero.
    Piano tariffario Standard Opzioni per la fatturazione. Standard è sufficiente per questa esercitazione.
    Area Area preferita Scegliere un'area nelle vicinanze o vicino ad altri servizi a cui accedono le funzioni.

    Usare le selezioni predefinite per le sezioni "Opzioni di ripristino".

  4. Prendere nota del nome usato, perché sarà necessario in un secondo momento.

  5. Fare clic su Avanti: Criteri di accesso per passare alla scheda Criteri di accesso.

  6. In Modello di autorizzazione scegliere Controllo degli accessi in base al ruolo di Azure

  7. Selezionare Rivedi e crea. Esaminare la configurazione e quindi fare clic su Crea.

Configurare un'identità e le autorizzazioni per l'app

Per usare Azure Key Vault, l'app dovrà avere un'identità a cui è possibile concedere l'autorizzazione per leggere i segreti. Questa app userà un'identità assegnata dall'utente in modo che le autorizzazioni possano essere configurate prima della creazione dell'app. Per altre informazioni sulle identità gestite per Funzioni di Azure, vedere l'argomento Come usare le identità gestite in Funzioni di Azure.

  1. Nella portale di Azure scegliere Crea una risorsa (+).

  2. Nella pagina Crea una risorsa selezionare Identità>identità identità gestita assegnata dall'utente.

  3. Nella pagina Informazioni di base usare la tabella seguente per configurare l'identità.

    Opzione Valore suggerito Descrizione
    Abbonamento Sottoscrizione in uso Sottoscrizione in cui viene creata questa nuova app per le funzioni.
    Gruppo di risorse myResourceGroup Nome del nuovo gruppo di risorse in cui si creerà l'app per le funzioni.
    Area Area preferita Scegliere un'area nelle vicinanze o vicino ad altri servizi a cui accedono le funzioni.
    Nome Nome globalmente univoco Nome che identifica la nuova identità assegnata dall'utente.
  4. Selezionare Rivedi e crea. Esaminare la configurazione e quindi fare clic su Crea.

  5. Quando viene creata l'identità, passare a essa nel portale. Selezionare Proprietà e prendere nota dell'ID risorsa, perché sarà necessario in un secondo momento.

  6. Selezionare Assegnazioni di ruolo di Azure e fare clic su Aggiungi assegnazione di ruolo (anteprima).

  7. Nella pagina Aggiungi assegnazione di ruolo (anteprima) usare le opzioni come illustrato nella tabella seguente.

    Opzione Valore suggerito Descrizione
    Scope Insieme di credenziali delle chiavi di L'ambito è un set di risorse a cui si applica l'assegnazione di ruolo. L'ambito ha livelli ereditati a livelli inferiori. Ad esempio, se si seleziona un ambito di sottoscrizione, l'assegnazione di ruolo si applica a tutti i gruppi di risorse e le risorse nella sottoscrizione.
    Abbonamento Sottoscrizione in uso Sottoscrizione in cui viene creata questa nuova app per le funzioni.
    Conto risorse Insieme di credenziali delle chiavi Insieme di credenziali delle chiavi creato in precedenza.
    Ruolo Utente dei segreti di Key Vault Un ruolo è una raccolta di autorizzazioni concesse. L'utente dei segreti dell'insieme di credenziali delle chiavi concede all'identità l'autorizzazione per leggere i valori dei segreti dall'insieme di credenziali.
  8. Seleziona Salva. La visualizzazione del ruolo potrebbe richiedere un minuto o due quando si aggiorna l'elenco delle assegnazioni di ruolo per l'identità.

L'identità sarà ora in grado di leggere i segreti archiviati nell'insieme di credenziali delle chiavi. Più avanti nell'esercitazione si aggiungeranno altre assegnazioni di ruolo per scopi diversi.

Generare un modello per la creazione di un'app per le funzioni

L'esperienza del portale per la creazione di un'app per le funzioni non interagisce con Azure Key Vault, quindi sarà necessario generare e modificare il modello di Azure Resource Manager. È quindi possibile usare questo modello per creare l'app per le funzioni che fa riferimento al File di Azure stringa di connessione dall'insieme di credenziali delle chiavi.

Importante

Non creare l'app per le funzioni fino a quando non si modifica il modello di Resource Manager. La configurazione File di Azure deve essere configurata al momento della creazione dell'app.

  1. Nella portale di Azure scegliere Crea una risorsa (+).

  2. Nella pagina Crea una risorsa selezionare App per le>funzioni di calcolo.

  3. Nella pagina Informazioni di base usare la tabella seguente per configurare l'app per le funzioni.

    Opzione Valore suggerito Descrizione
    Abbonamento Sottoscrizione in uso Sottoscrizione in cui viene creata questa nuova app per le funzioni.
    Gruppo di risorse myResourceGroup Nome del nuovo gruppo di risorse in cui si creerà l'app per le funzioni.
    Nome dell'app per le funzioni Nome globalmente univoco Nome che identifica la nuova app per le funzioni. I caratteri validi sono a-z (senza distinzione tra maiuscole e minuscole), 0-9 e -.
    Pubblicazione Codice Scegliere di pubblicare file di codice o un contenitore Docker.
    Stack di runtime .NET Questa esercitazione usa .NET.
    Area Area preferita Scegliere un'area nelle vicinanze o vicino ad altri servizi a cui accedono le funzioni.
  4. Selezionare Rivedi e crea. L'app usa i valori predefiniti nella pagina Hosting e monitoraggio . Si è invitati a esaminare le opzioni predefinite e verranno incluse nel modello di Resource Manager generato.

  5. Invece di creare l'app per le funzioni qui, scegliere Scarica un modello per l'automazione, che si trova a destra del pulsante Avanti .

  6. Nella pagina del modello selezionare Distribuisci, quindi nella pagina Distribuzione personalizzata selezionare Modifica modello.

    Screenshot of where to find the deploy button at the top of the template screen.

Modificare il modello

A questo punto si modificherà il modello per archiviare il File di Azure stringa di connessione in Key Vault e consentire all'app per le funzioni di farvi riferimento. Prima di procedere, assicurarsi di avere i valori seguenti delle sezioni precedenti:

  • ID risorsa dell'identità assegnata dall'utente
  • il nome dell'istanza di Key Vault

Nota

Se si dovesse creare un modello completo per l'automazione, è consigliabile includere definizioni per le risorse di identità e assegnazione di ruolo, con le clausole appropriate dependsOn . In questo modo verranno sostituiti i passaggi precedenti che usavano il portale. Consultare il materiale sussidiario di Azure Resource Manager e la documentazione per ogni servizio.

  1. Nell'editor trovare dove inizia la resources matrice. Prima della definizione dell'app per le funzioni, aggiungere la sezione seguente che inserisce il File di Azure stringa di connessione in Key Vault. Sostituire "VAULT_NAME" con il nome dell'insieme di credenziali delle chiavi.

    {
        "type": "Microsoft.KeyVault/vaults/secrets",
        "apiVersion": "2016-10-01",
        "name": "VAULT_NAME/azurefilesconnectionstring",
        "properties": {
            "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value,';EndpointSuffix=','core.windows.net')]"
        },
        "dependsOn": [
            "[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]"
        ]
    },
    
  2. Nella definizione per la risorsa dell'app per le funzioni (impostata type su Microsoft.Web/sites), aggiungere Microsoft.KeyVault/vaults/VAULT_NAME/secrets/azurefilesconnectionstring alla dependsOn matrice. Sostituire di nuovo "VAULT_NAME" con il nome dell'insieme di credenziali delle chiavi. In questo modo l'app non verrà creata prima della definizione del segreto. La dependsOn matrice dovrebbe essere simile all'esempio seguente.

        {
            "type": "Microsoft.Web/sites",
            "apiVersion": "2018-11-01",
            "name": "[parameters('name')]",
            "location": "[parameters('location')]",
            "tags": null,
            "dependsOn": [
                "microsoft.insights/components/idcxntut",
                "Microsoft.KeyVault/vaults/VAULT_NAME/secrets/azurefilesconnectionstring",
                "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]"
            ],
            // ...
        }
    
  3. Aggiungere il identity blocco dall'esempio seguente alla definizione per la risorsa dell'app per le funzioni. Sostituire "IDENTITY_RESOURCE_ID" per l'ID risorsa dell'identità assegnata dall'utente.

    {
        "apiVersion": "2018-11-01",
        "name": "[parameters('name')]",
        "type": "Microsoft.Web/sites",
        "kind": "functionapp",
        "location": "[parameters('location')]",
        "identity": {
            "type": "SystemAssigned,UserAssigned",
            "userAssignedIdentities": {
                "IDENTITY_RESOURCE_ID": {}
            }
        },
        "tags": null,
        // ...
    }
    

    Questo identity blocco configura anche un'identità assegnata dal sistema che verrà usata più avanti in questa esercitazione.

  4. Aggiungere la keyVaultReferenceIdentity proprietà all'oggetto properties per l'app per le funzioni come nell'esempio seguente. Sostituire "IDENTITY_RESOURCE_ID" per l'ID risorsa dell'identità assegnata dall'utente.

    {
        // ...
         "properties": {
                "name": "[parameters('name')]",
                "keyVaultReferenceIdentity": "IDENTITY_RESOURCE_ID",
                // ...
         }
    }
    

    Questa configurazione è necessaria perché un'app potrebbe avere più identità assegnate dall'utente configurate. Ogni volta che si vuole usare un'identità assegnata dall'utente, è necessario specificarne una tramite un ID. Questo non è vero per le identità assegnate dal sistema, perché un'app ne avrà mai una sola. Molte funzionalità che usano l'identità gestita presuppongono che debbano usare quella assegnata dal sistema per impostazione predefinita.

  5. Trovare ora gli oggetti JSON che definiscono l'impostazione dell'applicazione WEBSITE_CONTENTAZUREFILECONNECTIONSTRING , che dovrebbe essere simile all'esempio seguente:

    {
        "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
        "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value,';EndpointSuffix=','core.windows.net')]"
    },
    
  6. Sostituire il value campo con un riferimento al segreto, come illustrato nell'esempio seguente. Sostituire "VAULT_NAME" con il nome dell'insieme di credenziali delle chiavi.

    {
        "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
        "value": "[concat('@Microsoft.KeyVault(SecretUri=', reference(resourceId('Microsoft.KeyVault/vaults/secrets', 'VAULT_NAME', 'azurefilesconnectionstring')).secretUri, ')')]"
    },
    
  7. Selezionare Salva per salvare il modello di Resource Manager aggiornato.

Distribuire il modello modificato

  1. Assicurarsi che le opzioni di creazione, incluso il gruppo di risorse, siano ancora corrette e selezionare Rivedi e crea.

  2. Dopo aver convalidato il modello, prendere nota del nome dell'account Archiviazione, perché questo account verrà usato in un secondo momento. Infine, selezionare Crea per creare le risorse di Azure e distribuire il codice nell'app per le funzioni.

  3. Al termine della distribuzione, selezionare Vai al gruppo di risorse e quindi selezionare la nuova app per le funzioni.

Congratulazioni. L'app per le funzioni è stata creata correttamente per fare riferimento al File di Azure stringa di connessione da Azure Key Vault.

Ogni volta che l'app deve aggiungere un riferimento a un segreto, è sufficiente definire una nuova impostazione dell'applicazione che punta al valore archiviato in Key Vault. Per altre informazioni, vedere Riferimenti all'insieme di credenziali delle chiavi per Funzioni di Azure.

Suggerimento

Application Insights stringa di connessione e la relativa chiave di strumentazione inclusa non sono considerati segreti e possono essere recuperati da App Insights usando le autorizzazioni di lettura. Non è necessario spostarli in Key Vault, anche se è certamente possibile.

Usare l'identità gestita per AzureWebJobs Archiviazione

Successivamente si userà l'identità assegnata dal sistema configurata nei passaggi precedenti per la AzureWebJobsStorage connessione. AzureWebJobsStorage viene usato dal runtime di Funzioni e da diversi trigger e associazioni per coordinare tra più istanze in esecuzione. È necessario che l'app per le funzioni e, come File di Azure, sia configurata con un stringa di connessione per impostazione predefinita quando si crea una nuova app per le funzioni.

Concedere all'identità assegnata dal sistema l'accesso all'account di archiviazione

Analogamente ai passaggi impiegato prima con l'identità assegnata dall'utente e l'insieme di credenziali delle chiavi, si creerà ora un'assegnazione di ruolo che concede all'identità assegnata dal sistema l'accesso all'account di archiviazione.

  1. Nella portale di Azure passare all'account di archiviazione creato in precedenza con l'app per le funzioni.

  2. Seleziona Controllo di accesso (IAM). Qui è possibile visualizzare e configurare chi può accedere alla risorsa.

  3. Fare clic su Aggiungi e selezionare Aggiungi assegnazione di ruolo.

  4. Cercare Archiviazione Proprietario dati BLOB, selezionarlo e fare clic su Avanti

  5. Nella scheda Membri , in Assegna accesso a, scegliere Identità gestita

  6. Fare clic su Seleziona membri per aprire il pannello Seleziona identità gestite.

  7. Verificare che la sottoscrizione sia quella in cui sono state create le risorse in precedenza.

  8. Nel selettore identità gestita scegliere App per le funzioni dalla categoria Identità gestita assegnata dal sistema. L'etichetta "App per le funzioni" potrebbe avere un numero tra parentesi accanto a essa, che indica il numero di app nella sottoscrizione con identità assegnate dal sistema.

  9. L'app dovrebbe essere visualizzata in un elenco sotto i campi di input. Se non viene visualizzato, è possibile usare la casella Seleziona per filtrare i risultati con il nome dell'app.

  10. Fare clic sull'applicazione. Verrà spostato verso il basso nella sezione Membri selezionati. Fare clic su Seleziona.

  11. Nella schermata Aggiungi assegnazione di ruolo fare clic su Rivedi e assegna. Esaminare la configurazione e quindi fare clic su Rivedi e assegna.

Suggerimento

Se si prevede di usare l'app per le funzioni per una funzione attivata da BLOB, sarà necessario ripetere questi passaggi per i ruoli collaboratore account Archiviazione e collaboratore ai dati della coda Archiviazione sull'account usato da AzureWebJobs Archiviazione. Per altre informazioni, vedere Connessioni basate sull'identità dei trigger BLOB.

Modificare la configurazione di AzureWebJobs Archiviazione

Successivamente si aggiornerà l'app per le funzioni per usare l'identità assegnata dal sistema quando usa il servizio BLOB per l'archiviazione host.

Importante

La AzureWebJobsStorage configurazione viene usata da alcuni trigger e associazioni e queste estensioni devono essere in grado di usare anche connessioni basate su identità. Le app che usano trigger BLOB o trigger dell'hub eventi potrebbero dover aggiornare tali estensioni. Poiché non sono state definite funzioni per questa app, non esiste ancora un problema. Per altre informazioni su questo requisito, vedere Connessione per ospitare l'archiviazione con un'identità.

Analogamente, AzureWebJobsStorage viene usato per gli artefatti di distribuzione quando si usa la compilazione lato server in Consumo linux. Quando si abilitano le connessioni basate sull'identità per AzureWebJobsStorage il consumo linux, sarà necessario eseguire la distribuzione tramite un pacchetto di distribuzione esterno.

  1. Nella portale di Azure passare all'app per le funzioni.

  2. In Impostazioni selezionare Configurazione.

  3. Selezionare il pulsante Modifica accanto all'impostazione dell'applicazione AzureWebJobs Archiviazione e modificarla in base ai valori seguenti.

    Opzione Valore suggerito Description
    Nome AzureWebJobs Archiviazione__accountName Aggiornare il nome da AzureWebJobs Archiviazione al nome AzureWebJobsStorage__accountNameesatto . Questa impostazione indica all'host di usare l'identità anziché cercare un segreto archiviato. La nuova impostazione usa un doppio carattere di sottolineatura (__), che è un carattere speciale nelle impostazioni dell'applicazione.
    valore Nome dell'account Aggiornare il nome dal stringa di connessione solo al Archiviazione AccountName.

    Questa configurazione consentirà al sistema di sapere che deve usare un'identità per connettersi alla risorsa.

  4. Selezionare OK e quindi Salva>continua per salvare le modifiche.

È stato rimosso il requisito di archiviazione stringa di connessione per AzureWebJobs Archiviazione configurando l'app per connettersi ai BLOB usando identità gestite.

Nota

La __accountName sintassi è univoca per la connessione AzureWebJobs Archiviazione e non può essere usata per altre connessioni di archiviazione. Per informazioni su come definire altre connessioni, controllare i riferimenti per ogni trigger e binding usati dall'app.

Passaggi successivi

Questa esercitazione ha illustrato come creare un'app per le funzioni senza archiviare segreti nella configurazione.

Nell'esercitazione successiva si apprenderà come usare l'identità nelle connessioni trigger e binding.