Nota 38 · Microsoft Foundry (2/4)

Shells de IA seguras: ¿el navegador debe hablar con Foundry o solo a través de un proxy?

Compara opciones para reforzar los proxies de navegador a API delante de backends de agentes, con desajustes de runtime y fallos de Front Door.

27 de junio de 2026 9 min de lectura

Puntos clave

  • Nombra el proxy como un componente del producto con un responsable (Front Door, App Gateway o App API).
  • Iguala en local y en vivo las reglas de rechazo de autenticación, rutas, tamaño del cuerpo y payloads.
  • Elige el patrón de borde según el modelo de amenazas, no como un TLS añadido a última hora.
  • Pon en una lista de permitidos los campos de reasoning y de passthrough; descarta las formas desconocidas.
  • Aplica la autorización en la ruta de reenvío antes de que Foundry o la API del agente vean la llamada.
  • Empieza las revisiones de seguridad por el proxy y después pasa a los prompts y a los controles del corpus.

Los shells en el navegador tientan a los equipos a confiar demasiado en la SPA. La interfaz de chat parece el producto. El proxy delante del backend del agente es donde la autenticación se convierte en autorización, donde se limita la salida y donde los payloads peligrosos se permiten por lista o se descartan.

Trata el proxy como una frontera de seguridad. Elige Front Door, Application Gateway o un patrón equivalente de forma deliberada. No añadas el TLS y la autorización más tarde. Los desajustes de runtime entre el proxy local y el de producción crean una falsa confianza. Los payloads de reasoning y passthrough necesitan listas de permitidos explícitas. Las revisiones de seguridad deberían empezar por el proxy, no por el system prompt.

Modelo con nombre: el proxy como plano de control

  • Front end SPA: el shell del navegador guarda tokens y estado de la interfaz. No es la frontera de seguridad.
  • Proxy con nombre: termina el TLS, valida la identidad, aplica los scopes, limita la salida y permite por lista la forma del payload.
  • Foundry / API del agente: recibe solo lo que el proxy ya autorizó y dio forma.
  • Paridad: local y en vivo comparten las mismas reglas de rechazo, aunque los proveedores sean distintos.
  • Contrato: la SPA pide; el proxy con nombre decide qué llega al plano del agente.

La SPA del navegador habla con un proxy con nombre que se encarga de TLS, autorización, salida y lista de permitidos antes de Foundry o de la API del agente

Figura 1. El proxy como plano de control. La SPA es un front end. El proxy con nombre es responsable de la identidad, los scopes, la salida y la forma del payload antes de que Foundry o la API de tu agente vean la petición.

Contexto y restricción

Un fallo habitual es un proxy local que hace que las demos parezcan seguras mientras el borde en vivo reenvía más de lo que nadie revisó. Los prompts del modelo pueden estar bien y la frontera no. Trata el proxy como el plano de control de la autorización y la salida, y las revisiones se acortan.

Los tokens en el navegador no cuentan toda la historia. El proxy tiene que validar la identidad, aplicar los scopes, limitar la salida a backends aprobados y rechazar payloads con formas inesperadas. Si tu modelo de amenazas empieza por la inyección de prompts y se salta el borde, estás optimizando primero la capa equivocada.

La figura 2 es el planteamiento de Learn para los componentes de gateway delante de las API. Trata esos controles como parte del producto, no como un pulido opcional.

Diagrama de componentes de Azure API Management

Figura 2. Refuerza la ruta del navegador a las API del agente. Los controles del gateway son parte del producto, no un pulido opcional. Fuente: Microsoft Learn: conceptos clave de API Management.

Diseño

1. Nombra el proxy como un componente del producto

Documenta qué servicio termina el TLS, valida los tokens y reenvía a Microsoft Foundry o a tu API. "El servidor Node en App Service" o "Front Door más la API" debería ser una caja explícita. Los bordes sin nombre acaban siendo bordes sin responsable. La figura 1 muestra esa caja con nombre como carril central.

2. Iguala el comportamiento del proxy local y del de producción

Los mocks locales que se saltan la autorización o abren el CORS enseñan a los desarrolladores los valores por defecto equivocados. Paridad no significa proveedores idénticos; significa las mismas reglas de rechazo para llamadas sin autenticar, cuerpos demasiado grandes y rutas desconocidas. La falsa confianza es un defecto. La figura 3 muestra esa paridad como rechazos compartidos, con el desajuste como antipatrón.

Los proxies local y en vivo comparten las mismas reglas de rechazo; el antipatrón muestra el local saltándose la autorización mientras el de producción reenvía de más

Figura 3. Local y en vivo comparten las reglas de rechazo de autenticación, tamaño y rutas. Una página de wiki que nadie abre no es paridad. Una comprobación que falla y bloquea la promoción sí lo es.

3. Elige Front Door o patrones de gateway a propósito

La latencia, el WAF, el origen privado y la gestión de certificados son distintos. Elige según el modelo de amenazas y la red que ya operas. Atornillar un borde tipo CDN a una aplicación que daba por hecha una intranet amable es como el TLS se convierte en teatro.

