An Azure real-time data ingestion service.
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:
- 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.
- Asegurar que la Shared Access Policy usada en la connection string:
- 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 timedel 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.
- Si los microservicios generan tokens SAS a partir de la connection string, revisar:
- Confirmar que el recurso del token coincide con el namespace/topic
- El token SAS se genera sobre un
resource URIconcreto (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.
- El token SAS se genera sobre un
- 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.
- Para publishers (productores):
- Descartar bloqueo por deshabilitar SAS/local auth
- Verificar en el namespace de Event Hubs que Local Authentication (SAS keys) no esté deshabilitado.
- Si
disableLocalAuthestá entrue, solo funcionará autenticación con Microsoft Entra ID; cualquier intento con SAS fallará.
- 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 senderyAzure Event Hubs Data receivera nivel de namespace).
- Esto evita tener que gestionar expiración y generación de tokens SAS manualmente.
- Para reducir problemas de manejo de claves y tokens SAS, se puede:
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 Authorizeden 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:
- 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.
- 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 timeigual a “now”.
- Asegurar expiración suficientemente larga y sin
- Confirmar que Local Authentication no está deshabilitada en el namespace.
- Evaluar migrar a autenticación con Microsoft Entra ID y roles RBAC para eliminar problemas de SAS.
References:
- Troubleshoot authentication and authorization issues - Azure Event Hubs
- Authenticate access to Event Hubs resources using shared access signatures (SAS)
- Authenticate an application with Microsoft Entra ID to access Event Hubs
- Authenticate a managed identity with Microsoft Entra ID to access Event Hubs Resources