Esercitazione: Connettere un'app per le funzioni a SQL di Azure con associazioni di identità gestite e 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 questa esercitazione si aggiungerà un'identità gestita a una funzione di Azure che usa 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 di Microsoft Entra consentiti, 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 il portale di Azure e PowerShell sono disponibili nella documentazione di Azure SQL sull'autenticazione di Microsoft Entra.
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.
Trovare l'ID oggetto dell'utente di Microsoft Entra tramite
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
.Aggiungere questo utente di Microsoft Entra come amministratore di Active Directory usando il comando
az sql server ad-admin create
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 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:
- Creare una funzione di Azure nel portale come si farebbe normalmente. Accedervi nel portale.
- Scorrere verso il basso fino al gruppo Impostazioni nel riquadro di spostamento a sinistra.
- Selezionare Identità.
- All'interno della scheda Assegnata dal sistema impostare Stato su Attivato. Fare clic su Salva.
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 di 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 all'identità gestita l'accesso al database SQL
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.
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
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 la stringa di connessione SQL per le funzioni di Azure
Nel passaggio finale verrà configurata la stringa di connessione SQL della funzione di Azure per l'uso dell'autenticazione dell'identità gestita di Microsoft Entra.
Il nome dell'impostazione della stringa di connessione viene identificato nel codice di Funzioni come attributo di associazione "ConnectionStringSetting", come illustrato negli attributi e nelle annotazioni di associazione di input SQL.
Nelle impostazioni dell'applicazione dell'app per le funzioni l'impostazione della stringa di connessione SQL 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
.