Esercitazione: Connessione ai database di Azure da servizio app senza segreti usando un'identità gestita

Il Servizio app fornisce un servizio di hosting Web ad alta scalabilità e con funzioni di auto-correzione in Azure. Fornisce anche un'identità gestita per l'app, che è una soluzione chiave per proteggere l'accesso ai database di Azure, tra cui:

Nota

Questa esercitazione non include indicazioni per Azure Cosmos DB, che supporta l'autenticazione di Microsoft Entra in modo diverso. Per altre informazioni, vedere la documentazione di Azure Cosmos DB, ad esempio Usare identità gestite assegnate dal sistema per accedere ai dati di Azure Cosmos DB.

Le identità gestite nel servizio app rendono l'app più sicura eliminando i segreti dall'app, ad esempio le credenziali nelle stringhe di connessione. Questa esercitazione illustra come connettersi ai database menzionati in precedenza da servizio app usando identità gestite.

Contenuto dell'esercitazione:

  • Configurare un utente di Microsoft Entra come amministratore per il database di Azure.
  • Connessione al database come utente di Microsoft Entra.
  • Configurare un'identità gestita assegnata dal sistema o assegnata dall'utente per un'app servizio app.
  • Concedere l'accesso al database all'identità gestita.
  • Connessione al database di Azure dal codice (.NET Framework 4.8, .NET 6, Node.js, Python, Java) usando un'identità gestita.
  • Connessione al database di Azure dall'ambiente di sviluppo usando l'utente di Microsoft Entra.

Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.

Prerequisiti

  • Creare un'app in servizio app basata su .NET, Node.js, Python o Java.
  • Creare un server di database con database SQL di Azure, Database di Azure per MySQL o Database di Azure per PostgreSQL.
  • Si dovrebbe avere familiarità con il modello di connettività standard (con nome utente e password) e potersi connettere correttamente dall'app servizio app al database preferito.

Preparare l'ambiente per l'interfaccia della riga di comando di Azure.

1. Installare l'estensione senza password del servizio Connessione or

Installare l'estensione senza password del servizio Connessione or per l'interfaccia della riga di comando di Azure:

az extension add --name serviceconnector-passwordless --upgrade

2. Creare una connessione senza password

Creare quindi una connessione senza password con Service Connessione or.

Suggerimento

Il portale di Azure può essere utile per comporre i comandi seguenti. Nella portale di Azure passare alla risorsa del servizio app Azure, selezionare Service Connessione or (Servizio) dal menu a sinistra e selezionare Crea. Compilare il modulo con tutti i parametri obbligatori. Azure genera automaticamente il comando di creazione della connessione, che è possibile copiare da usare nell'interfaccia della riga di comando o eseguire in Azure Cloud Shell.

Il comando seguente dell'interfaccia della riga di comando di Azure usa un --client-type parametro .

  1. Facoltativamente, eseguire per az webapp connection create sql -h ottenere i tipi di client supportati.

  2. Scegliere un tipo di client ed eseguire il comando corrispondente. Sostituire i segnaposto seguenti con le proprie informazioni.

    az webapp connection create sql \
        --resource-group <group-name> \
        --name <server-name> \
        --target-resource-group <sql-group-name> \
        --server <sql-name> \
        --database <database-name> \
        --user-identity client-id=<client-id> subs-id=<subscription-id> \
        --client-type <client-type>
    

Questo comando service Connessione or completa le attività seguenti in background:

  • Abilitare l'identità gestita assegnata dal sistema o assegnare un'identità utente per l'app <server-name> ospitata da app Azure Servizio.
  • Impostare l'amministratore di Microsoft Entra sull'utente connesso corrente.
  • Aggiungere un utente del database per l'identità gestita assegnata dal sistema o l'identità gestita assegnata dall'utente. Concedere a questo utente tutti i privilegi del database <database-name> . Il nome utente è disponibile nella stringa di connessione nell'output del comando precedente.
  • Impostare le configurazioni denominate AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRINGo AZURE_SQL_CONNECTIONSTRING sulla risorsa di Azure in base al tipo di database.
  • Per servizio app, le configurazioni vengono impostate nel pannello App Impostazioni.

Se si verificano problemi durante la creazione di una connessione, vedere Risoluzione dei problemi per assistenza.

3. Modificare il codice

  1. Installare le dipendenze.

    dotnet add package Microsoft.Data.SqlClient
    
  2. Ottenere il database SQL di Azure stringa di connessione dalla variabile di ambiente aggiunta da Service Connessione or.

    using Microsoft.Data.SqlClient;
    
    // AZURE_SQL_CONNECTIONSTRING should be one of the following:
    // For system-assigned managed identity:"Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;TrustServerCertificate=True"
    // For user-assigned managed identity: "Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;User Id=<client-id-of-user-assigned-identity>;TrustServerCertificate=True"
    
    string connectionString = 
        Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")!;
    
    using var connection = new SqlConnection(connectionString);
    connection.Open();
    

    Per altre informazioni, vedere Uso dell'autenticazione dell'identità gestita di Active Directory.

