Share via


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

Le richieste dell'applicazione a 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

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

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

Connessione 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 una chiave dell'account viene accidentalmente archiviata nel controllo del codice sorgente, inviata tramite un messaggio di posta elettronica non sicuro, incollata nella chat sbagliata o visualizzata da un utente che non deve avere l'autorizzazione, esiste 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 le 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 produzione) senza implementare codice specifico dell'ambiente.

L'ordine e le posizioni in cui DefaultAzureCredential cercare 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 app Azure Servizio. 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 a 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.

ServiceBusClient serviceBusClient = new(
    new Uri($"https://{serviceBusNamespace}.blob.core.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 stringa di connessione.

Configurare ruoli e utenti per l'autenticazione di sviluppo locale

Quando si sviluppa in locale, assicurarsi che l'account utente che accede a bus di servizio disponga delle autorizzazioni corrette. In questo esempio si userà il ruolo di proprietario dei dati 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 Accesso utente Amministrazione istrator 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 di panoramica dell'ambito.

In questo scenario si assegneranno le autorizzazioni all'account utente con ambito a uno spazio dei nomi bus di servizio specifico, 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 dei dati di 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. Nella portale di Azure individuare lo spazio dei nomi bus di servizio usando la barra di ricerca principale o lo spostamento a sinistra.

  2. Nella pagina di panoramica 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.

    A screenshot showing how to assign a role.

  5. Usare la casella di ricerca per filtrare i risultati in base al ruolo desiderato. Per questo esempio, cercare bus di servizio di Azure Proprietario dati 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 Seleziona nella parte inferiore della finestra di dialogo.

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

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

Per lo sviluppo locale, assicurarsi di essere autenticati con lo stesso account Microsoft Entra a cui è stato assegnato il ruolo per lo spazio dei nomi 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 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 Azure.Identity pacchetto:

    dotnet add package Azure.Identity
    
  2. Nella parte superiore del file aggiungere il codice seguente:

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

     var serviceBusNamespace = $"https://{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 di sviluppo 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 Azure con un'identità gestita abilitata può connettersi a 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 service Connessione or, che consente di connettere i servizi di calcolo di Azure ad altri servizi di backup. Service Connessione or configura automaticamente le impostazioni di rete e le informazioni di connessione. Per altre informazioni, vedere Service Connessione or e quali scenari sono supportati nella pagina di panoramica.

Sono attualmente supportati i servizi di calcolo seguenti:

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

Per questa guida alla migrazione si useranno 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 Connessione or del servizio usando stringa di connessione s.

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

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

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

    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.

Il Connessione or del servizio creerà automaticamente un'identità gestita assegnata dal sistema per il servizio app. Il connettore assegnerà anche l'identità gestita a un ruolo di proprietario dati 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 Connessione or 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 Azure, usare il az webapp connection comando :

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 az spring connection comando :

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 di Azure Container, usare il az containerapp connection comando :

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 stati connessi usando il Connessione or del servizio, 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 ed è stato assegnato il ruolo proprietario dati bus di servizio di Azure nel bus di servizio.

  • Se è stata selezionata stringa di connessione, il stringa di connessione è stato aggiunto 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 dover gestire i segreti nell'applicazione stessa.

Passaggi successivi

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