FRENES

Seguridad IA

Ejecutar un agente de IA en un entorno aislado

Por · · 7 min

Miniservidor sobre un escritorio, junto a una computadora con un terminal desenfocado en pantalla y un cable de red desconectado

Para aislar un agente de IA, ejecute sus comandos en un entorno que limite los archivos accesibles, las conexiones de red y el consumo de recursos. Un sandbox reduce las consecuencias de un error o de una manipulación del agente, pero no garantiza que no haya filtraciones ni acciones peligrosas en los servicios autorizados.

1. Definir el alcance antes de iniciar el agente

Requisitos previos: una máquina Linux de pruebas, un terminal Bash, Docker instalado y funcionando, y una imagen de su agente ya preparada y disponible de forma local. Esta imagen debe incluir sus dependencias y un intérprete sh. El tutorial parte de una instalación terminada: no existe un comando universal que sirva para todos los agentes.

El ejemplo utiliza contenedores Linux y un motor Docker local. Si utiliza un motor remoto, las rutas compartidas corresponden a la máquina donde se ejecuta ese motor. Adapte también la gestión de permisos si trabaja en otro entorno.

Empiece con una tarea acotada: analizar documentos ficticios y generar un informe en una carpeta reservada para ello. Deje fuera las credenciales, los datos de clientes y las conexiones a servicios de la organización durante esta primera comprobación. La guía para proteger un agente de IA le ayudará a definir después los permisos adecuados.

Un sandbox impone restricciones técnicas. Pedir al agente que se limite a una carpeta no bloquea un comando que intente acceder a otra ubicación.

ControlConfiguración inicialAmpliación que debe evaluar
ArchivosDatos de entrada de solo lecturaCopia de trabajo modificable
RedSin conexiones externasDestinos autorizados expresamente
SecretosSin credencialesAcceso dedicado con permisos limitados
Acciones en servicios de la organizaciónSin conexiónBorradores sujetos a aprobación

Esta progresión aplica el principio de mínimo privilegio. Defina también el resultado esperado y las condiciones de parada: si el agente queda bloqueado, eso no debe darle automáticamente más permisos.

2. Preparar datos desechables y una imagen identificada

Cree una carpeta nueva. No copie por costumbre su carpeta personal ni un repositorio completo. Los archivos de configuración, las copias de seguridad y los historiales pueden contener secretos que la tarea no necesita.

En la máquina anfitriona, prepare esta estructura:

mkdir -p sandbox-agent/entree sandbox-agent/sortie
printf '%s\n' 'Document fictif à analyser.' \
  > sandbox-agent/entree/exemple.txt
cd sandbox-agent

La carpeta de entrada será de solo lectura. La carpeta de salida permitirá modificaciones: considere todo su contenido reemplazable y potencialmente malicioso. La documentación sobre montajes de carpetas indica que las carpetas compartidas permiten la escritura de forma predeterminada; por eso debe establecer expresamente la restricción de solo lectura.

A continuación, elija la imagen de su agente que haya verificado previamente. Para poder reproducir la prueba, evite una referencia que pueda apuntar a una versión distinta con el tiempo: utilice la referencia por huella digital que proporciona su registro. La documentación sobre la ejecución de contenedores explica esta identificación mediante un digest.

El siguiente comando solicita esa referencia sin proponer un nombre de imagen inventado:

read -r -p 'Référence complète de votre image vérifiée : ' AGENT_IMAGE

Compruebe su procedencia y su contenido antes de continuar. El sandbox no convierte una imagen desconocida en una imagen fiable.

No comparta el socket de Docker, las claves SSH ni las carpetas de configuración de servicios en la nube. Evite también los enlaces simbólicos en los datos preparados: una estructura sencilla facilita la revisión y reduce las ambigüedades al recuperar los resultados.

3. Iniciar un entorno cerrado

El comando siguiente es un ejemplo de configuración que debe adaptar, elaborado con las opciones de la referencia oficial de Docker. Abre un terminal dentro de la imagen elegida; no presupone ningún comando concreto para su agente.