Per altre informazioni, vedere Home page per la programmazione client in Microsoft SQL Server. Per altri esempi di codice, vedere Creare una connessione senza password a un servizio di database tramite Service Connessione or.

4. Configurare l'ambiente di sviluppo

Questo codice di esempio usa DefaultAzureCredential per ottenere un token utilizzabile per il database di Azure dall'ID Microsoft Entra e quindi lo aggiunge alla connessione al database. Anche se è possibile personalizzare DefaultAzureCredential, è già versatile per impostazione predefinita. Ottiene un token dall'utente Microsoft Entra connesso o da un'identità gestita, a seconda che venga eseguito localmente nell'ambiente di sviluppo o in servizio app.

Senza ulteriori modifiche, il codice è pronto per l'esecuzione in Azure. Per eseguire il debug del codice in locale, tuttavia, l'ambiente di sviluppo richiede un utente connesso a Microsoft Entra. In questo passaggio si configura l'ambiente preferito accedendo con l'utente di Microsoft Entra.

  1. Visual Studio per Windows è integrato con l'autenticazione Microsoft Entra. Per abilitare lo sviluppo e il debug in Visual Studio, aggiungere l'utente Microsoft Entra in Visual Studio selezionando Account file>Impostazioni dal menu e selezionare Accedi o Aggiungi.

  2. Per impostare l'utente di Microsoft Entra per l'autenticazione del servizio di Azure, selezionare Strumenti>Opzioni dal menu e quindi selezionare Selezione dell'account di autenticazione del>servizio di Azure. Selezionare l'utente di Microsoft Entra aggiunto e selezionare OK.

Per altre informazioni sulla configurazione dell'ambiente di sviluppo per l'autenticazione di Microsoft Entra, vedere Libreria client di Identità di Azure per .NET.

A questo punto è possibile sviluppare ed eseguire il debug dell'app con il database SQL come back-end, usando l'autenticazione di Microsoft Entra.

5. Testare e pubblicare

  1. Eseguire il codice nell'ambiente di sviluppo. Il codice usa l'utente connesso di Microsoft Entra nell'ambiente per connettersi al database back-end. L'utente può accedere al database perché è configurato come amministratore di Microsoft Entra per il database.

  2. Pubblicare il codice in Azure usando il metodo di pubblicazione preferito. In servizio app il codice usa l'identità gestita dell'app per connettersi al database back-end.

Domande frequenti

L'identità gestita supporta SQL Server?

L'ID Microsoft Entra e le identità gestite non sono supportate per SQL Server locale.

Viene visualizzato l'errore Login failed for user '<token-identified principal>'.

L'identità gestita per cui si sta tentando di richiedere un token non è autorizzata ad accedere al database di Azure.

Sono state apportate modifiche all'autenticazione servizio app o alla registrazione dell'app associata. Perché si ottiene ancora il vecchio token?

I servizi back-end delle identità gestite mantengono anche una cache dei token che aggiorna il token per una risorsa di destinazione solo quando scade. Se si modifica la configurazione dopo aver tentato di ottenere un token con l'app, non si ottiene effettivamente un nuovo token con le autorizzazioni aggiornate fino alla scadenza del token memorizzato nella cache. Il modo migliore per risolvere questo problema consiste nel testare le modifiche con una nuova finestra InPrivate (Edge)/privata (Safari)/Incognito (Chrome). In questo modo, si è sicuri di iniziare da una nuova sessione autenticata.

Ricerca per categorie aggiungere l'identità gestita a un gruppo Microsoft Entra?

Se si vuole, è possibile aggiungere l'identità a un gruppo Microsoft Entra, quindi concedere l'accesso al gruppo Microsoft Entra anziché all'identità. Ad esempio, i comandi seguenti aggiungono l'identità gestita del passaggio precedente a un nuovo gruppo denominato myAzureSQLDBAccessGroup:

groupid=$(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
msiobjectid=$(az webapp identity show --resource-group <group-name> --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid

Per concedere le autorizzazioni di database per un gruppo Microsoft Entra, vedere la documentazione relativa al tipo di database corrispondente.

Viene visualizzato l'errore SSL connection is required. Please specify SSL options and retry.

Connessione al database di Azure richiede impostazioni aggiuntive ed esula dall'ambito di questa esercitazione. Per altre informazioni, vedere uno dei collegamenti seguenti:

Configurare la connettività TLS in Database di Azure per PostgreSQL - Server singoloConfigurare la connettività SSL nell'applicazione per connettersi in modo sicuro a Database di Azure per MySQL

Passaggi successivi

Contenuto dell'esercitazione:

  • Configurare un utente di Microsoft Entra come amministratore per il database di Azure.
  • Connessione al database come utente di Microsoft Entra.
  • Configurare un'identità gestita assegnata dal sistema o assegnata dall'utente per un'app servizio app.
  • Concedere l'accesso al database all'identità gestita.
  • Connessione al database di Azure dal codice (.NET Framework 4.8, .NET 6, Node.js, Python, Java) usando un'identità gestita.
  • Connessione al database di Azure dall'ambiente di sviluppo usando l'utente di Microsoft Entra.