Sandbox para agentes de IA: ejecuta código aislado sin abrir producción

Un sandbox para agentes de IA es una frontera de capacidades: el modelo propone, pero una política y un runtime aislado deciden qué código o tool puede ejecutarse.

Compartir
Sandbox para agentes de IA: ejecuta código aislado sin abrir producción

Un sandbox para agentes de IA no es una casilla de «confía en el agente»: es una frontera de capacidades que limita filesystem, red, identidad, tiempo, recursos y datos. El modelo propone una acción; la política y el runtime deciden si puede ejecutarse.

Modelo de amenazas: qué debes asumir

Trata el prompt, los archivos recuperados, la salida de una tool y el código generado como entradas no confiables. Un prompt injection puede intentar revelar instrucciones, leer un secreto montado o convencer al agente de usar una herramienta fuera de objetivo.

También debes cubrir fallos menos vistosos: fuga por DNS o proxy, credenciales heredadas del entorno, volúmenes persistentes compartidos, imágenes base vulnerables, abuso de CPU o memoria, procesos huérfanos, cachés entre tenants y logs que copian secretos.

El atacante no necesita escapar del contenedor para causar daño. Le basta con usar una identidad válida con demasiado alcance, exfiltrar datos por un dominio permitido o dejar un artefacto que otro paso consuma sin verificar.

Arquitectura de sandbox para agentes: orquestador y policy engine crean una sesión efímera con workspace aislado, command broker, egress allowlist, identidad temporal y auditoría
El agente propone; el orquestador y la policy deciden. La sesión efímera separa workspace, identidad, red, límites de recursos y auditoría antes de ejecutar código.

¿Te está sirviendo? Hay una dosis cada semana

Te resumo herramientas de IA para devs, agentes, MCP, seguridad y workflows en un email de 5 minutos. En español y sin ruido.

Suscribirme gratis

Sesión, identidad y workspace

Asocia cada ejecución a un conversation_id, tenant_id y session_id distintos. El workspace nace vacío o con un checkout filtrado, tiene una cuota de disco y se destruye al finalizar; si necesitas reanudar, conserva solo artefactos explícitos y vuelve a validar su procedencia.

Puntos a revisar

Lo que conviene comprobar

La identidad del proceso debe ser propia del sandbox y de corta duración. No heredes el token del usuario ni las variables del runner. Emite credenciales con scopes mínimos para una operación concreta, revócalas al terminar y evita que aparezcan en el entorno, el diff o los logs.

La persistencia es una decisión de producto, no una comodidad. Separar historial, artefactos y filesystem evita que una sesión posterior convierta un archivo dejado por otra conversación en una instrucción o un canal de datos.

Broker de comandos con policy gate

Un broker estrecho transforma una intención validada en un proceso con cwd, entorno, timeout y recursos conocidos. Este ejemplo no entrega un shell al modelo: solo permite ejecutar un runner de tests dentro de /workspace y devuelve stdout/stderr truncados.

import { spawn } from "node:child_process";
import path from "node:path";

const ALLOWED = new Set(["pytest", "npm"]);
const ROOT = path.resolve("/workspace");

export async function runCommand(input: { bin: string; args: string[] }) {
  if (!ALLOWED.has(input.bin) || input.args.some((arg) => arg.startsWith("-c") || arg.includes(".."))) {
    throw new Error("command_denied");
  }
  const args = input.bin === "pytest" ? ["-q", ...input.args] : ["test", "--", ...input.args];
  const child = spawn(input.bin, args, {
    cwd: ROOT,
    env: { PATH: process.env.PATH ?? "" },
    shell: false,
    stdio: ["ignore", "pipe", "pipe"],
  });
  const timer = setTimeout(() => child.kill("SIGKILL"), 15_000);
  const chunks: Buffer[] = [];
  child.stdout.on("data", (chunk) => chunks.push(chunk));
  child.stderr.on("data", (chunk) => chunks.push(chunk));
  return await new Promise((resolve, reject) => child.on("close", (code) => {
    clearTimeout(timer);
    resolve({ code, output: Buffer.concat(chunks).toString("utf8").slice(-8_000) });
  }).on("error", reject));
}

En producción añade validación de esquema, límites de CPU y memoria, una allowlist de rutas y un proxy de red. El broker tampoco debe interpretar texto devuelto por el proceso como una nueva orden sin pasar otra vez por la política.