docker run --rm -it \
  --name agent-bac-a-sable \
  --pull=never \
  --network none \
  --read-only \
  --user "$(id -u):$(id -g)" \
  --cap-drop ALL \
  --security-opt no-new-privileges=true \
  --memory 1g \
  --memory-swap 1g \
  --cpus 1 \
  --pids-limit 128 \
  --tmpfs /tmp:rw,nosuid,nodev,size=256m,mode=1777 \
  --mount "type=bind,src=$(pwd)/entree,dst=/entree,readonly" \
  --mount "type=bind,src=$(pwd)/sortie,dst=/sortie" \
  --workdir /sortie \
  --env HOME=/tmp \
  --entrypoint sh \
  "$AGENT_IMAGE"

Los valores de memoria, procesador, procesos y espacio temporal se han elegido para este ejemplo; no representan las necesidades medidas de un agente. Ajústelos a la carga prevista. Estos límites no controlan el tamaño de la carpeta de salida en la máquina anfitriona ni una posible factura de API.

El proceso utiliza su identificador de usuario, sin capacidades adicionales de Linux. El sistema de archivos raíz es de solo lectura; las escrituras necesarias se realizan en la carpeta de salida y en el espacio temporal. La imagen debe poder funcionar así, sin una cuenta de administrador.

Mantenga el perfil seccomp predeterminado cuando esté disponible. Si aparece un error, identifique su origen antes de modificar esta protección.

Con la red desactivada, solo permanece la interfaz de bucle local. Por tanto, un agente que dependa de una API remota todavía no podrá funcionar: este paso sirve primero para comprobar su entorno de ejecución.

4. Comprobar los bloqueos antes de la primera tarea

En el terminal del contenedor, ejecute estas comprobaciones sencillas:

id
touch /entree/ecriture-interdite
touch /ecriture-interdite
printf '%s\n' 'sortie autorisée' > /sortie/controle.txt
printf '%s\n' 'temporaire autorisé' > /tmp/controle.txt
test ! -S /var/run/docker.sock && printf '%s\n' 'Socket Docker absent'

Los intentos de escritura en la carpeta de entrada y en la raíz deben fallar. Las escrituras en la carpeta de salida y en el espacio temporal deben completarse correctamente. Compruebe también que el identificador mostrado no corresponde a la cuenta de administrador.

Estas comprobaciones son pruebas funcionales concretas, no una auditoría de seguridad. En particular, que el socket no esté en esa ubicación no demuestra que no exista ninguna otra interfaz de administración.

Desde otro terminal de la máquina anfitriona, examine la configuración efectiva:

docker inspect agent-bac-a-sable

Revise los montajes, la red, el usuario y los límites. Si su imagen incluye una herramienta de diagnóstico de red, intente también conectarse a un destino de prueba: la conexión debe fallar. Que falte el programa utilizado para probarla no demuestra que esté bloqueada.

Después, inicie su agente con el comando documentado para su imagen. Asígnele una tarea acotada: leer el documento ficticio y escribir un informe en la carpeta de salida. Si no dispone de un modelo local dentro del entorno, esta tarea tendrá que esperar hasta que configure el acceso a la red.

Por último, añada un documento ficticio que contenga una inyección de instrucciones que solicite una escritura prohibida. El resultado esperado es que la operación quede bloqueada técnicamente, aunque el agente siga la instrucción maliciosa. Nuestro artículo sobre la inyección de instrucciones explica por qué esta comprobación complementa las indicaciones dadas al modelo.

5. Añadir solo los accesos necesarios

Para utilizar un modelo remoto, prepare una segunda configuración de red. Quitar el bloqueo sin más permite la comunicación con el exterior; ese cambio exige volver a evaluar los archivos y los secretos accesibles.

Una arquitectura que puede considerar consiste en mantener las herramientas de ejecución sin red y realizar las llamadas al modelo desde un servicio separado. Ese servicio conserva las credenciales y transmite únicamente los datos necesarios. Todo dato enviado al modelo sale del sandbox, aunque el proceso que ejecuta el código siga aislado.

Si el propio agente necesita acceder a la red, imponga las restricciones desde la infraestructura: paso obligatorio por un intermediario, filtrado de destinos y bloqueo de las rutas directas. Una variable de configuración de proxy no basta si el programa puede evitarla.

