Depurador FGA
El Depurador FGA es una herramienta interactiva en la Consola Auris que te permite probar y solucionar problemas de tu configuración de Autorización Detallada (FGA) en tiempo real. Proporciona tres operaciones principales — Verificar, Expandir y Listar Objetos — cada una con una interfaz visual para introducir consultas e inspeccionar resultados.
Accede al Depurador FGA en Consola → Administración → Autorización Detallada → Depurador.
Requisitos Previos
Antes de usar el depurador, necesitas:
- Un modelo de autorización activo: Debe haberse creado y activado al menos un modelo FGA. Si no hay ningún modelo activo, la página del depurador mostrará un estado vacío con un enlace a la página de Modelos.
- Tuplas de relaciones: El depurador consulta tu almacén de tuplas real, por lo que necesitas tuplas escritas para los objetos y sujetos que deseas probar.
- El permiso
debug:fga: Tu cuenta de administrador debe tener este permiso para acceder al depurador.
Tres Operaciones
La página del depurador está organizada en tres pestañas: Verificar, Expandir y Listar Objetos. Cada pestaña proporciona un formulario para introducir los parámetros de la consulta y un panel de resultados debajo.
Verificar
La operación Verificar responde a la pregunta: “¿Tiene este sujeto esta relación con este objeto?”
Esta es la operación más usada durante el desarrollo y la resolución de problemas.
Campos de entrada:
| Campo | Descripción | Ejemplo |
|---|---|---|
| Tipo de Objeto | El tipo definido en tu modelo de autorización | document |
| ID de Objeto | La instancia específica a la que se comprueba el acceso | readme |
| Relación | La relación a comprobar | viewer |
| Tipo de Sujeto | El tipo del sujeto | user |
| ID de Sujeto | El sujeto específico | alice |
| Relación del Sujeto | (Opcional) Si el sujeto es un userset, la relación en el sujeto | member |
| Explicar | Activar para mostrar el árbol de resolución | Activado por defecto |
Cómo usarlo:
Introducir el objeto
Selecciona el Tipo de Objeto del menú desplegable (poblado de las definiciones de tipo de tu modelo activo) e introduce el ID de Objeto.
Introducir la relación
Selecciona la Relación del menú desplegable (poblado de las relaciones definidas del tipo de objeto seleccionado).
Introducir el sujeto
Selecciona el Tipo de Sujeto e introduce el ID de Sujeto. Si compruebas un userset (por ejemplo, “todos los miembros del grupo engineering”), introduce también la Relación del Sujeto (por ejemplo, member).
Hacer clic en Verificar
El depurador ejecuta la consulta de verificación contra el motor FGA y muestra el resultado.
Resultado:
El panel de resultados muestra:
- Permitido (verde) o Denegado (rojo) — el resultado booleano
- Árbol de resolución (cuando Explicar está activado) — el camino completo que siguió el motor para llegar a la decisión
Expandir
La operación Expandir responde a la pregunta: “¿Qué sujetos tienen esta relación con este objeto?”
Es útil cuando quieres ver todos los que tienen acceso a un recurso específico.
Campos de entrada:
| Campo | Descripción | Ejemplo |
|---|---|---|
| Tipo de Objeto | El tipo definido en tu modelo de autorización | document |
| ID de Objeto | La instancia específica | readme |
| Relación | La relación a expandir | viewer |
Resultado:
Una vista de árbol de todos los sujetos que tienen la relación especificada, agrupados por cómo la obtuvieron:
- Directo: Sujetos con una tupla explícita (por ejemplo,
document:readme#viewer@user:alice) - Calculado: Sujetos que tienen la relación mediante un userset calculado (por ejemplo, todos los
editores son tambiénviewers) - Heredado: Sujetos que heredan la relación de un objeto padre (por ejemplo, mediante
viewer from parent)
Listar Objetos
La operación Listar Objetos responde a la pregunta: “¿A qué objetos de un tipo dado puede acceder este sujeto con esta relación?”
Es útil para construir interfaces que muestren “todos los documentos que Alice puede ver” o para depurar por qué un usuario ve (o no ve) ciertos recursos.
Campos de entrada:
| Campo | Descripción | Ejemplo |
|---|---|---|
| Tipo de Objeto | El tipo de objetos a buscar | document |
| Relación | La relación a comprobar | viewer |
| Tipo de Sujeto | El tipo del sujeto | user |
| ID de Sujeto | El sujeto específico | alice |
Resultado:
Una lista de todos los IDs de objeto del tipo especificado donde el sujeto tiene la relación indicada. Cada resultado muestra el ID del objeto e indica si el acceso es directo, calculado o heredado.
Leer el Árbol de Resolución Visual
El árbol de resolución es la función de depuración más valiosa. Cuando el modo Explicar está activado en una operación Verificar, el depurador muestra una visualización en árbol que muestra cada paso que dio el motor FGA para llegar a su decisión.
Colores de los Nodos
Cada nodo del árbol está codificado por color:
| Color | Significado |
|---|---|
| Verde | Esta regla se evaluó como verdadera — la condición fue satisfecha |
| Rojo | Esta regla se evaluó como falsa — la condición no fue satisfecha |
| Azul | Userset calculado intermedio — un paso en la ruta de resolución, no un resultado final |
Tipos de Nodos
El árbol contiene diferentes tipos de nodos que corresponden a los seis tipos de reescritura en el modelo FGA:
| Etiqueta del Nodo | Tipo de Reescritura | Qué Muestra |
|---|---|---|
this | Asignación directa | Si existe una tupla en el almacén |
computedUserset | Relación calculada | Si el sujeto tiene una relación diferente en el mismo objeto |
tupleToUserset | Seguir relación | El objeto intermedio seguido y el resultado de comprobar la relación en él |
union | Combinación OR | Cada rama, con la primera rama verdadera resaltada |
intersection | Combinación AND | Cada rama, todas deben ser verdaderas |
exclusion | Diferencia de conjuntos | El conjunto base y el conjunto sustraído |
Leer un Árbol: Ejemplo
Considera el siguiente modelo de autorización:
type document
relations
define parent: [folder]
define owner: [user] or owner from parent
define editor: [user] or owner
define viewer: [user] or editorUna Verificación de document:readme#viewer@user:alice podría producir este árbol:
Leyendo de arriba a abajo:
- El motor comprueba
viewer, que está definido como[user] or editor(una unión) - Primera rama: tupla directa
document:readme#viewer@user:alice— no encontrada (rojo) - Segunda rama: userset calculado
editor— evalúaeditoren el mismo objeto editores[user] or owner— tupla directa no encontrada, por lo que compruebaownerowneres[user] or owner from parent— tupla directadocument:readme#owner@user:aliceencontrada (verde)- La unión hace cortocircuito:
owneres verdadero, por lo queeditores verdadero, por lo quevieweres verdadero
El resultado: Alice puede ver document:readme porque es la propietaria (y los propietarios son editores, y los editores son visores).
Escenarios de Depuración Comunes
”¿Por qué el usuario X no puede acceder al documento Y?”
Ejecutar una Verificación con el modo Explicar activado
Introduce el objeto, la relación y el sujeto. Asegúrate de que Explicar está activado.
Examinar los nodos rojos en el árbol de resolución
Los nodos rojos muestran dónde falló la verificación. Observa:
- Qué tuplas directas se esperaban pero no se encontraron
- Qué relaciones calculadas no se resolvieron
- Qué rutas
tupleToUsersetno tenían tuplas intermedias
Identificar la tupla o relación que falta
Causas comunes:
- Tupla directa faltante: El usuario no tiene una asignación explícita. Solución: escribir la tupla
POST /api/fga/tuples. - Relación padre faltante: Para permisos heredados, comprueba que existe la relación
parent(por ejemplo,document:readme#parent@folder:engineering). - Membresía de grupo faltante: Si el acceso es mediante un grupo, comprueba que el usuario es miembro del grupo (
group:engineering#member@user:alice). - Discrepancia en el modelo: El nombre de la relación en el código de tu aplicación no coincide con la definición del modelo. Comprueba la ortografía y las mayúsculas.
Verificar la corrección
Tras escribir la tupla faltante, vuelve a ejecutar la Verificación para confirmar que el árbol ahora se resuelve en verde.
”¿Quién tiene acceso de editor a la carpeta Z?”
Usa la operación Expandir:
- Establece el Tipo de Objeto en
folder, el ID de Objeto enZ, la Relación eneditor - Haz clic en Expandir
- El resultado muestra todos los editores directos, todos los usuarios que son editores mediante relaciones calculadas (por ejemplo, propietarios) y todos los miembros de grupos con acceso de editor
”¿Qué documentos puede ver el usuario X?”
Usa la operación Listar Objetos:
- Establece el Tipo de Objeto en
document, la Relación enviewer - Establece el Tipo de Sujeto en
user, el ID de Sujeto enX - Haz clic en Listar Objetos
- El resultado lista cada ID de documento donde el usuario X tiene acceso de visor, ya sea directo, calculado o heredado
Listar Objetos escanea todo el almacén de tuplas para el tipo dado, por lo que puede ser más lento que Verificar para tenants con grandes cantidades de tuplas. Úsalo para depuración y tareas administrativas, no en rutas de solicitudes frecuentes.
Visualización del Modelo
Debajo de las pestañas del depurador, la página incluye un Diagrama del Modelo — una visualización SVG de tu modelo de autorización activo que muestra:
- Cada tipo como un nodo
- Relaciones como aristas etiquetadas entre tipos
- Flechas de userset calculado (líneas discontinuas)
- Flechas
tupleToUserset(líneas sólidas con etiquetas intermedias)
El diagrama te ayuda a entender la forma de tu modelo de un vistazo, especialmente para modelos complejos con cadenas de herencia profundas. Haz clic en cualquier nodo de tipo para resaltar sus relaciones y tipos conectados.
Consejos para una Depuración Eficaz
Empieza con Verificar + modo Explicar. El árbol de resolución te dice exactamente qué probó el motor y dónde tuvo éxito o falló. Esto es más informativo que leer solo la definición del modelo, porque muestra las tuplas reales en el almacén.
Trabaja de abajo hacia arriba. Cuando una verificación falla, empieza por los nodos hoja del árbol de resolución. Estos muestran las búsquedas de tuplas reales. Si ves un nodo this rojo, significa que falta una tupla específica en el almacén.
Prueba casos tanto positivos como negativos. Tras escribir tuplas, verifica que los usuarios autorizados puedan acceder al recurso Y que los usuarios no autorizados sean correctamente denegados. Un modelo demasiado permisivo es tan peligroso como uno demasiado restrictivo.
Usa Expandir para auditar permisos. Ejecuta periódicamente Expandir en recursos sensibles para verificar que solo los usuarios previstos tienen acceso. Esto es especialmente importante después de cambios en el modelo u operaciones masivas de tuplas.
Compara versiones del modelo. Si el comportamiento de autorización cambió de forma inesperada, comprueba si el modelo activo fue actualizado recientemente. Ve a Modelos para ver el historial de versiones. Solo un modelo está activo a la vez — activar una nueva versión reemplaza la anterior.
Guías Relacionadas
- Modelo FGA / Zanzibar — Conceptos: cómo funcionan el modelo de autorización y el algoritmo de verificación
- Guía de Autorización Detallada — Guía paso a paso para implementar FGA
- Referencia de la API FGA — Gestionar modelos, tuplas y ejecutar verificaciones mediante la API REST