Problema de autenticación con EventHub

Terzan Gomez, Daniel 0 Reputation points
2026-05-28T22:44:56.8966667+00:00

Escribo para hacer una consulta acerca de la integración de nuestros microservicios nest (que usan kafkajs) desplegados en aks con eventHub. Creamos un namespace en eventHub y creamos todos los tópicos que utilizan nuestros microservicios. Además creamos una shared access policy con permisos Manage para que nuestros microservicios usen su primary connection string para autenticarse. 

Sin embargo, cada vez que se inicializa un microservicio obtengo un error de SaslAuthenticate: "Not Authorized to access topics". Los microservicios están configurados para reintentar la conexión con timeouts de 20 segundos y reintentos cada 30, 60, 90 120,150 y 180 segundos. Generalmente se logran conectar en el tercer reintento. Por lo que asumo que puede ser un problema de red, dado que descartamos que sea problema de credenciales ya que funcionan en el tercer intento de autenteicación. Por otra parte, también recibimos error de autorización para publicar en un eventHub o para que el microservicios se suscriba.

¿Existe algún issue asociado a eventHub (kafka) y rate limits? hemos validado la configuración del namespace de eventHub, los tópicos y la configuración de los microservicios con copilot para evitar errores humanos, pero el problema persiste.

Adjunto captura de pantalla con logs del inicio de uno de los microservicios.User's image

Qedamos atentos a sus comentarios y a cualquier antecedentes que podamos aportar para que nos puedan ayudar a solucionar este problema.

Azure Event Hubs

1 answer

Sort by: Most helpful
  1. AI answer

    2026-05-28T22:45:23.56+00:00

    El patrón de errores de SaslAuthenticate: Not Authorized to access topics en los primeros intentos y éxito en reintentos posteriores encaja más con problemas de autenticación/autorización SAS (token) que con un rate limit específico de Event Hubs for Kafka.

    Puntos a revisar y acciones concretas:

    1. Validar la clave SAS y permisos
      • Asegurar que la Shared Access Policy usada en la connection string:
        • Es la correcta (nombre de la policy y key coinciden con el namespace o el event hub/topic que se está usando).
        • Tiene los permisos adecuados:
          • Para publicar: al menos Send.
          • Para consumir: al menos Listen.
          • Manage incluye Send y Listen, pero si se creó una policy distinta a la que usan los microservicios, podrían estar usando una clave sin permisos suficientes.
      • Verificar que la policy esté configurada en el namespace o en el event hub/topic correcto. Una policy a nivel namespace da acceso a todos los entities de ese namespace; una policy a nivel entidad solo a ese event hub/topic.
    2. Revisar expiración y ventana de tiempo del token SAS
      • Si los microservicios generan tokens SAS a partir de la connection string, revisar:
        • Que el token no esté expirado o a punto de expirar al momento de usarse.
        • Que no se esté configurando un start time del token igual a “ahora”. Esto puede causar fallos intermitentes por clock skew entre el cliente (AKS) y Event Hubs.
      • Recomendaciones del servicio:
        • Renovar el token bastante antes de la expiración.
        • Si se usa start time, establecerlo al menos 15 minutos en el pasado o no establecerlo.
        • Considerar que la implementación de cliente suele renovar el token 5 minutos antes de expirar; si el desfase de reloj es mayor a 5 minutos, se pueden ver fallos intermitentes de autenticación.
    3. Confirmar que el recurso del token coincide con el namespace/topic
      • El token SAS se genera sobre un resource URI concreto (namespace o entidad). Ese URI debe:
        • Estar correctamente percent-encoded.
        • Corresponder al namespace o al event hub/topic al que se conecta kafkajs.
      • Un token generado para el namespace (sb://<namespace>.servicebus.windows.net/) es válido para todos los recursos que empiezan con ese prefijo. Si se genera para una entidad concreta, solo será válido para esa entidad.
    4. Comportamiento de autorización con SAS
      • Para publishers (productores):
        • Deben usar un token SAS firmado con una policy que tenga Send sobre el namespace o el event hub/topic.
        • Si se usan publishers “virtuales” (uno por cliente), cada token solo permite enviar a su publisher asociado.
      • Para consumidores (suscripciones):
        • Deben tener Manage o Listen sobre el namespace o el event hub/topic.
        • La granularidad SAS es a nivel de entidad, no de consumer group; los permisos de la entidad se aplican a todos los consumer groups.
    5. Descartar bloqueo por deshabilitar SAS/local auth
      • Verificar en el namespace de Event Hubs que Local Authentication (SAS keys) no esté deshabilitado.
      • Si disableLocalAuth está en true, solo funcionará autenticación con Microsoft Entra ID; cualquier intento con SAS fallará.
    6. Considerar migrar a Microsoft Entra ID / Managed Identity
      • Para reducir problemas de manejo de claves y tokens SAS, se puede:
        • Autenticar los microservicios con managed identity del pod/nodo o con un service principal.
        • Asignar roles RBAC adecuados en el scope correcto (por ejemplo, Azure Event Hubs Data sender y Azure Event Hubs Data receiver a nivel de namespace).
      • Esto evita tener que gestionar expiración y generación de tokens SAS manualmente.

    Sobre rate limits:

    • En la documentación proporcionada no se describe un “issue” específico de rate limits que produzca exactamente este patrón de Not Authorized en Event Hubs for Kafka.
    • Los síntomas descritos (fallos intermitentes de autenticación/autorización que se resuelven tras reintentos) están alineados con:
      • Tokens SAS expirando o aún no válidos por clock skew.
      • Uso de policies o scopes incorrectos en algunos intentos.

    Resumen de pasos prácticos inmediatos:

    1. Verificar en el portal de Azure la Shared Access Policy que usan los microservicios:
      • Scope (namespace vs event hub/topic).
      • Permisos (Manage/Send/Listen).
      • Que la connection string en AKS corresponde exactamente a esa policy.
    2. Revisar la lógica de generación/renovación de tokens SAS en kafkajs (o en el wrapper usado):
      • Asegurar expiración suficientemente larga y sin start time igual a “now”.
    3. Confirmar que Local Authentication no está deshabilitada en el namespace.
    4. Evaluar migrar a autenticación con Microsoft Entra ID y roles RBAC para eliminar problemas de SAS.

    References:

    AI-generated content may be incorrect. Read our transparency notes for more information.

    Was this answer helpful?

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.