Distinga también entre un permiso técnico y la autorización para realizar una acción en un servicio. El acceso a una cuenta de correo puede permitir un envío indebido sin salir del contenedor. Prepare los borradores en el entorno aislado y someta su envío a una aprobación externa.

Para los conectores, la guía para elegir un servidor MCP complementa esta revisión. Un servidor remoto actúa con sus propias credenciales: aislar el terminal local no reduce automáticamente sus permisos.

Por último, trate los resultados como datos no fiables. Revise los cambios antes de incorporarlos; no ejecute directamente en su equipo un script generado por el agente. El artículo sobre la seguridad de los agentes de IA detalla estas otras vías de riesgo.

Problemas frecuentes

El agente no se inicia. Puede estar intentando escribir su configuración en una ubicación protegida o necesitar un usuario con nombre. Prepare una imagen adaptada y añada únicamente los espacios de escritura que haya identificado como necesarios. No permita modificar toda la raíz para resolver un error de caché.

No se puede acceder a los archivos de salida. Revise los propietarios y los permisos de la carpeta en la máquina anfitriona, así como las posibles reglas de seguridad locales. Evite conceder permisos de escritura a todos los usuarios.

El proceso se detiene durante una tarea. Consulte su estado y sus errores antes de aumentar los límites. La saturación puede deberse a una carga legítima, a un bucle o a un número excesivo de subprocesos.

El contenedor parece aislado, pero tiene permisos amplios. Busque montajes adicionales, conexiones a servicios de la organización e interfaces de administración. La documentación de seguridad del motor recuerda que los contenedores comparten mecanismos del núcleo y que ciertas configuraciones comprometen el aislamiento.

El modo sin privilegios de administrador reduce algunos riesgos relacionados con el motor. Para ejecutar código potencialmente hostil, considere una máquina virtual dedicada y desechable, sin datos sensibles compartidos.

Lista de comprobación antes del uso

Salga del terminal del contenedor después de la prueba. En esta configuración, la eliminación automática del contenedor no borra las carpetas compartidas: inspeccione su contenido y vuelva a crear un entorno limpio para la siguiente tarea.

  • Los datos proporcionados son necesarios y no contienen secretos ajenos a la tarea.
  • Las escrituras prohibidas fallan y las escrituras autorizadas funcionan.
  • Las conexiones externas están bloqueadas o controladas expresamente.
  • Los límites de recursos y las condiciones de parada están definidos.
  • Las acciones sensibles requieren una aprobación externa.
  • Los resultados se revisarán antes de utilizarlos.

El diagnóstico de seguridad de los agentes de IA permite completar esta lista según los accesos que haya concedido realmente.

Preguntas frecuentes

¿Basta con un contenedor para proteger un agente de IA?

Un contenedor aporta una capa de aislamiento cuya eficacia depende de los permisos concedidos. Si va a ejecutar código potencialmente hostil, considere también una máquina virtual dedicada y desechable, sin carpetas compartidas que contengan datos sensibles.

¿Se puede utilizar la API de un modelo sin dar acceso a todo Internet?

Sí, con una arquitectura que obligue a canalizar las comunicaciones a través de un intermediario controlado. El filtrado debe aplicarse fuera del alcance del agente y contemplar los destinos que realmente necesita.

¿Un entorno virtual de Python es un sandbox?

Un entorno virtual separa las dependencias de Python. No establece una barrera de seguridad para los archivos, las conexiones de red ni los comandos ejecutados con los permisos de su cuenta.

¿Es necesario entregar la clave de API al agente aislado?

Evite proporcionar una clave de uso general si un intermediario puede conservarla y realizar las llamadas autorizadas. Si la clave debe estar dentro del entorno, utilice una exclusiva para ese fin, limite sus permisos y prevea cómo revocarla.

En la misma sección

Neutralidad. Ningún enlace de afiliación. Ningún editor paga por ser evaluado, puntuado o clasificado. Las evaluaciones las dirige François Chollet, neutrales y factuales, y cada dato está fechado y con su fuente. Cómo puntuamos