Autenticare un'identità gestita con Microsoft Entra ID per accedere alle risorse del bus di servizio di Azure

Le identità gestite per le risorse di Azure offrono ai servizi di Azure un'identità gestita automaticamente in Microsoft Entra ID. È possibile usare questa identità per l'autenticazione a qualsiasi servizio, ad esempio il bus di servizio di Azure, che supporti l'autenticazione di Microsoft Entra senza dover inserire le credenziali nel codice. Se non si ha familiarità con le identità gestite, vedere Identità gestite per le risorse di Azure prima di continuare a leggere questo articolo.

Ecco i passaggi generali per usare un'identità gestita per accedere a un'entità del bus di servizio:

  1. Abilitare l'identità gestita per l'app client o l'ambiente. Ad esempio, abilitare l'identità gestita per l'app del servizio app di Azure, l'app di Funzioni di Azure o una macchina virtuale in cui è in esecuzione l'app. Ecco gli articoli utili per questo passaggio:

  2. Assegnare il ruolo Proprietario dei dati del bus di servizio di Azure, Mittente dei dati del bus di servizio di Azure o Ricevitore dei dati del bus di servizio di Azure all'identità gestita nell'ambito appropriato, ovvero sottoscrizione di Azure, gruppo di risorse, spazio dei nomi del bus di servizio oppure coda o argomento del bus di servizio. Per istruzioni sull'assegnazione di un ruolo a un'identità gestita, vedere Assegnare ruoli di Azure usando il portale di Azure.

  3. Nell'applicazione usare l'identità gestita e l'endpoint per lo spazio dei nomi del bus di servizio per connettersi allo spazio dei nomi.

    Ad esempio, in .NET si usa il costruttore ServiceBusClient, che accetta i parametri TokenCredential e fullyQualifiedNamespace (una stringa, ad esempio: cotosons.servicebus.windows.net) per connettersi al bus di servizio usando l'identità gestita. Passare DefaultAzureCredential, che deriva da TokenCredential e usa l'identità gestita. In DefaultAzureCredentialOptions impostare ManagedIdentityClientId sull'ID dell'identità gestita del client.

    string fullyQualifiedNamespace = "<your namespace>.servicebus.windows.net>";
    string userAssignedClientId = "<your managed identity client ID>";
    
    var credential = new DefaultAzureCredential(
        new DefaultAzureCredentialOptions
        {
            ManagedIdentityClientId = userAssignedClientId
        });
    
    var sbusClient = new ServiceBusClient(fullyQualifiedNamespace, credential);
    

    Importante

    È possibile disabilitare l'autenticazione della chiave SAS o locale per uno spazio dei nomi del Bus di servizio e consentire solo l'autenticazione di Microsoft Entra. Per istruzioni dettagliate, vedere Disabilitare l'autenticazione locale.

Ruoli predefiniti di Azure per il bus di servizio di Azure

Microsoft Entra autorizza i diritti di accesso alle risorse protette tramite il controllo degli accessi in base al ruolo di Azure. Il bus di servizio di Azure definisce un set di ruoli predefiniti di Azure che includono set comuni di autorizzazioni usate per accedere alle entità del bus di servizio. È anche possibile definire ruoli personalizzati per l'accesso ai dati.

Azure fornisce i ruoli predefiniti di Azure seguenti per autorizzare l'accesso a uno spazio dei nomi del bus di servizio:

Per assegnare un ruolo a un'identità gestita nel portale di Azure, usare la pagina Controllo di accesso (IAM). Passare a questa pagina selezionando Controllo di accesso (IAM) nella pagina Spazio dei nomi del bus di servizio o nella pagina Coda del bus di servizio o nella pagina Argomento del bus di servizio. Per istruzioni dettagliate per l'assegnazione di un ruolo, vedere Assegnare ruoli di Azure tramite il portale di Azure.

Ambito risorsa

Prima di assegnare un ruolo di Azure a un'identità gestita, determinare l'ambito dell'accesso che l'identità gestita deve avere. In base alle procedure consigliate, è sempre preferibile concedere solo l'ambito più restrittivo possibile.

