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 le connessioni basate su identità anziché i 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. In questo modo è possibile 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.

Poiché alcuni servizi non supportano l'autenticazione di Microsoft Entra, le applicazioni potrebbero comunque richiedere segreti in determinati casi. Tuttavia, questi segreti possono essere archiviati in Azure Key Vault, che consente di semplificare il ciclo di vita di gestione per i segreti. L'accesso a un insieme di credenziali delle chiavi è controllato anche con le identità.

Comprendere come usare le identità anziché i segreti quando è possibile e usare Key Vault quando non è 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 (Server Message Block). 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 operazione introduce limitazioni che potrebbero non essere desiderate. È invece possibile spostare il File di Azure stringa di connessione in Azure Key Vault. In questo modo viene gestito centralmente, con l'accesso controllato dall'identità.

Creare un Azure Key Vault

Prima di tutto è necessario un insieme di credenziali delle chiavi in cui archiviare i segreti. Configurarlo per l'uso del 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 crea 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 per usarlo in un secondo momento.

  5. Selezionare 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. Controllare la configurazione e quindi selezionare Crea.

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

Per usare Azure Key Vault, l'app deve avere un'identità a cui è possibile concedere l'autorizzazione per leggere i segreti. Questa app usa 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 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 crea 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. Controllare la configurazione e quindi selezionare Crea.

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

  6. Selezionare Assegnazioni di ruolo di Azure e selezionare 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 Key Vault 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à è ora in grado di leggere i segreti archiviati nell'insieme di credenziali delle chiavi. Più avanti nell'esercitazione si aggiungono altre assegnazioni di ruolo per scopi diversi.

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

Poiché l'esperienza del portale per la creazione di un'app per le funzioni non interagisce con Azure Key Vault, è necessario generare e modificare un 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 crea 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 In questa esercitazione viene usato .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 . Esaminare le opzioni predefinite, 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 che mostra il pulsante Distribuisci nella parte superiore della pagina Modello.

Modificare il modello

È ora possibile modificare 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. Anche in questo caso sostituire "VAULT_NAME" con il nome dell'insieme di credenziali delle chiavi. In questo modo si impedisce la creazione dell'app 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 specificarla con un ID. Le identità assegnate dal sistema non devono essere specificate in questo modo, perché un'app può avere una sola identità. Molte funzionalità che usano l'identità gestita presuppongono che debbano usare quella assegnata dal sistema per impostazione predefinita.

  5. Trovare 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 di 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.

Complimenti. 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 a Key Vault 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 AzureWebJobsStorage

Successivamente, si usa 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, 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 seguiti in precedenza con l'identità assegnata dall'utente e l'insieme di credenziali delle chiavi, si crea 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). Questa pagina consente di visualizzare e configurare chi può accedere alla risorsa.

  3. Selezionare Aggiungi e selezionare Aggiungi assegnazione di ruolo.

  4. Cercare Proprietario dati BLOB di archiviazione, selezionarlo e selezionare Avanti

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

  6. Selezionare 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 dell'app per le funzioni potrebbe avere un numero tra parentesi accanto a esso, 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. Selezionare l'applicazione. Verrà spostato verso il basso nella sezione Membri selezionati. Scegli Seleziona.

  11. Nella schermata Aggiungi assegnazione di ruolo selezionare Rivedi e assegna. Esaminare la configurazione e quindi selezionare Rivedi e assegna.

Suggerimento

Se si intende usare l'app per le funzioni per una funzione attivata da BLOB, è necessario ripetere questi passaggi per i ruoli Collaboratore account di archiviazione e Collaboratore dati coda di archiviazione sull'account usato da AzureWebJobsStorage. Per altre informazioni, vedere Connessioni basate sull'identità dei trigger BLOB.

Modificare la configurazione di AzureWebJobsStorage

Aggiornare quindi 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 all'archiviazione host 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. Nel portale di Azure passare all'app per le funzioni.

  2. Nell'app per le funzioni, espandere Impostazionie selezionare Variabili di ambiente.

  3. Nella scheda Impostazioni app selezionare l'impostazione dell'app AzureWebJobsStorage e modificarla in base alla tabella seguente:

    Opzione Valore suggerito Description
    Nome AzureWebJobsStorage__accountName Modificare il nome da AzureWebJobsStorage con il 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 a StorageAccountName.

    Questa configurazione indica al sistema di usare un'identità per connettersi alla risorsa.

  4. Selezionare Applica e quindi applica e conferma per salvare le modifiche e riavviare la funzione dell'app.

A questo punto è stato rimosso il requisito di archiviazione stringa di connessione per AzureWebJobsStorage configurando l'app per connettersi ai BLOB usando identità gestite.

Nota

La __accountName sintassi è univoca per la connessione AzureWebJobsStorage 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.

Passare all'esercitazione successiva per informazioni su come usare le identità nelle connessioni di trigger e binding.