Esercitazione: Connessione un'app per le funzioni in SQL di Azure con associazioni di identità gestite e SQL

Funzioni di Azure fornisce un'identità gestita, una soluzione chiavi in volta per proteggere l'accesso a 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 stringa di connessione. In questa esercitazione si aggiungerà un'identità gestita a una funzione di Azure che usa le associazioni SQL di Azure. Un progetto di funzione di Azure di esempio con associazioni SQL è disponibile nell'esempio back-end ToDo.

Al termine di questa esercitazione, la funzione di Azure si connetterà al database SQL di Azure senza la necessità di nome utente e password.

Panoramica dei passaggi da eseguire:

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

Abilitare prima di tutto l'autenticazione di Microsoft Entra nel database SQL assegnando un utente di Microsoft Entra come amministratore di 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 autorizzati di Microsoft Entra, vedere Funzionalità e limitazioni di Microsoft Entra nel database SQL.

L'abilitazione dell'autenticazione di Microsoft Entra può essere completata tramite il portale di Azure, PowerShell o l'interfaccia della riga di comando di Azure. Le istruzioni per l'interfaccia della riga di comando di Azure sono riportate di seguito e le informazioni completate tramite portale di Azure e PowerShell sono disponibili nella documentazione di Azure SQL sull'autenticazione di 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. Trovare l'ID oggetto dell'utente di Microsoft Entra usando az ad user list e sostituire <user-principal-name>. Il risultato viene salvato in 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 i nomi delle entità utente in Microsoft Entra ID, eseguire az ad user list --query [].userPrincipalName.

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

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

Per altre informazioni sull'aggiunta di un amministratore di Active Directory, vedere Effettuare il provisioning di un amministratore di Microsoft Entra per il server

Abilitare l'identità gestita assegnata dal sistema nella funzione di Azure

In questo passaggio si aggiungerà un'identità assegnata dal sistema alla funzione di Azure. Nei passaggi successivi, all'identità verrà concesso l'accesso al database SQL.

Per abilitare l'identità gestita assegnata dal sistema nel portale di Azure:

  1. Creare una funzione di Azure nel portale come si farebbe normalmente. Accedervi nel portale.
  2. Scorrere verso il basso fino al gruppo Impostazioni nel riquadro di spostamento a sinistra.
  3. Selezionare Identità.
  4. All'interno della scheda Assegnata dal sistema impostare Stato su Attivato. Fare clic su Salva.

Turn on system assigned identity for Function app

Per informazioni sull'abilitazione dell'identità gestita assegnata dal sistema tramite l'interfaccia della riga di comando di Azure o PowerShell, vedere altre informazioni sull'uso delle identità gestite con Funzioni di Azure.

Suggerimento

Per l'identità gestita assegnata dall'utente, passare alla scheda Assegnata dall'utente. Fare clic su Aggiungi e selezionare un'identità gestita. Per altre informazioni sulla creazione di un'identità gestita assegnata dall'utente, vedere Gestire le identità gestite assegnate dall'utente.

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

In questo passaggio ci si connetterà al database SQL con un account utente Microsoft Entra e si concederà l'accesso all'identità gestita al database.

  1. Aprire lo strumento SQL preferito e accedere con un account utente Microsoft Entra (ad esempio l'utente microsoft Entra assegnato come amministratore). Questa operazione può essere eseguita in Cloud Shell con 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. Se l'identità è assegnata dal sistema, il nome corrisponde sempre al nome dell'app per le funzioni.

Configurare stringa di connessione SQL per le funzioni di Azure

Nel passaggio finale verrà configurato il stringa di connessione SQL per le funzioni di Azure per l'uso dell'autenticazione dell'identità gestita di Microsoft Entra.

Il nome dell'impostazione stringa di connessione viene identificato nel codice di Funzioni come attributo di associazione "Connessione ionStringSetting", come illustrato negli attributi e nelle annotazioni di associazione di input SQL.

Nelle impostazioni dell'applicazione dell'app per le funzioni l'impostazione sql stringa di connessione deve essere aggiornata per seguire questo formato:

Server=demo.database.windows.net; Authentication=Active Directory Managed Identity; Database=testdb

testdb è il nome del database a cui ci si connette e demo.database.windows.net è il nome del server a cui ci si connette.

Suggerimento

Per l'identità gestita assegnata dall'utente, usare Server=demo.database.windows.net; Authentication=Active Directory Managed Identity; User Id=ClientIdOfManagedIdentity; Database=testdb.

Passaggi successivi