Condividi tramite


Esercitazione: Connettersi ai database Azure dal Servizio App senza segreti usando un'identità gestita

App Service offre un servizio di hosting Web altamente scalabile e auto-patch in Azure. Fornisce anche un'identità gestita per la tua applicazione, che è una soluzione pronta all'uso per proteggere l'accesso ai database Azure, tra cui:

Nota

Questa esercitazione non include indicazioni per Azure Cosmos DB, che supporta l'autenticazione Microsoft Entra in modo diverso. Per altre informazioni, vedere la documentazione Azure Cosmos DB, ad esempio Usare le identità gestite assegnate dal sistema per accedere ai dati 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 indicati in precedenza dal Servizio app usando identità gestite.

Cosa imparerai:

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

Se non si ha un account Azure, creare un account free prima di iniziare.

Prerequisiti

  • Creare un'app nel servizio app in base a .NET, Node.js, Python o Java.
  • Creare un server di database con Azure SQL Database, Azure Database for MySQL o Azure Database for PostgreSQL.
  • È necessario avere familiarità con il modello di connettività standard (con nome utente e password) e potersi connettere correttamente dall'app del Servizio app al database preferito.

Preparare l'ambiente per il Azure CLI.

1. Installare l'estensione senza password del Connettore di servizi

Installare l'estensione senza password di Service Connector più recente per il Azure CLI:

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

Nota

Verificare che la versione dell'estensione "serviceconnector-passwordless" sia "2.0.2" o successiva eseguendo az version. Potrebbe essere necessario aggiornare Azure CLI prima di aggiornare la versione dell'estensione.

2. Creare una connessione senza password

Creare quindi una connessione senza password con Connettore di servizi.

Suggerimento

Il portale di Azure consente di comporre i comandi seguenti. Nel portale di Azure passare alla risorsa Azure App Service, selezionare Service Connector 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 per usarlo nell'interfaccia della riga di comando o eseguirlo in Azure Cloud Shell.

Il comando Azure CLI seguente usa un parametro --client-type.

  1. Facoltativamente, eseguire az webapp connection create sql -h per 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 di Connettore servizio 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 Azure App Service.
  • Impostare l'amministratore Microsoft Entra sull'utente connesso corrente.
  • Aggiungere un utente del database per l'identità gestita assegnata al sistema o assegnata dall'utente. Concedere a questo utente tutti i privilegi del database <database-name>. Il nome utente è disponibile nella connection string nell'output del comando precedente.
  • Impostare le configurazioni denominate AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRING o AZURE_SQL_CONNECTIONSTRING alla risorsa Azure in base al tipo di database.
  • Per il servizio app, le configurazioni vengono impostate nel pannello Impostazioni app .

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. Ottieni la stringa di connessione di Azure SQL Database dalla variabile di ambiente aggiunta da Service Connector.

    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 Using Active Directory Managed Identity Authentication.

Per ulteriori informazioni, vedere pagina iniziale per la programmazione del client su Microsoft SQL Server. Per altri esempi di codice, vedere Creare una connessione senza password a un servizio di database tramite Connettore di servizi.

4. Configurare l'ambiente di sviluppo

Questo codice di esempio usa DefaultAzureCredential per ottenere un token utilizzabile per il database Azure da Microsoft Entra ID e quindi lo aggiunge alla connessione al database. Anche se è possibile personalizzare DefaultAzureCredential, è già versatile di default. Ottiene un token dall'utente Microsoft Entra connesso o da un'identità gestita, a seconda che venga eseguito in locale nell'ambiente di sviluppo o nel 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 necessita di un utente connesso Microsoft Entra. In questo passaggio si configura l'ambiente preferito accedendo con l'utente Microsoft Entra.

  1. Visual Studio per Windows è integrato con l'autenticazione di Microsoft Entra. Per abilitare lo sviluppo e il debug in Visual Studio, aggiungere l'utente Microsoft Entra in Visual Studio selezionando File>Impostazioni account dal menu e selezionare Sign in or Add.

  2. Per impostare l'utente Microsoft Entra per l'autenticazione del servizio Azure, selezionare Tools>Options dal menu, quindi selezionare Azure Service Authentication>Account Selection. Selezionare l'utente Microsoft Entra aggiunto e selezionare OK.

Per ulteriori 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 Microsoft Entra l'autenticazione.

5. Testare e pubblicare

  1. Eseguire il codice nell'ambiente di sviluppo. Il codice usa l'utente Microsoft Entra connesso 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 App Service, il tuo codice utilizza l'identità gestita dell'app per connettersi al database di back-end.

Domande frequenti

L'identità gestita supporta SQL Server?

Sì. Per altre informazioni, vedi:

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 Azure.

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

Anche i servizi back-end delle identità gestite gestiscono una cache di token che aggiorna il token per una risorsa di destinazione solo quando scade. Se si tenta di modificare la configurazione dopo aver provato a ottenere un token con l'applicazione, non si otterrà 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.

Come si aggiunge l'identità gestita a un gruppo di Microsoft Entra?

Se si vuole, è possibile aggiungere l'identità a un gruppo Microsoft Entra, quindi concedere l'accesso al gruppo di 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 di 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.

La connessione al database Azure richiede impostazioni aggiuntive e non rientra nell'ambito di questa esercitazione. Per ulteriori informazioni, vedere uno degli link seguenti:

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

Ho creato l'app con il modello App Web + Database e ora non posso configurare una connessione identità gestita con i comandi di Connettore di servizi.

Service Connector richiede l'accesso alla rete al database per concedere l'accesso all'identità dell'app. Quando si crea un'architettura di database e app sicura per impostazione predefinita nel portale di Azure con il modello App Web e database, l'architettura blocca l'accesso alla rete al database e consente solo le connessioni dall'interno della rete virtuale. È anche vero per Azure Cloud Shell. Tuttavia, è possibile deploy Cloud Shell nella rete virtuale, quindi eseguire il comando Service Connector in tale Cloud Shell.

Passaggi successivi

Cosa hai appreso:

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