Esercitazione: Connettere un'app per le funzioni a SQL di Azure con identità gestite e binding SQL

Funzioni di Azure offre un'identità gestita, una soluzione risolutiva per proteggere l'accesso al Database SQL di Azure e ad altri servizi di Azure. Le identità gestite rendono l'app più sicura eliminando i segreti dall'app, ad esempio le credenziali nelle stringhe di connessione. In questo tutorial, aggiungi un'identità gestita a un'app di funzione che utilizza binding Azure SQL.

Questo tutorial utilizza un'identità gestita assegnata dall'utente (UAMI), consigliata perché può essere condivisa tra risorse ed è indipendente dal ciclo di vita dell'app. Per maggiori informazioni sulle connessioni basate sull'identità in Funzioni di Azure, vedi Configura le connessioni ai servizi remoti.

Quando finisci questo tutorial, la tua app di funzione si connetterà a database SQL di Azure senza bisogno di nome utente e password.

Una panoramica dei passaggi che ssegui:

Concedere l'accesso al database all'utente di Microsoft Entra

Per prima cosa, abilita l'autenticazione Microsoft Entra al database SQL assegnando un utente Microsoft Entra come amministratore Active Directory del server. Questo utente è diverso dall'account Microsoft usato per effettuare l'iscrizione alla sottoscrizione di Azure. Deve essere un utente creato, importato, sincronizzato o invitato in Microsoft Entra ID. Per altre informazioni sugli utenti di Microsoft Entra consentiti, vedere Funzionalità e limitazioni di Microsoft Entra nel database SQL.

Puoi abilitare l'autenticazione Microsoft Entra tramite il portale Azure, PowerShell o interfaccia della riga di comando di Azure. Le istruzioni per interfaccia della riga di comando di Azure si trovano nella sezione seguente. Per informazioni su come completare questo compito tramite il portale Azure e PowerShell, consulta la documentazione Azure SQL sull'autenticazione Microsoft Entra.

  1. Se il tenant di Microsoft Entra non ha ancora un utente, crearne uno seguendo la procedura descritta in Aggiungere o eliminare utenti usando Microsoft Entra ID.

  2. Trova l'ID oggetto dell'utente Microsoft Entra usando il az ad user list comando e sostituisci <user-principal-name>. Salva il risultato su una variabile.

    Per l'interfaccia della riga di comando di Azure 2.37.0 e versioni successive:

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].id --output tsv)
    

    Per le versioni precedenti dell'interfaccia della riga di comando di Azure:

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].objectId --output tsv)
    

    Suggerimento

    Per visualizzare l'elenco di tutti gli UPN (user principal name) in Microsoft Entra ID, eseguire az ad user list --query [].userPrincipalName.

  3. Aggiungi questo utente Microsoft Entra come amministratore di Active Directory usando il az sql server ad-admin create comando in Cloud Shell. Nel comando seguente sostituire <server-name> con il nome del server, senza il suffisso .database.windows.net.

    az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    

Per maggiori informazioni sull'aggiunta di un amministratore Active Directory, consulta Provisiona un amministratore Microsoft Entra per il tuo server.

Creare un'identità gestita assegnata dall'utente

Crea un'identità gestita assegnata dall'utente e assegnala alla tua app di funzione. Usa un'identità assegnata dall'utente perché puoi riutilizzarla su più risorse e il suo ciclo di vita è indipendente dalla tua app di funzione.

  1. Nel portale Azure, cerca Identità gestite e seleziona Crea.

  2. Scegli il tuo Abbonamento, Gruppo Risorse, Regione e assegna all'identità un Nome (ad esempio, my-sql-identity).

  3. Seleziona Rivedi e crea e quindi seleziona Crea.

  4. Dopo aver creato l'identità, vai all'app per le funzioni nel portale.

  5. Sotto Impostazioni, seleziona Identità, poi seleziona la scheda Utente assegnato.

  6. Seleziona Aggiungi, scegli l'identità gestita che hai creato e seleziona Aggiungi.

Suggerimento

Puoi anche usare un'identità gestita assegnata dal sistema. Se preferisci l'assegnazione al sistema, abilitala nella scheda Assegnato al Sistema della pagina Identità . Quando usi l'identità assegnata al sistema, il <identity-name> comando in SQL è il nome della tua app di funzione, e non hai bisogno del User Id parametro nella stringa di connessione.

Concedere all'identità gestita l'accesso al database SQL

In questo passaggio, connettiti al database SQL utilizzando un account utente Microsoft Entra e concedi all'identità gestita l'accesso al database.

  1. Apri il tuo strumento SQL preferito e accedi usando un account utente Microsoft Entra, come l'utente Microsoft Entra che hai assegnato come amministratore. Puoi completare questo passaggio in Cloud Shell usando il comando SQLCMD.

    sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
    
  2. Nel prompt SQL del database desiderato eseguire i comandi seguenti per concedere le autorizzazioni alla funzione. ad esempio:

    CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
    GO
    

    <identity-name> è il nome dell'identità gestita in Microsoft Entra ID. Per un'identità assegnata dall'utente, questo nome è il nome che hai dato all'identità quando l'hai creata (ad esempio, my-sql-identity). Per un'identità assegnata al sistema, il nome è sempre lo stesso del nome della tua app di funzione.

    Annotazioni

    Se si usa il trigger Azure SQL, l'identità gestita richiede autorizzazioni aggiuntive oltre a db_datareader e db_datawriter. Per altre informazioni, vedere Concedere le autorizzazioni per trigger di Azure SQL.

Configurare la stringa di connessione SQL per le funzioni di Azure

Nell'ultimo passo, configura la function app SQL stringa di connessione per utilizzare l'autenticazione di identità gestita da Microsoft Entra.

Nel codice della funzione, identifichi il nome dell'impostazione della stringa di connessione come attributo di associazione ConnectionStringSetting, come si vede negli attributi e annotazioni del binding di input SQL.

Nelle impostazioni dell'applicazione della tua app per funzioni, aggiorna l'impostazione della stringa di connessione SQL in modo che segua questo formato:

Server=<server-name>.database.windows.net; Authentication=Active Directory Default; Database=<database-name>; User Id=<client-id-of-user-assigned-identity>

Sostituisci <server-name> con il nome del server SQL, <database-name> con il nome del database e <client-id-of-user-assigned-identity> con l'ID client della tua identità gestita assegnata dall'utente. Puoi trovare l'ID client nella pagina Panoramica della tua risorsa di identità gestita nel portale Azure.

Suggerimento

La Active Directory Default parola chiave autenticazione funziona sia localmente (usando le tue credenziali di sviluppatore) sia in Azure (usando l'identità gestita). Questa funzione significa che puoi usare la stessa stringa di connessione in entrambi gli ambienti. Per l'identità gestita assegnata al sistema, ometti il User Id parametro.

Per maggiori informazioni sulle connessioni basate sull'identità, vedi Configura connessioni ai servizi remoti.

Passaggi successivi