Authentifier une identité managée avec Microsoft Entra ID pour accéder aux ressources Azure Service Bus

Les identités managées pour les ressources Azure fournissent aux services Azure une identité automatiquement gérée dans Microsoft Entra ID. Vous pouvez utiliser cette identité pour vous authentifier sur n’importe quel service, comme Azure Service Bus, prenant en charge l’authentification Microsoft Entra, sans avoir d’informations d’identification dans votre code. Si vous ne maîtrisez pas les identités managées, consultez Identités managées pour les ressources Azure avant de lire cet article.

Voici la procédure générale à suivre pour utiliser une identité managée afin d’accéder à une entité Service Bus :

  1. Activez une identité managée pour votre application cliente ou votre environnement. Par exemple, activez une identité managée pour votre application Azure App Service ou Azure Functions, ou une machine virtuelle sur laquelle votre application s’exécute. Voici les articles qui vous permettent d’effectuer cette étape :

  2. Attribuez un rôle Propriétaire de données Azure Service Bus, Expéditeur de données Azure Service Bus ou Destinataire de données Azure Service Bus à l’identité managée de l’étendue appropriée (abonnement Azure, groupe de ressources, espace de noms Service Bus ou file d’attente ou rubrique Service Bus). Pour obtenir des instructions sur l’attribution d’un rôle à une identité managée, consultez Attribuer des rôles Azure en tirant parti du Portail Azure.

  3. Dans votre application, utilisez l’identité managée et le point de terminaison dans l’espace de noms Service Bus pour vous connecter à l’espace de noms.

    Par exemple, dans .NET, vous utilisez le constructeur ServiceBusClient qui prend des paramètres TokenCredential et fullyQualifiedNamespace (une chaîne, par exemple : cotosons.servicebus.windows.net) pour vous connecter à Service Bus en utilisant l’identité managée. Vous transmettez DefaultAzureCredential qui dérive de TokenCredential et utilise l’identité managée. Dans DefaultAzureCredentialOptions, définissez ManagedIdentityClientId sur l’ID de l’identité managée du 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);
    

    Important

    Vous pouvez désactiver l’authentification locale ou l’authentification de clé SAS pour un espace de noms Service Bus, et autoriser uniquement l’authentification Microsoft Entra. Pour obtenir des instructions étape par étape, consultez Désactiver l’authentification locale.

Rôles Azure intégrés pour Azure Service Bus

Microsoft Entra autorise l’accès à des ressources sécurisées sur la base du contrôle d’accès en fonction du rôle Azure (RBAC Azure). Azure Service Bus définit un ensemble de rôles intégrés Azure qui englobent les ensembles courants d’autorisations utilisés pour accéder aux entités de Service Bus. Vous pouvez également définir des rôles personnalisés pour l’accès aux données.

Azure fournit les rôles Azure intégrés suivants pour autoriser l’accès à un espace de noms Service Bus :

Pour attribuer un rôle à une identité managée dans le Portail Azure, utilisez la page Contrôle d’accès (IAM). Accédez à cette page en sélectionnant Contrôle d’accès (IAM) dans la page Espace de noms Service Bus, la page File d’attente Service Bus ou la page Rubrique Service Bus. Pour obtenir des instructions pas à pas sur l’attribution d’un rôle, consultez Attribuer des rôles Azure en tirant parti du Portail Azure.

Étendue des ressources

Avant d’attribuer un rôle Azure à une identité managée, déterminez l’étendue d’accès que doit avoir l’identité managée. Selon les bonnes pratiques, il est toujours préférable d’accorder la plus petite étendue possible.

La liste suivante décrit les niveaux auxquels vous pouvez étendre l’accès aux ressources Service Bus, en commençant par la plus petite étendue :

  • File d’attente, rubrique ou abonnement : l’attribution de rôle s’applique à l’entité Service Bus spécifique.

  • Espace de noms Service Bus : l’attribution de rôle couvre toute la topologie de Service Bus sous l’espace de noms.

  • Groupe de ressources : l’attribution de rôle s’applique à toutes les ressources Service Bus sous le groupe de ressources.

  • Abonnement: l’attribution de rôle s’applique à toutes les ressources Service Bus dans tous les groupes de ressources de l’abonnement.

    Notes

    Gardez à l’esprit que la propagation des attributions de rôles Azure peut prendre cinq minutes.

Actuellement, le Portail Azure ne prend pas en charge l’affectation d’utilisateurs, de groupes ou d’identités managées aux rôles Azure Service Bus au niveau de l’abonnement de la rubrique. Voici un exemple d’utilisation de la commande Azure CLI : az-role-assignment-create pour attribuer une identité à un rôle Azure Service Bus :

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

Pour plus d’informations sur la définition des rôles intégrés, consultez Comprendre les définitions de rôles. Pour plus d’informations sur la création de rôles personnalisés Azure, consultez Rôles personnalisés Azure.

Utilisation des kits SDK

Dans .NET, l’objet ServiceBusClient est initialisé en utilisant un constructeur qui prend un espace de noms complet et un TokenCredential. DefaultAzureCredential dérive de TokenCredential qui utilise automatiquement l’identité managée configurée pour l’application. Le flux du contexte de l’identité managée vers Service Bus et l’établissement d’une liaison d’autorisation sont gérés automatiquement par les informations d’identification du jeton. C’est un modèle plus simple que l’utilisation de SAP.

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

Vous envoyez et recevez des messages comme d’habitude en utilisant ServiceBusSender et ServiceBusReceiver ou ServiceBusProcessor.

Pour obtenir des instructions détaillées sur l’envoi et la réception de messages en tirant parti d’une identité managée, consultez les démarrages rapides suivants. Ces démarrages rapides disposent du code permettant d’utiliser un principal de service pour envoyer et recevoir des messages, mais le code est le même pour l’utilisation d’une identité managée.

Notes

L’identité managée ne fonctionne qu’au sein de l’environnement Azure, d’App Services, des machines virtuelles Azure et des groupes identiques. Pour les applications .NET, la bibliothèque Microsoft.Azure.Services.AppAuthentication, utilisée par le package NuGet Service Bus, représente une abstraction sur ce protocole et prend en charge une expérience de développement local. Elle vous permet également de tester votre code localement sur votre ordinateur de développement, avec votre compte d’utilisateur issu de Visual Studio, d’Azure CLI 2.0 ou de l’authentification intégrée Azure Active Directory. Pour plus d’informations sur les options de développement local avec cette bibliothèque, voir Authentification de service à service à Azure Key Vault avec .NET.

Étapes suivantes

Consultez cet exemple d’application web .NET sur GitHub qui utilise une identité managée pour se connecter à Service Bus afin d’envoyer et de recevoir des messages. Ajoutez l’identité du service d’application au rôle Propriétaire de données Azure Service Bus.