4. Pon en lista de permitidos los payloads de reasoning y passthrough

Los fragmentos de streaming, los blobs de llamadas a herramientas y los campos de "debug" viajan a través de los proxies. Las listas de permitidos explícitas son mejores que "reenviar todo lo que mande la SPA". Los campos inesperados son la vía por la que el contenido sensible sale de la ruta que revisaste. La figura 4 es el control de la lista de permitidos.

El payload de la SPA entra en la lista de permitidos del proxy, que reenvía los campos revisados y descarta los campos de debug desconocidos

Figura 4. Permite por lista lo que pasa. Los campos conocidos van al backend del agente. Los desconocidos y los de debug se descartan para que nunca se conviertan en una fuga visible en el navegador.

5. Aplica la autorización en la ruta de reenvío

Rechaza los scopes ausentes o incorrectos antes de que el backend del agente vea la petición. Ocultar botones en React no es una frontera. El proxy y la API comparten una única historia de autorización.

6. Empieza las revisiones de seguridad por el borde

Los system prompts importan. El RBAC del corpus importa. Aun así, empieza la revisión por quién puede llegar al proxy, qué puede invocar y adónde pueden ir las respuestas. Reforzar los prompts en un borde abierto es decoración.

Fallos de Front Door que conviene nombrar

Son habituales los orígenes mal configurados, las sondas de estado que marcan como sanos los shells mientras los backends fallan y los comportamientos de caché que sorprenden al chat en streaming. Documenta el modo de fallo que aceptas: fallar cerrado en la autenticación, fallar de forma visible en el estado del origen y nunca fallar abierto en las comprobaciones de scope. Los operadores necesitan un runbook que no sea "reinicia la SPA".

Checklist de desajustes de runtime

Antes de declarar un shell listo para producción, compara: autenticación obligatoria en local y en vivo, tamaño máximo del cuerpo, rutas permitidas, reenvío de cabeceras, configuración de websocket o SSE y destinos de salida. Pon la comparación en la CI o en una checklist de release. Una página de wiki que nadie abre no es paridad. Una comprobación que falla y bloquea la promoción sí lo es.

Qué entra en la conversación sobre la lista de permitidos

Enumera las rutas de las peticiones, los métodos, los tipos de contenido y los modos de streaming de las respuestas. Enumera qué cabeceras pueden llegar al backend. Enumera qué formas de resultados de herramientas pueden volver al navegador. Si un campo solo sirve para la trazabilidad interna, no debería ser visible en el navegador por defecto. Las listas de permitidos parecen pedantes hasta la primera fuga accidental de un identificador interno.

Errores comunes

Confiar en la SPA. "Los usuarios ya han iniciado sesión" sustituye a la validación de la petición.

Desajuste entre local y en vivo. En desarrollo funciona; en producción se reenvía de más. La figura 3 hace visible ese defecto.

TLS más tarde. Los certificados y la configuración HTTP se convierten en una carrera.

Maximalismo del passthrough. Los campos JSON desconocidos viajan de polizón. La figura 4 es la lista de permitidos que lo impide.

Revisiones que empiezan por el prompt. Las preguntas sobre el borde llegan después de publicar.

Un solo ingeniero es responsable del borde. Las ausencias se convierten en ventanas de riesgo.

Úsalo tal cual o adáptalo

Úsalo tal cual

  • La ruta del navegador al agente incluye una frontera explícita de proxy y seguridad con un responsable con nombre.
  • Los proxies local y en vivo comparten las reglas de rechazo de autenticación, rutas y payloads.
  • La elección de Front Door o gateway (o equivalente) está documentada con su justificación en el modelo de amenazas.
  • Los campos de reasoning y passthrough están en una lista de permitidos; los desconocidos se descartan.
  • La autorización se aplica en la ruta de reenvío, no solo filtrando en la interfaz.
  • Las revisiones de seguridad empiezan por el proxy y después pasan a los prompts y a los controles del corpus.

Adáptalo antes de usarlo

Un proxy serio añade configuración y otro componente con responsable. Saltárselo mantiene rápidas las demos y les pone más fácil la brecha a los atacantes. Las listas de permitidos estrictas rompen los experimentos informales; el passthrough informal rompe las revisiones de incidentes. Igualar local y en vivo cuesta trabajo de fixtures; el desajuste cuesta sorpresas en producción. Las revisiones de seguridad que empiezan por el borde cuestan tiempo de calendario y ahorran tiempo de disculpas.

Referencias principales: la guía de seguridad de Azure Front Door y Application Gateway en Microsoft Learn, más tu ADR de autorización de la API. Acompaña los diagramas de red con las listas de permitidos de payloads para que las revisiones tengan artefactos.

Cierre

Nombra la frontera. Iguala local con en vivo. Elige el borde a propósito. Permite por lista lo que pasa. Aplica la autorización a la entrada. Empieza las revisiones por el proxy. El system prompt puede esperar su turno.

Relacionado