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:
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:
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.
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
yfullyQualifiedNamespace
(una cadena, por ejemplo:cotosons.servicebus.windows.net
) para conectarse a Service Bus mediante la identidad administrada. Pase DefaultAzureCredential, que deriva deTokenCredential
y usa la identidad administrada. EnDefaultAzureCredentialOptions
, establezca enManagedIdentityClientId
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:
- Propietario de los datos de Azure Service Bus: use este rol para permitir el acceso total al espacio de nombres de Service Bus y a sus entidades (colas, temas, suscripciones y filtros).
- Remitente de los datos de Azure Service Bus: use este rol para permitir el envío de mensajes a las colas y los temas de Service Bus.
- Receptor de los datos de Azure Service Bus: use este rol para permitir la recepción de mensajes de las colas y las suscripciones 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.