Compartir vía


Autenticación de una identidad administrada con Microsoft Entra ID para acceder a recursos de Azure Service Bus

Las identidades administradas de los recursos de Azure proporcionan a los servicios de Azure una identidad administrada automáticamente en Microsoft Entra ID. Puede usar esta identidad para autenticarse a cualquier servicio, como Azure Service Bus, que admita la autenticación de Microsoft Entra sin necesidad de tener credenciales en el código. Si no está familiarizado con las identidades administradas, consulte Identidades administradas para recursos de Azure antes de continuar leyendo este artículo.

Estos son los pasos generales para usar identidades administradas para acceder a entidades de Service Bus:

  1. Habilite la identidad administrada para la aplicación cliente o el entorno. Por ejemplo, habilite la identidad administrada para la aplicación de Azure App Service, la aplicación de Azure Functions o una máquina virtual en la que se ejecute la aplicación. Estos son los artículos que le ayudarán con este paso:

  2. Asigne el rol Propietario de datos de Azure Service Bus, Remitente de datos de Azure Service Bus o Receptor de datos de Azure Service Bus a la identidad administrada en el ámbito adecuado (suscripción de Azure, grupo de recursos, espacio de nombres de Service Bus o cola o tema de Service Bus). Para obtener instrucciones para asignar un rol a una identidad administrada, consulte Asignación de roles de Azure mediante Azure Portal.

  3. En la aplicación, use la identidad administrada y el punto de conexión al espacio de nombres de Service Bus para conectarse al espacio de nombres.

    Por ejemplo, en .NET se usa el constructor ServiceBusClient que toma los parámetros TokenCredential y fullyQualifiedNamespace (una cadena, por ejemplo: cotosons.servicebus.windows.net) para conectarse a Service Bus mediante la identidad administrada. Pase DefaultAzureCredential, que deriva de TokenCredential y usa la identidad administrada. En DefaultAzureCredentialOptions, establezca en ManagedIdentityClientId el identificador de la identidad administrada del cliente.

    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

    Puede deshabilitar la autenticación de clave SAS o local para un espacio de nombres de Service Bus y permitir solo la autenticación de Microsoft Entra. Para instrucciones paso a paso, consulte Deshabilitación de la autenticación local.

Roles integrados de Azure para Azure Service Bus

Microsoft Entra autoriza el acceso a recursos protegidos mediante el control de acceso basado en roles de Azure (RBAC). Azure Service Bus define un conjunto de roles integrados de Azure que abarcan conjuntos comunes de permisos utilizados para acceder a las entidades de Service Bus. También puede definir roles personalizados para acceder a los datos.

Azure proporciona los siguientes roles integrados de Azure para autorizar el acceso a un espacio de nombres de Service Bus:

Para asignar un rol a una identidad administrada en Azure Portal, use la página Control de acceso (IAM). Para ir a esta página, seleccione Control de acceso (IAM) en la página Espacio de nombres de Service Bus, en la página Cola de Service Bus o en la página Temas de Service Bus. Para obtener instrucciones paso a paso para asignar un rol, consulte Asignación de roles de Azure con Azure Portal.

Ámbito de recursos

Antes de asignar un rol de Azure a una identidad administrada, determine el ámbito de acceso que debería tener la identidad administrada. Los procedimientos recomendados dictan que siempre es mejor conceder únicamente el ámbito más restringido posible.

En la lista siguiente se describen los niveles en los que puede definir el ámbito de acceso a recursos Service Bus, empezando por el ámbito más restringido:

  • Cola, tema o suscripción: la asignación de roles se aplica a la entidad de Service Bus específica.

  • Espacio de nombres de Service Bus: la asignación de roles abarca toda la topología de Service Bus en el espacio de nombres.

  • Grupo de recursos: la asignación de roles se aplica a todos los recursos de Service Bus del grupo de recursos.

  • Suscripción: la asignación de roles se aplica a todos los recursos de Service Bus de todos los grupos de recursos de la suscripción.

    Nota

    Tenga en cuenta que las asignaciones de roles de Azure pueden tardar hasta cinco minutos en propagarse.

Actualmente, Azure Portal no admite la asignación de usuarios, grupos o identidades administradas a los roles de Azure de Service Bus en el nivel de suscripción de temas. Este es un ejemplo del uso del comando de la CLI de Azure az-role-assignment-create para asignar una identidad a un rol de Azure de 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

Para más información sobre cómo se definen los roles integrados, consulte Descripción de definiciones de roles. Para más información acerca de la creación de roles personalizados de Azure, consulte Roles personalizados de Azure.

Uso de SDK

En .NET, el objeto ServiceBusClient se inicializa mediante un constructor que toma un espacio de nombres completo y un TokenCredential. DefaultAzureCredential deriva de TokenCredential, que usa automáticamente la identidad administrada configurada para la aplicación. La credencial de token controla automáticamente el flujo del contexto de la identidad administrada a Service Bus y el protocolo de enlace de autorización. Es un modelo más sencillo que si se usa SAS.

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

Puede enviar y recibir mensajes como de costumbre mediante ServiceBusSender y ServiceBusReceiver, o bien ServiceBusProcessor.

Para obtener instrucciones detalladas para enviar y recibir mensajes mediante identidades administradas, consulte los siguientes inicios rápidos. Estos inicios rápidos tienen el código para usar entidades de servicio para enviar y recibir mensajes, pero el código es el mismo para usar identidades administradas.

Nota

La identidad administrada solo funciona en el entorno de Azure, en servicios de aplicaciones, en máquinas virtuales de Azure y en conjuntos de escalado. En el caso de las aplicaciones de .NET, la biblioteca Microsoft.Azure.Services.AppAuthentication, que es la que usa el paquete NuGet de Service Bus, proporciona una abstracción sobre este protocolo y admite una experiencia de desarrollo local. Esta biblioteca también permite probar el código localmente en una máquina de desarrollo, con su cuenta de usuario de Visual Studio, la CLI de Azure 2.0 o la autenticación integrada de Active Directory. Para más información acerca de las opciones de desarrollo local con esta biblioteca, consulte Autenticación entre servicios en Azure Key Vault mediante .NET.

Pasos siguientes

Consulte este ejemplo de aplicación web de .NET en GitHub, que usa una identidad administrada para conectarse a Service Bus para enviar y recibir mensajes. Agregue la identidad del servicio de aplicaciones al rol Propietario de datos de Azure Service Bus.