Condividi tramite


Eseguire la migrazione di un'applicazione per usare connessioni senza password con bus di servizio di Microsoft Azure

Le richieste dell'applicazione al bus di servizio di Azure devono essere autenticate usando chiavi di accesso dell'account o connessioni senza password. Tuttavia, è consigliabile assegnare priorità alle connessioni senza password nelle applicazioni, quando possibile. Questa esercitazione illustra come eseguire la migrazione da metodi di autenticazione tradizionali a connessioni senza password più sicure.

Rischi di sicurezza associati alle chiavi di accesso

L'esempio di codice seguente illustra come connettersi al bus di servizio di Azure usando una stringa di connessione che include una chiave di accesso. Quando si crea un bus di servizio, Azure genera automaticamente queste chiavi e stringhe di connessione. Molti sviluppatori si orientano verso questa soluzione perché è familiare alle opzioni con cui hanno lavorato in passato. Se l'applicazione usa attualmente stringhe di connessione, valutare la possibilità di eseguire la migrazione a connessioni senza password usando i passaggi descritti in questo documento.

await using ServiceBusClient client = new("<CONNECTION-STRING>");

Le stringhe di connessione devono essere usate con cautela. Gli sviluppatori devono essere diligenti per non esporre mai le chiavi in una posizione non sicura. Chiunque possa accedere alla chiave è in grado di eseguire l'autenticazione. Ad esempio, se la chiave di un account viene accidentalmente inserita nel controllo sorgente, inviata tramite un messaggio di posta elettronica non sicuro, incollata nella chat sbagliata o visualizzata da qualcuno che non dovrebbe avere l'autorizzazione, c'è il rischio che un utente malintenzionato acceda all'applicazione. Prendere invece in considerazione l'aggiornamento dell'applicazione per usare connessioni senza password.

Eseguire la migrazione a connessioni senza password

Molti servizi di Azure supportano connessioni senza password tramite Microsoft Entra ID e controllo degli accessi in base al ruolo. Queste tecniche forniscono funzionalità di sicurezza affidabili e possono essere implementate usando DefaultAzureCredential dalle librerie client di Identità di Azure.

Importante

Alcuni linguaggi devono implementare DefaultAzureCredential in modo esplicito nel codice, mentre altri usano DefaultAzureCredential internamente tramite plug-in o driver sottostanti.

DefaultAzureCredential supporta più metodi di autenticazione e determina automaticamente quali devono essere usati in fase di esecuzione. Questo approccio consente all'app di usare metodi di autenticazione diversi in ambienti diversi (sviluppo locale e di produzione) senza implementare codice specifico dell'ambiente.

L'ordine e le posizioni in cui DefaultAzureCredential cerca le credenziali sono disponibili nella panoramica della libreria di identità di Azure e variano tra le lingue. Ad esempio, quando si lavora in locale con .NET, DefaultAzureCredential in genere si esegue l'autenticazione usando l'account usato dallo sviluppatore per accedere a Visual Studio, all'interfaccia della riga di comando di Azure o ad Azure PowerShell. Quando l'app viene distribuita in Azure, DefaultAzureCredential individua e usa automaticamente l'identità gestita del servizio di hosting associato, ad esempio il servizio app di Azure. Per questa transizione non sono necessarie modifiche al codice.

Nota

Un'identità gestita fornisce un'identità di sicurezza per rappresentare un'app o un servizio. L'identità viene gestita dalla piattaforma Azure e non è necessario eseguire il provisioning o ruotare alcun segreto. Per altre informazioni sulle identità gestite, vedere la documentazione di panoramica.

Nell'esempio di codice seguente viene illustrato come connettersi al bus di servizio usando connessioni senza password. La sezione successiva descrive come eseguire la migrazione a questa configurazione per un servizio specifico in modo più dettagliato.

Un'applicazione .NET può passare un'istanza di DefaultAzureCredential nel costruttore di una classe client del servizio. DefaultAzureCredential individua automaticamente le credenziali disponibili in tale ambiente.

client = new ServiceBusClient(
    "<NAMESPACE-NAME>.servicebus.windows.net",
    new DefaultAzureCredential());

Procedura per eseguire la migrazione di un'app per l'uso dell'autenticazione senza password

I passaggi seguenti illustrano come eseguire la migrazione di un'applicazione esistente per usare connessioni senza password anziché una soluzione basata su chiavi. Prima di tutto si configurerà un ambiente di sviluppo locale e quindi si applicheranno tali concetti a un ambiente di hosting di app di Azure. Questi stessi passaggi di migrazione devono essere applicati indipendentemente dall'uso diretto delle chiavi di accesso o tramite stringhe di connessione.

Configurare ruoli e utenti per l'autenticazione di attività di sviluppo in locale