Haz que una denegación sea visible y accionable. Un sandbox que oculta el motivo del rechazo empuja al equipo a ampliar permisos hasta que «funcione». La policy versionada y las métricas de denegación permiten corregir el contrato sin abrir una puerta global.

Efímero o persistente: cómo decidir

Elige efímero cuando el trabajo sea compilación, tests, análisis de una PR, generación de artefactos o ejecución con datos sintéticos. Reduce contaminación entre sesiones y hace más claro el borrado, a cambio de pagar arranque, checkout y caché.

Elige persistencia controlada cuando una tarea larga necesite checkpoints o una dependencia pesada. Persiste un volumen separado por tenant y conversación, cifra, limita retención y restaura desde snapshots verificables; nunca compartas un workspace por conveniencia.

Mide p95 de arranque, tiempo de preparación, cache hit rate, coste por minuto, coste de almacenamiento y tasa de reintentos. La sesión más barata por ejecución puede ser más cara si deja incidentes o exige revisar demasiados permisos.

Preguntas frecuentes

¿Un contenedor ya es un sandbox seguro?

No por sí solo. Reduce superficie, pero debes controlar privilegios, filesystem, red, identidad, recursos, imagen, kernel y ciclo de vida.

¿Puedo permitir que el agente instale paquetes?

Solo en una sesión desechable, con repositorios y versiones permitidos, sin secretos y con coste/tiempo acotados. Para producción, preconstruye imágenes reproducibles.

¿Dónde guardo los secretos que necesita una tool?

Fuera del proceso del agente. Usa un broker o secret manager que emita una operación de mínimo privilegio y redacta el material sensible de las trazas.

¿Qué diferencia hay entre un code interpreter y un sandbox general?

Un code interpreter suele ofrecer una capacidad acotada para ejecutar código; un sandbox general también debe gobernar tools, red, identidad, artefactos y persistencia.

¿Cuándo necesito aprobación humana?

Antes de acciones mutantes o irreversibles: producción, datos reales, permisos, pagos, borrados, publicaciones y cambios que salgan del workspace de la sesión.

¿Cómo pruebo que el aislamiento funciona?

Ejecuta tests negativos y red-team contra rutas, procesos, red, credenciales, caches, artefactos y tenants. La evidencia debe mostrar una denegación, no solo una demo exitosa.

Cómo poner en marcha un sandbox mínimo para un agente

  1. Clasificar capacidades. Separa lectura, escritura, red, secretos y acciones irreversibles; asigna owner y riesgo a cada tool.
  2. Crear la sesión. Genera un workspace efímero por conversación, imagen fijada, identidad temporal y cuotas de CPU, memoria, disco y tiempo.
  3. Cerrar la política. Deniega por defecto y permite solo comandos, rutas, dominios y operaciones de signing explícitos.
  4. Implementar el broker. Valida esquema y argumentos, usa shell=false, cwd fijo, timeout, límites de salida y un exit code auditable.
  5. Aislar egress y secretos. Fuerza proxy/allowlist, bloquea redes privadas y entrega operaciones de mínimo privilegio sin montar credenciales.
  6. Registrar y borrar. Guarda decisiones, duración, consumo y hashes redactados; destruye la sesión y aplica retención a los artefactos.
  7. Atacar antes de abrir. Ejecuta prompt injection, traversal, exfiltración, abuso de cuota, cross-tenant y reutilización de cache; bloquea el rollout si una prueba cruza la frontera.

Conclusión

La arquitectura ganadora no intenta convencer al modelo de que sea prudente: hace que la prudencia sea una propiedad del runtime. Un sandbox efímero, una identidad estrecha, egress controlado, secretos fuera del proceso, cuotas, auditoría y evals convierten la ejecución de código en una capacidad gobernada y revocable.

Fuentes y referencias

También te puede interesar

Codex con internet: sandbox y seguridadPrompt injection en agentes de IA: guía prácticaOIDC y credenciales efímeras para agentesMCP en producción: seguridad y permisosEvaluación de agentes: tools y trayectorias

Recibe una lectura semanal de herramientas IA para devs

Cada semana te resumo herramientas de IA para devs, agentes, MCP, seguridad y workflows en un email de 5 minutos. En español y sin ruido.

Suscribirme gratis

Lo mejor de la IA para desarrolladores, cada martes

Newsletter en español, gratis. Las herramientas, modelos y trucos de IA para devs que de verdad importan — sin ruido.