Limitar las herramientas del asistente

CiberseguridadBeginner
Practicar Ahora

Introducción

Un asistente de proyecto ayuda a leer documentos de planificación. Propone una llamada a herramienta: una solicitud estructurada como documents.read. Tool Server ejecuta la acción. Una propuesta plausible no otorga permiso para ejecutarla.

Mantienes un servicio de formación con datos sintéticos. Comienza con una lectura normal y elimina escritura y borrado innecesarios mediante dos pequeños cambios de política. Las propuestas son reproducciones deterministas, no respuestas de un modelo en vivo. La autenticación, las decisiones y las operaciones documentales son reales. Este laboratorio no prueba resistencia a la inyección de instrucciones.

Usa la pestaña Policy Editor para configurar, Test Client para enviar solicitudes autenticadas y Assistant Tool Lab para la página de reproducción. Las terminales pertenecen a usuarios distintos del mismo sistema. Policy Editor tiene acceso de mantenimiento intencionalmente; Test Client no puede editar políticas ni usar sudo. Basta con familiaridad básica con la terminal.

Conservar la lectura y eliminar la escritura

Selecciona la pestaña Assistant Tool Lab en la interfaz del laboratorio para comenzar este paso.

En este paso, observa una lectura normal y elimina el permiso de escritura del asistente.

Las cuentas de formación son alice y bob. Un principal es la identidad establecida por autenticación. Ambas cuentas tienen el rol assistant, que agrupa permisos de herramientas. Los documentos son sintéticos: alice-notes pertenece a Alice, bob-notes a Bob, y Bob comparte team-plan con Alice. Solo demo-pad es desechable.

Cambia a la pestaña Assistant Tool Lab. Selecciona alice, introduce training-alice y pulsa Sign in. Mantén la herramienta documents.read y el documento alice-notes; pulsa Replay proposal. La traza separa la propuesta no fiable del resultado del servidor. Espera HTTP 200, principal alice, decisión allowed y Synthetic Alice planning notes. Es una lectura real.

Assistant Tool Lab separa una propuesta reproducida del resultado permitido del servidor

En la pestaña Test Client, el comando preparado assistant envía solicitudes HTTP con una cuenta autenticada. replay envía una propuesta por la ruta de reproducción; call va directamente al manejador. Las dos palabras siguientes indican herramienta y documento. Ejecuta:

Cambia a la pestaña Test Client antes de ejecutar el siguiente comando.

assistant replay documents.read team-plan

Espera HTTP 200 y Synthetic shared project plan. Observa ahora el exceso de permisos únicamente sobre el documento desechable:

assistant replay documents.write demo-pad

Espera HTTP 200 y "effect": "written". El servidor cambió realmente ese documento de demostración. Un rol de solo lectura no debería poder hacerlo.

Cambia a la pestaña Policy Editor. cat imprime un archivo; esta ruta absoluta identifica la lista activa de herramientas permitidas:

Cambia a la pestaña Policy Editor antes de ejecutar el siguiente comando.

cat /home/labex/project/tools.json

JSON usa nombres y valores entre comillas, dos puntos entre nombre y valor, y corchetes para listas. La lista assistant contiene lectura, escritura y borrado. Quitar una opción del menú dejaría abiertas las solicitudes directas; el guardián del manejador carga esta lista en cada petición.

Sustituye el archivo por esta política intermedia. cat > path escribe texto en lugar de imprimirlo. El delimitador citado EOF inicia un documento de texto literal; el EOF final debe ocupar una línea solo. Se reemplaza todo el archivo pequeño, por lo que repetirlo corrige un error de escritura.

cat > /home/labex/project/tools.json <<'EOF'
{
  "assistant": ["documents.read", "documents.delete"]
}
EOF

Vuelve a la pestaña Test Client y repite la propuesta de escritura:

Cambia a la pestaña Test Client antes de ejecutar el siguiente comando.

assistant replay documents.write demo-pad

Espera HTTP 403 y tool_denied. Un 403 significa que el servicio recibió y rechazó la solicitud; un error de conexión indica que no llegó a decidir. La CLI imprime rechazos intencionales sin cerrar el shell. Si aparece policy_error, cambia a la pestaña Policy Editor y repite la edición JSON completa; vuelve después a la pestaña Test Client para reintentar las solicitudes. No hace falta reiniciar.

assistant call documents.read alice-notes

La lectura debe seguir devolviendo HTTP 200. La comprobación prueba la denegación de escritura y lecturas normales con ambos usuarios autenticados; no pide copiar resultados.

Cerrar la ruta de borrado directo

Selecciona la pestaña Policy Editor en la interfaz del laboratorio para comenzar este paso.

En este paso, completa el rol de solo lectura y prueba tanto el manejador directo como la reproducción.

Borrar es una operación independiente. Bloquear escritura no bloquea automáticamente el borrado. En la pestaña Policy Editor, sustituye la lista por la única operación necesaria. Utiliza la misma edición del archivo completo:

Cambia a la pestaña Policy Editor antes de ejecutar el siguiente comando.

cat > /home/labex/project/tools.json <<'EOF'
{
  "assistant": ["documents.read"]
}
EOF

En la pestaña Test Client, envía una solicitud de borrado directo sobre el documento desechable:

Cambia a la pestaña Test Client antes de ejecutar el siguiente comando.

assistant call documents.delete demo-pad

Espera HTTP 403 y tool_denied. Como call evita la página de reproducción, confirma que la interfaz visible no es el límite que impone los permisos. Prueba también escritura directa:

assistant call documents.write demo-pad

Espera la misma denegación. Comprueba que Alice aún pueda leer un documento compartido legítimamente:

assistant call documents.read team-plan

Espera HTTP 200 y Synthetic shared project plan. En la pestaña Assistant Tool Lab, mantén la sesión de Alice, selecciona documents.delete, introduce demo-pad y pulsa Replay proposal. El servidor también debe rechazarlo con tool_denied.

Assistant Tool Lab muestra que el servidor rechaza la herramienta de borrado innecesaria

Una instrucción como «solo lee, por favor» no sustituye este control. El servidor debe decidir independientemente de la propuesta. Desactivar todas las herramientas también impediría el trabajo útil del asistente. Si se rechaza la lectura, revisa la escritura exacta de documents.read en JSON. La comprobación invoca el guardián exacto de escritura/borrado con documentos desechables en memoria y comprueba lecturas reales permitidas; nunca borra documentos del alumno.

La herramienta de lectura todavía puede pedir un objeto privado ajeno. El siguiente laboratorio añade ese límite documental.

Resumen

Conservaste las lecturas normales y eliminaste escritura y borrado. Las propuestas reproducidas y las llamadas directas pasan ahora por el mismo control real del servidor. El permiso de herramienta es solo un límite: una lectura permitida aún necesita una decisión por documento.