Quando si sviluppa in locale, assicurarsi che l'account utente che accede al bus di servizio disponga delle autorizzazioni corrette. In questo esempio si userà il ruolo Proprietario dati del bus di servizio di Azure per inviare e ricevere dati, anche se sono disponibili ruoli più granulari. Per assegnare a se stessi questo ruolo, è necessario assegnare il ruolo Amministratore accesso utenti o un altro ruolo che include l'azione Microsoft.Authorization/roleAssignments/write. È possibile assegnare ruoli controllo degli accessi in base al ruolo di Azure a un utente usando il portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell. Per altre informazioni sugli ambiti disponibili per le assegnazioni di ruolo, vedere la pagina panoramica dell'ambito.

In questo scenario si assegneranno le autorizzazioni all'account utente con ambito a uno spazio dei nomi specifico del bus di servizio, per seguire il principio dei privilegi minimi. Questa procedura offre agli utenti solo le autorizzazioni minime necessarie e crea ambienti di produzione più sicuri.

L'esempio seguente assegnerà il ruolo di proprietario del bus di servizio di Azure all'account utente, che consente di inviare e ricevere dati.

Importante

Nella maggior parte dei casi, la propagazione dell'assegnazione di ruolo in Azure richiederà almeno due minuti, ma in rari casi può richiedere fino a otto minuti. Se si ricevono errori di autenticazione quando si esegue il codice per la prima volta, attendere alcuni istanti e riprovare.

  1. Nel portale di Azure individuare lo spazio dei nomi del bus di servizio usando la barra di ricerca principale o lo spostamento a sinistra.

  2. Nella pagina di panoramica del bus di servizio selezionare Controllo di accesso (IAM) dal menu a sinistra.

  3. Nella pagina Controllo di accesso (IAM), selezionare la scheda Assegnazioni di ruolo.

  4. Selezionare + Aggiungi dal menu in alto e quindi Aggiungi assegnazione di ruolo dal menu a discesa risultante.

    Screenshot che mostra come assegnare un ruolo.

  5. Usare la casella di ricerca per filtrare i risultati in base al ruolo desiderato. Per questo esempio, cercare Proprietario dei dati del bus di servizio di Azure e selezionare il risultato corrispondente e quindi scegliere Avanti.

  6. In Assegna accesso a selezionare Utente, gruppo o entità servizio e quindi scegliere + Seleziona membri.

  7. Nella finestra di dialogo cercare il nome utente di Microsoft Entra (in genere l'indirizzo di posta elettronica user@domain) e quindi scegliere Selezionare nella parte inferiore della finestra di dialogo.

  8. Selezionare Rivedi e assegna per passare alla pagina finale e quindi Rivedi e assegna di nuovo per completare il processo.

Accedere ed eseguire la migrazione del codice dell'app per usare connessioni senza password

Per lo sviluppo in locale, assicurarsi di essere autenticati con lo stesso account Microsoft Entra a cui è stato assegnato il ruolo per lo spazio dei nomi del bus di servizio. È possibile eseguire l'autenticazione tramite l'interfaccia della riga di comando di Azure, Visual Studio, Azure PowerShell o altri strumenti come IntelliJ.

Per lo sviluppo in locale, assicurarsi di essere autenticati con lo stesso account Microsoft Entra a cui è stato assegnato il ruolo. È possibile eseguire l'autenticazione tramite strumenti di sviluppo diffusi, ad esempio l'interfaccia della riga di comando di Azure o Azure PowerShell. Gli strumenti di sviluppo con cui è possibile eseguire l'autenticazione variano a seconda dei linguaggi.

Accedere ad Azure tramite l'interfaccia della riga di comando di Azure usando il comando seguente:

az login

Aggiornare quindi il codice per usare connessioni senza password.

  1. Per usare DefaultAzureCredential in un'applicazione .NET, installare il pacchetto Azure.Identity:

    dotnet add package Azure.Identity
    
  2. All'inizio del file aggiungere il codice seguente:

    using Azure.Identity;
    
  3. Identificare il codice che crea un oggetto ServiceBusClient per connettersi al bus di servizio di Azure. Aggiornare il codice in modo che corrisponda all'esempio seguente:

     var serviceBusNamespace = $"{namespace}.servicebus.windows.net";
     ServiceBusClient client = new(
         serviceBusNamespace,
         new DefaultAzureCredential());
    

Eseguire l'app in locale

Dopo aver apportato queste modifiche al codice, eseguire l'applicazione in locale. La nuova configurazione deve raccogliere le credenziali locali, ad esempio l'interfaccia della riga di comando di Azure, Visual Studio o IntelliJ. I ruoli assegnati all'utente sviluppatore locale in Azure consentiranno all'app di connettersi al servizio di Azure in locale.

Configurare l'ambiente di hosting di Azure

Dopo aver configurato l'applicazione per l'uso di connessioni senza password e l'esecuzione in locale, lo stesso codice può eseguire l'autenticazione ai servizi di Azure dopo la distribuzione in Azure. Ad esempio, un'applicazione distribuita in un'istanza del servizio app di Azure con un'identità gestita abilitata può connettersi al bus di servizio di Azure.

Creare l'identità gestita usando il portale di Azure

I passaggi seguenti illustrano come creare un'identità gestita assegnata dal sistema per vari servizi di hosting Web. L'identità gestita può connettersi in modo sicuro ad altri servizi di Azure usando le configurazioni dell'app configurate in precedenza.

Alcuni ambienti di hosting di app supportano Connettore di servizi, che consente di connettere i servizi di calcolo di Azure ad altri servizi di backup. Il connettore di servizi configura automaticamente le impostazioni di rete e le informazioni di connessione. Per altre informazioni su Service Connector e su quali scenari sono supportati nella pagina di panoramica.

Sono attualmente supportati i servizi di calcolo seguenti:

  • Servizio app di Azure
  • Azure Spring Cloud
  • App contenitore di Azure (anteprima)

Per questa guida alla migrazione si userà il servizio app, ma i passaggi sono simili in App Spring di Azure e nelle app contenitore di Azure.

Nota

Azure Spring Apps supporta attualmente solo il connettore di servizi usando stringhe di connessione.

  1. Nella pagina di panoramica principale del servizio app selezionare Connettore di servizi nel riquadro di spostamento a sinistra.

  2. Selezionare + Crea dal menu in alto e verrà aperto il pannello Crea connessione. Immettere i valori seguenti:

    • Tipo di servizio: scegliere Bus di servizio.
    • Sottoscrizione: selezionare la sottoscrizione da usare.
    • Nome connessione: immettere un nome per la connessione, ad esempio connector_appservice_servicebus.
    • Tipo di client: lasciare selezionato il valore predefinito o scegliere il client specifico da usare.

    Al termine, selezionare Avanti: Autenticazione.

  3. Assicurarsi che l'identità gestita assegnata dal sistema (scelta consigliata) sia selezionata e quindi scegliere Avanti: Rete.

  4. Lasciare selezionati i valori predefiniti e quindi scegliere Avanti: Rivedi e crea.

  5. Dopo aver convalidato le impostazioni di Azure, selezionare Crea.

Connettore di servizi creerà automaticamente un'identità gestita assegnata dal sistema per il servizio app. Il connettore assegnerà anche l'identità gestita a un ruolo Proprietario dati del bus di servizio di Azure per il bus di servizio selezionato.

In alternativa, è anche possibile abilitare l'identità gestita in un ambiente di hosting di Azure usando l'interfaccia della riga di comando di Azure.

È possibile usare Service Connector per creare una connessione tra un ambiente di hosting di calcolo di Azure e un servizio di destinazione usando l'interfaccia della riga di comando di Azure. L'interfaccia della riga di comando gestisce automaticamente la creazione di un'identità gestita e assegna il ruolo appropriato, come illustrato nelle istruzioni del portale.

Se si usa un servizio app di Azure, usare il comando az webapp connection:

az webapp connection create servicebus \
    --resource-group <resource-group-name> \
    --name <webapp-name> \
    --target-resource-group <target-resource-group-name> \
    --namespace <target-service-bus-namespace> \
    --system-identity

Se si usa Azure Spring Apps, usare il comando az spring connection:

az spring connection create servicebus \
    --resource-group <resource-group-name> \
    --service <service-instance-name> \
    --app <app-name> \
    --deployment <deployment-name> \
    --target-resource-group <target-resource-group> \
    --namespace <target-service-bus-namespace> \
    --system-identity

Se si usano App contenitore di Azure, usare il comando az containerapp connection:

az containerapp connection create servicebus \
    --resource-group <resource-group-name> \
    --name <webapp-name> \
    --target-resource-group <target-resource-group-name> \
    --namespace <target-service-bus-namespace> \
    --system-identity

Assegnare ruoli all'identità gestita

Successivamente, è necessario concedere le autorizzazioni all'identità gestita creata per accedere al bus di servizio. A tale scopo, è possibile assegnare un ruolo all'identità gestita, proprio come è stato fatto con l'utente di sviluppo locale.

Se i servizi sono connessi tramite il Connettore di servizi, non è necessario completare questo passaggio. Le configurazioni necessarie sono state gestite automaticamente:

  • Se è stata selezionata un'identità gestita durante la creazione della connessione, è stata creata un'identità gestita assegnata dal sistema per l'app e assegnato il ruolo Proprietario dati del bus di servizio di Azure nel bus di servizio.

  • Se è stata selezionata la stringa di connessione, la stringa di connessione è stata aggiunta come variabile di ambiente dell'app.

Testare l'app

Dopo aver apportato queste modifiche al codice, passare all'applicazione ospitata nel browser. L'app dovrebbe essere in grado di connettersi correttamente al bus di servizio. Tenere presente che la propagazione delle assegnazioni di ruolo nell'ambiente di Azure potrebbe richiedere alcuni minuti. L'applicazione è ora configurata per l'esecuzione sia in locale che in un ambiente di produzione senza che gli sviluppatori debbano gestire i segreti nell'applicazione stessa.

Passaggi successivi

In questa esercitazione si è appreso come eseguire la migrazione di un'applicazione a connessioni senza password.