L'elenco seguente descrive i livelli in cui è possibile definire l'ambito dell'accesso alle risorse del bus di servizio, a partire dall'ambito più restrittivo:

  • Coda, argomento o sottoscrizione: l'assegnazione di ruolo si applica all'entità del bus di servizio specifica.

  • Spazio dei nomi del bus di servizio: l'assegnazione di ruolo si estende sull'intera topologia del bus di servizio nello spazio dei nomi.

  • Gruppo di risorse: l'assegnazione di ruolo si applica a tutte le risorse del bus di servizio nel gruppo di risorse.

  • Sottoscrizione: l'assegnazione di ruolo si applica a tutte le risorse del bus di servizio in tutti i gruppi di risorse nella sottoscrizione.

    Nota

    Tenere presente che la propagazione delle assegnazioni di ruolo di Azure può richiedere fino a cinque minuti.

Attualmente il portale di Azure non supporta l'assegnazione di utenti, gruppi o identità gestite ai ruoli del bus di servizio di Azure a livello di sottoscrizione dell'argomento. Ecco un esempio di uso del comando az-role-assignment-create dell'interfaccia della riga di comando di Azure per assegnare un'identità a un ruolo del bus di servizio di Azure:

az role assignment create \
    --role $service_bus_role \
    --assignee $assignee_id \
    --scope /subscriptions/$subscription_id/resourceGroups/$resource_group/providers/Microsoft.ServiceBus/namespaces/$service_bus_namespace/topics/$service_bus_topic/subscriptions/$service_bus_subscription

Per altre informazioni sul modo in cui vengono definiti i ruoli predefiniti, vedere Informazioni sulle definizioni di ruolo. Per informazioni sulla creazione di ruoli personalizzati di Azure, consultare Ruoli personalizzati di Azure.

Uso di SDK

In .NET l'oggetto ServiceBusClient viene inizializzato usando un costruttore che accetta uno spazio dei nomi completo e un oggetto TokenCredential. DefaultAzureCredential deriva da TokenCredential, che usa automaticamente l'identità gestita configurata per l'app. Il flusso del contesto dell'identità gestita nel bus di servizio e l'handshake di autorizzazione vengono gestiti automaticamente dalle credenziali del token. Questo modello è più semplice rispetto all'uso della firma di accesso condiviso.

var client = new ServiceBusClient('cotosons.servicebus.windows.net', new DefaultAzureCredential());

I messaggi si inviano e si ricevono come di consueto tramite ServiceBusSender e ServiceBusReceiver o ServiceBusProcessor.

Per istruzioni dettagliate su come inviare e ricevere messaggi usando un'identità gestita, vedere gli argomenti di avvio rapido seguenti. Questi argomenti di avvio rapido includono il codice per usare un'entità servizio per inviare e ricevere messaggi, ma il codice è lo stesso per l'uso di un'identità gestita.

Nota

L'identità gestita funziona solo all'interno dell'ambiente di Azure, nei servizi app, nelle macchine virtuali di Azure e nei set di scalabilità. Per le applicazioni .NET, la libreria Microsoft.Azure.Services.AppAuthentication, usata dal pacchetto NuGet del bus di servizio, rappresenta un'astrazione di questo protocollo e supporta un'esperienza di sviluppo locale. Questa libreria consente anche di testare il codice in locale nel computer di sviluppo usando l'account utente da Visual Studio, dall'interfaccia della riga di comando di Azure 2.0 o tramite l'autenticazione integrata di Active Directory. Per altre informazioni sulle opzioni di sviluppo locale con questa libreria, vedere Autenticazione da servizio a servizio ad Azure Key Vault usando .NET.

Passaggi successivi

Vedere questo esempio di applicazione Web .NET in GitHub, che usa un'identità gestita per connettersi al bus di servizio per l'invio e la ricezione di messaggi. Aggiungere l'identità del servizio app al ruolo Proprietario dei dati del bus di servizio di Azure.