Janus. Observabilidad multitenant sin fugas de límites

De código abierto, creado por nosotros y gratis para todo el mundo.

Cada usuario ve exactamente lo que debe ver y nada más. Janus es el proxy multitenant de código abierto de evoila para Prometheus, Loki y Tempo. Aplica un control de acceso basado en etiquetas y políticas de consulta entre tus usuarios y tu pila de observabilidad, de forma transparente en la puerta de enlace y sin tocar tus backends.

Las plataformas compartidas tienen fugas. Janus se mantiene firme.

Las plataformas de observabilidad compartidas son muy útiles hasta que un desarrollador consulta métricas de un equipo al que no pertenece, o una cuenta de servicio filtra registros más allá de los límites del tenant. Janus actúa como un proxy de seguridad transparente entre tus usuarios y tu pila de observabilidad. Valida la identidad, resuelve las políticas y aplica el acceso a nivel de etiqueta antes de que ninguna consulta llegue a Prometheus, Loki o Tempo. Es de código abierto, está construido sobre Spring WebFlux para ofrecer un rendimiento reactivo y está diseñado para integrarse en una implementación de observabilidad ya existente sin tener que reconstruir la pila a su alrededor.

  • 3 backends: Prometheus, Loki y Tempo en un solo proxy
  • «Zero trust»: se aplica cada consulta, sin excepciones
  • Código abierto: GNU AGPLv3.0, impulsado por la comunidad

Análisis técnico en profundidad

Cómo gestiona Janus los permisos de acceso antes de que se ejecute una consulta

Cada solicitud entrante pasa por un proceso de tres etapas dentro de Janus. Primero viene la autenticación. Se valida un token JWT o un encabezado de autenticación reenviado y se determina la identidad del solicitante. En segundo lugar, viene la resolución de políticas. Se cargan las reglas de acceso para esa identidad, incluyendo los valores de etiqueta que el solicitante tiene permiso para leer. En tercer lugar, se aplica la consulta. Se analiza la solicitud, se inyectan o validan los selectores de etiquetas necesarios y la solicitud reescrita se envía al backend correspondiente. A continuación, la respuesta se devuelve de forma transparente. Para la herramienta que realiza la llamada, Janus sigue siendo invisible.

El modelo de ejecución es reactivo y sin bloqueos porque Janus se basa en Spring WebFlux. Eso significa que ningún hilo se queda inactivo mientras los backends responden, el escalado es sencillo y el proxy sigue sin estado bajo carga. Las políticas de acceso se cargan desde una fuente de configuración al arrancar y se pueden recargar sin tiempo de inactividad.

Echa un vistazo a Janus en GitHub


Control de acceso integrado en cada capa de la solicitud

Autenticación mediante JWT y encabezado

La identidad del solicitante se determina a partir de las reclamaciones del JWT o de los encabezados de autenticación reenviados. Esto se integra en las configuraciones de identidad existentes basadas en OAuth2 sin necesidad de un modelo de autenticación independiente.

Políticas de acceso basadas en etiquetas

Las políticas definen qué valores de etiqueta puede leer quien realiza la llamada, por ejemplo, el espacio de nombres, el servicio, el pod, el equipo o cualquier etiqueta personalizada que ya se utilice en la pila.

Reescritura automática de consultas

Los selectores de etiquetas obligatorios se insertan en las consultas PromQL, LogQL y TraceQL antes de reenviarlas. Su cumplimiento no depende de que el cliente lo respete.

Núcleo reactivo y sin bloqueo

Spring WebFlux permite crear un proxy sin estado y escalable horizontalmente que añade una sobrecarga de menos de un milisegundo a las rutas de consulta bajo carga de producción.

Backends compatibles: un proxy, cobertura completa de la pila

Janus aplica las políticas de acceso en Prometheus, Loki y Tempo en una sola implementación. No necesitas un proxy distinto para cada backend, ni modelos de políticas diferentes para cada herramienta, ni lógicas de aplicación distintas para métricas, registros y trazas. Una única puerta de acceso es suficiente para toda la pila.

Qué significa esto para tu plataforma

Repercusiones prácticas en toda tu organización

Una plataforma, muchos equipos

Pon en marcha una única implementación de Prometheus, Loki y Tempo para toda tu organización. Janus se encarga del aislamiento de los inquilinos sin que haga falta tener pilas separadas para cada equipo.

Control de acceso preparado para auditorías

Cada consulta ejecutada y rechazada se puede atribuir a una identidad. Las infracciones de las políticas de acceso se registran con todo el contexto, justo lo que exigen las auditorías de cumplimiento.

No hace falta cambiar nada en el backend

Janus se implementa delante de la infraestructura existente. No hace falta cambiar la configuración de scraping ni modificar el flujo de registros. Solo tienes que integrarlo en tu pila y configurar las políticas.

Código abierto, siempre

Licencia del MIT sin nivel empresarial ni restricciones de funciones. Se aceptan contribuciones, la puerta está abierta.

Want to talk about Janus in your stack?

Tanto si quieres saber cómo encaja Janus en tu plataforma de observabilidad, como si quieres hablar sobre el control de acceso multitenant o ver un caso práctico de implementación, ponte en contacto con nosotros. Te pondremos en contacto con el experto adecuado.

Marco Di Martino

Marco Di Martino

Business Unit Lead – Cloud Native

Preguntas frecuentes

Preguntas frecuentes sobre Janus

No. Janus se implementa como un proxy transparente delante de tus backends actuales. No hace falta cambiar nada en la configuración de scraping, ni modificar el flujo de registros, ni hacer ajustes en Prometheus, Loki o Tempo. Configura tus políticas, redirige a tus clientes a Janus y la aplicación de las políticas empieza de inmediato.

Las políticas se definen en una fuente de configuración y se cargan al iniciar el sistema. Especifican qué valores de etiqueta puede leer cada identidad de usuario, ya sea por espacio de nombres, servicio, pod, equipo o cualquier etiqueta personalizada de tu pila. Las políticas se pueden recargar sin tiempo de inactividad ni necesidad de reiniciar el proxy.

Janus se distribuye bajo la licencia GNU AGPLv3.0. No hay ningún nivel empresarial ni restricciones de acceso a las funciones. El código fuente completo está disponible en GitHub en el repositorio evoila/janus.

Cuando una consulta se puede reescribir sin problemas, Janus inserta los selectores de etiquetas necesarios antes de enviarla al backend. Si una consulta no se puede reescribir sin problemas, se rechaza. Cada reescritura o rechazo se registra con el contexto de identidad.

Sí. Janus carga las políticas desde una fuente de configuración al iniciarse y admite recargas en tiempo real. Las actualizaciones de las políticas se aplican sin necesidad de reiniciar el proxy y sin interrumpir las rutas de consulta activas.