-Daniel Bass
de Daniel Bass
La mejora del rendimiento de las aplicaciones a través del uso de los agentes de IA se está convirtiendo en una práctica muy común, ya sea debido al hype en toda la industria o a casos de uso útiles reales.
These AI agents, however, often require access to highly sensitive data, introducing significant security risks. Without standardized access control solutions, development teams often build security measures from scratch—leading to cases where AI assistants expose sensitive patient information and several AI agents being compromised through sophisticated prompt injection attacks.
AI assistants expose sensitive patient informationsophisticated prompt injection attacks
La protección de los agentes de IA en este contexto se está volviendo tan importante como las capacidades de los propios agentes de IA, si no más.
To address this problem, we at Permit.io have been working for a while on a structured security approach I wish to introduce to you today:
Permit.ioThe Four-Perimeter FrameworkThe Four-Perimeter Framework
This method provides a comprehensive strategy for protecting AI agents by implementing fine-grained access control, ensuring compliance, and mitigating potential attack vectors. Before I go into the solution, let’s talk more about the problem space.
fine-grained access controlEl problema: los riesgos de seguridad de la IA en dominios sensibles
Traditional application security measures and access control mechanisms fall short when it comes to handling AI agents. While conventional access control systems like role-based access control (RBAC) excel at managing static permissions, they struggle with the dynamic nature of AI responses. Unlike traditional applications where inputs map to predictable outputs and access patterns are well-defined, AI generates unique responses for each query. This means the access control and input validation techniques we’re used to can’t anticipate all possible outputs.
role-based access control (RBAC)
The way AI systems access data also doesn’t fit security standards. To provide accurate and helpful responses, AI agents need broad access to various data sources and knowledge bases. Classic RBAC proves too rigid for this need - you can’t simply assign static permissions when the data requirements change based on context. This calls for a more sophisticated, attribute-based approach that can make dynamic access decisions.
attribute-based
Otra preocupación son los nuevos vectores de ataque que introducen los sistemas de IA. Las medidas de seguridad convencionales no fueron diseñadas para manejar ataques de inyección rápida, intentos de extracción de modelos o ataques de envenenamiento de datos.
La solución viene en forma de un marco de seguridad integral construido en torno a cuatro perímetros esenciales -
La solución: el marco de cuatro perímetros
Dado que las aplicaciones de IA difieren del software estándar en cómo procesan las entradas, recuperan datos, ejecutan acciones y generan salidas, también introducen riesgos de seguridad únicos.Para abordar estos desafíos, necesitamos un enfoque de seguridad estructurado que aplique control de acceso en cada etapa de la interacción de IA. Y eso es exactamente lo que quiero mostrar aquí:
The Four-Perimeter Framework is designed to enforce identity-aware, fine-grained authorization throughout the AI lifecycle. It introduces security boundaries that govern what data AI models can access, what operations they can perform, and how their responses are validated.
Cámara de cuatro perímetrosfine-grained authorization throughout the AI lifecycle
El marco consta de cuatro partes:
- Prompt Filtering – Garantizar que solo las entradas seguras validadas lleguen a los modelos de IA.
- RAG Data Protection – Controlar el acceso de IA a las fuentes de conocimiento externas.
- Secure External Access – Definir los permisos de los agentes de IA cuando interactúan con herramientas externas.
- Response Enforcement – Aplicar controles de cumplimiento y filtrar las salidas generadas por IA.
Aplicando los principios de control de acceso de grano fino (FGA) a través de estos perímetros, los agentes de IA permanecen seguros, audibles y conformes - sin sacrificar su flexibilidad y funcionalidad.
Control de acceso de grano fino (FGA)seguro, audible y conforme¿Dónde entra la FGA?
Como se mencionó anteriormente, los métodos tradicionales de control de acceso como el RBAC no manejan el comportamiento dinámico y contextual de la IA. Aquí es donde entra en juego la autorización de grano fino (FGA), específicamente a través del control de acceso basado en atributos (ABAC) y el control de acceso basado en relaciones (ReBAC):
- ABAC para Prompt Filtering Los modelos de IA procesan entradas no estructuradas, lo que dificulta la aplicación de reglas de seguridad tradicionales.Los modelos de IA procesan entradas no estructuradas, lo que dificulta la aplicación de las reglas de seguridad tradicionales. ABAC resuelve esto extrayendo atributos estructurados de las solicitudes de IA y utilizándolos en decisiones de acceso basadas en políticas.ABAC para filtración prompt
- ReBAC para protección de datos de RAG La generación aumentada por la recuperación (RAG) permite a los modelos de IA extraer información de bases de datos vectoriales.ReBAC proporciona una forma natural de fortalecer la seguridad en esta configuración mediante la definición de relaciones entre usuarios, fuentes de datos y agentes de IA. En lugar de asignar permisos estáticos, ReBAC otorga o niega el acceso dinámicamente en función de cómo los objetos de datos se relacionan entre sí, permitiendo permisos de recuperación conscientes del contexto.
- ReBAC para protección de datos de RAG La generación aumentada por la recuperación (RAG) permite a los modelos de IA extraer información de bases de datos vectoriales.ReBAC proporciona una forma natural de fortalecer la seguridad en esta configuración mediante la definición de relaciones entre usuarios, fuentes de datos y agentes de IA. En lugar de asignar permisos estáticos, ReBAC otorga o niega el acceso dinámicamente en función de cómo los objetos de datos se relacionan entre sí, permitiendo permisos de recuperación conscientes del contexto. ReBAC para protección de datos de RAG
- Los controles de autorización se integran en el tubo de validación instantánea, impidiendo que los datos no autorizados influyan en las salidas de IA.
- Los controles de acceso basados en roles, atributos y relaciones se aplican, asegurando que solo los parámetros aprobados pasan a la IA.
- Cualquier violación de políticas se registra y bloquea en tiempo real, preservando un rastro audible de decisiones de acceso.
- Los controles de autorización se integran en el tubo de validación instantánea, evitando que los datos no autorizados influyan en las salidas de IA.
- Los controles de acceso basados en roles, atributos y relaciones se aplican, asegurando que solo los parámetros aprobados pasan a la IA.
- Cualquier violación de las políticas se registra y bloquea en tiempo real, preservando un rastro audible de decisiones de acceso.
- Validación de Token - Un método eficiente para comprobaciones simples como la longitud de la prompt o la tolerancia general de las entradas en ejecución en el sistema. Las funciones de comprobación de permisos en este método examinan los atributos estructurados de las promptas textuales.
- Pattern Matching - en este método, la comprobación de permisos examina los patrones en el texto de la prompt. Verificando, por ejemplo, si el patrón coincide con una consulta SQL o ejemplo de código.
- Clasificación de la IA - el método más avanzado en esta lista, la clasificación de la IA utiliza la IA para analizar la prompt usando una prompt del sistema dedic
- Validación de token - Un método eficiente para comprobaciones simples como la longitud de la prompt o la tolerancia general de las entradas en ejecución en el sistema. Las funciones de verificación de permisos en este método examinan los atributos estructurados de las promptas de texto.Validación de Token
- Pattern Matching - en este método, la verificación de permisos examina los patrones en el texto prompt. Verificación, por ejemplo, si el patrón coincide con una consulta SQL o ejemplo de código. Pattern Matching Pattern Matching
- Clasificación de la IA - el método más avanzado en esta lista, la clasificación de la IA utiliza la IA para analizar el prompt usando un prompt del sistema dedicado, clasificándolo en una entrada estructurada que puede ser analizada con precisión en la verificación de permisos. Clasificación de la inteligencia artificial
- La política de granos finos utiliza modelos avanzados de filtración de datos, como el control de acceso basado en relaciones, para permitir la filtración avanzada de consultas al motor de políticas.
- Las fuentes vectoriales y gráficas conectadas a los agentes de IA tienen metadatos que pueden ayudar al motor a manipular la consulta no estructurada, filtrándola para incluir solo datos permitidos.
- Cada vez que el agente recoge datos de la base de conocimiento RAG, filtra los resultados con el permiso del usuario.
- La política de grano fino utiliza modelos avanzados de filtración de datos, como el control de acceso basado en relaciones, para permitir la filtración avanzada de consultas al motor de políticas.
- Las fuentes vectoriales y gráficas conectadas a los agentes de IA tienen metadatos que pueden ayudar al motor a manipular la consulta no estructurada, filtrándola para incluir sólo datos permitidos.
- Cada vez que el agente extrae datos de la base de conocimientos RAG, filtra los resultados por permiso del usuario.
FilterObjects
—En este método, la aplicación gráfica recoge todos los datos pertinentes del RAG y luego los filtra por permisos de usuario. La ventaja de esta función es que mantiene el motor de políticas sin estatus y no consciente de los datos de RAG.GetUserPermissions
- En este método, el agente proporciona al RAG una consulta no estructurada. El RAG entonces llama la funciónGetUserPermissions
, adjuntando una consulta de filtro a la consulta RAG no estructurada. Esto permite que la consulta se filtre a los recursos únicos a los que el usuario puede acceder.FilterObjects
—En este método, la aplicación gráfica recoge todos los datos relevantes del RAG y luego los filtra por permisos de usuario.FilterObjects
GetUserPermissions
- En este método, el agente proporciona a la RAG una consulta no estructurada. El RAG entonces llama la funciónGetUserPermissions
, adjuntando una consulta de filtro a la consulta RAG no estructurada. Esto permite que la consulta se filtre a sólo los recursos a los que el usuario puede acceder.- Using models like MCP, which defines a server-client model where AI agents interact with external services, is a great step in enabling security for AI external access (e.g., databases, APIs, payment systems).
- The AI action infrastructure can use a service like Permit.io to perform authorization checks at the action level, checking who’s making a request and what action they want to perform.
- Developers are able to assign machine identities to AI agents, limiting their capabilities to pre-approved functions only.
- El uso de modelos como el MCP, que define un modelo servidor-cliente donde los agentes de IA interactúan con servicios externos, es un gran paso en permitir la seguridad para el acceso externo de IA (por ejemplo, bases de datos, API, sistemas de pago).
- The AI action infrastructure can use a service like Permit.io to perform authorization checks at the action level, checking who’s making a request and what action they want to perform. Permit.io
- Los desarrolladores son capaces de asignar identidades de máquina a los agentes de IA, limitando sus capacidades a solo funciones pre-aprobadas.
- Seguridad de acceso directo - el nivel más sencillo. Un usuario pide a un agente de IA que realice una operación, como una llamada HTTP. El agente de IA sabe comprobar si la operación está permitida, teniendo en cuenta el contexto actual y el usuario.
- Comunicación de agente a agente - en este próximo nivel, requerimos un flujo en cascada de identidades y permisos que permitan a los agentes realizar acciones por sí mismos sobre la base del principio del mínimo privilegio. En este nivel, querríamos utilizar la relación entre identidades - humano y no humano - para cascadar diferentes niveles de permisos.
- Flujos de solicitud de acceso - el nivel más emocionante de
- Seguridad de acceso directo - el nivel más simple.Un usuario pide a un agente de IA que realice una operación, como una llamada HTTP.El agente de IA sabe comprobar si la operación está permitida, teniendo en cuenta el contexto actual y el usuario. Seguridad de acceso directo
- Comunicación de agente a agente - en este siguiente nivel, necesitamos un flujo en cascada de identidades y permisos que permitan a los agentes realizar acciones por sí mismos basándose en el principio del mínimo privilegio. En este nivel, querríamos utilizar la relación entre identidades - humanas y no humanas - para cascarar diferentes niveles de permisos.Comunicación de agente a agente
- Flujos de solicitud de acceso - el nivel más emocionante de acceso externo es cuando el agente de IA entiende la necesidad de solicitar acceso directamente a un usuario humano cuando quiere realizar una operación.Flujos de solicitud de acceso
MCP, Human-in-the-Loop y Acceso Externo
MCP, Human-in-the-Loop y acceso externoModel Context Protocol es un nuevo protocolo introducido por Anthropic, que resuelve el problema de permitir que los agentes de IA realicen acciones proactivas y sirve como el mayor facilitador para asegurar el acceso externo.
En el siguiente ejemplo, mostramos un servidor MCP que sabe cómo gestionar los flujos de solicitudes de acceso al introducir a los humanos en el loop y utiliza las API de Permit.io para solicitar permisos.
You can see the full code example for the MCP access request server here: https://github.com/permitio/permit-mcp
https://github.com/permitio/permit-mcp
@mcp.tool() async def request_access(username: str, resource_name: str) -> dict: "" Iniciar la llamada de solicitud de acceso a un recurso específico en el sistema Args: nombre de usuario: el nombre de usuario de la persona que solicita el recurso de acceso: el tipo de recurso que el usuario solicita el acceso a resource_name: el nombre del restaurante para solicitar el acceso a """ = wait permit.elements.login_as({ "userId": slugify(username), "tenant": "default"}) print(login): url = "https://pay.permit.io/v2/facts/{PROJECT_ID}/{ENV_ID}/{ENV_ID
@mcp.tool() async def request_access(username: str, resource: str, resource_name: str) -> dict: """ Initiate access request call to a specific resource in the system Args: username: The username of the person requesting access resource: The resource type the user is request access for resource_name: The name of the restaurant to request access for """ login = await permit.elements.login_as({ "userId": slugify(username), "tenant": "default"}) print(login) url = f"https://api.permit.io/v2/facts/{PROJECT_ID}/{ENV_ID}/access_requests/{ELEMENTS_CONFIG_ID}/user/{slugify(username)}/tenant/default" payload = { "access_request_details": { "tenant": "default", "resource": resource, "resource_instance": resource_name['id'], "role": "viewer", }, "reason": f"User {username} requests role 'viewer' for {resource_name}" } headers = { "authorization": "Bearer YOUR_API_SECRET_KEY", "Content-Type": "application/json", } async with httpx.AsyncClient() as client: await client.post(url, json=payload, headers=headers) return "Your request has been sent. Please check back later."
4. Validar las respuestas de IA –
4 Validar las respuestas de IA –El perímetro final aplica la moderación del contenido y la conformidad a las respuestas generadas por la IA. Esto se puede hacer creando un flujo de trabajo que aplica la filtración basada en políticas antes de entregar las puertas de IA:
- Se puede añadir una verificación de permisos a la aplicación del agente, lo que permite la aplicación de políticas en cada paso de la cadena antes de que el usuario reciba realmente una respuesta.
- Los flujos de trabajo combinados de validación de datos y autorización aseguran que sólo los datos validados y permitidos pueden avanzar.
- La respuesta que vuelve a los usuarios puede ser editada basándose en limitaciones predefinidas, permitiendo así el enmascaramiento de datos o la notificación al usuario de las limitaciones de uso.
- Se puede añadir una verificación de permisos a la aplicación del agente, lo que permite la aplicación de políticas en cada paso de la cadena antes de que el usuario reciba una respuesta.
- Los flujos de trabajo combinados de validación de datos y autorización aseguran que sólo los datos validados y permitidos pueden avanzar.
- La respuesta que devuelve a los usuarios puede ser editada basándose en limitaciones predefinidas, permitiendo así el enmascaramiento de datos o notificando al usuario de limitaciones de uso.
Filtrado de la respuesta con Langflow
Filtrado de respuesta con LangflowIn the following example, we use Langflow, a visual no-code AI applications editor, to create a permissions check component that’s positioned before any chat response to the user. Using LangFlow's friendly flow modeling capabilities, you can easily append another component that masks unwanted details in returned responses. This repository contains all the access control components required for secured Langflow applications.
This repository
Conclusiones
Los sistemas de IA se están integrando rápidamente en aplicaciones de toda la industria, pero sus marcos de seguridad siguen siendo subdesarrollados en comparación con el software tradicional. sin un control de acceso consciente de la identidad adecuado, los agentes de IA corren el riesgo de exponer datos sensibles, ejecutar operaciones no autorizadas y generar respuestas que se encuentren fuera de las directrices de cumplimiento.
El Marco de Cuatro Perímetros ofrece una forma estructurada de proteger los flujos de trabajo de IA en todas las etapas, desde la validación de prompts y la protección de datos de generación aumentada por recuperación (RAG) hasta el control de acciones externas impulsadas por IA y la aplicación de la conformidad de respuesta.Al aprovechar la autorización de grano fino (FGA) con ABAC y ReBAC, los desarrolladores pueden asegurarse de que los agentes de IA permanezcan funcionales y seguros, adaptándose dinámicamente a los escenarios de seguridad del mundo real.
Instead of building access control from scratch, Permit.io’s AI Access Control integrations with PydanticAI, LangChain, MCP, and LangFlow allow teams to embed security directly into their AI applications—without disrupting development workflows. Try it yourself here.
Try it yourself here
Dicho esto, este campo sigue siendo relativamente nuevo, y las mejores prácticas para asegurar a los agentes de IA siguen evolucionando.El Marco de Cuatro Perímetros es un enfoque experimental, y aunque proporciona una base sólida, reconozco que las implementaciones en el mundo real siempre requieren una mayor refinamiento y adaptación.
I’d love to hear your feedback, thoughts, and ideas on how to improve this framework to make it even better for production-ready AI systems - comment here, or hit me up in our Slack community.
Slack community
Al combinar ABAC y ReBAC, las aplicaciones de IA obtienen mecanismos de control de acceso flexibles y orientados a políticas que se adaptan a diferentes flujos de trabajo de IA sin requerir una intervención manual.
¿Cómo es una implementación paso a paso?
Let's walk through a practical implementation to see the Four-Perimeter Framework in action. This example secures an AI agent by validating prompts, enforcing data protection, restricting external access, and moderating responses—leveraging Permit.io AI Access Control integrations at each step.
Cámara de cuatro perímetros en acciónvalidar las solicitudes, hacer cumplir la protección de datos, restringir el acceso externo y moderar las respuestasPermit.io AI Access ControlPermit.io1. Implementar el filtro de prompt
1. Implementar el filtro promptEl primer perímetro de seguridad se centra en la validación y sanitización de las entradas de IA antes de que lleguen al modelo.
Aquí están los tres métodos para filtrar las promesas - de la más fácil a la más avanzada:
Filtrado rápido con PydanticAI
Filtrado rápido con PydanticAIPara demostrar mejor la implementación de la filtración de prompt eficiente, aquí está un ejemplo de usar las herramientas PydanticAI para filtrar las entradas de los usuarios a los agentes de IA. PydanticAI es un marco de agentes que aprovecha la famosa biblioteca Pydantic de Python y sus capacidades de escritura estática y la convierte en un marco de IA estructurado que maneja datos no estructurados.
The following GitHub repository contains a full implementation of the framework for PydanticAI: github.com/permitio/permit-pydanticai
github.com/permitio/permit-pydanticai
@financial_agent.tool async def validate_financial_query( ctx: RunContext[PermitDeps], consulta: FinancialQuery, ) -> bool: ""Cheques clave: - Usuario ha optado explícitamente para el asesoramiento financiero de la IA, falso de lo contrario "" intentar: #Classificar si el prompt está solicitando asesoramiento es correctamente registrado y verificado - Clasifica si el prompt está solicitando asesoramiento Args: ctx: Contexto que contiene Permit cliente y consulta de ID de usuario: La consulta financiera para validar Returns: bool: True si el usuario ha consentido el asesoramiento de la IA, Falso de lo contrario "" intentar: {_
@financial_agent.tool
async def validate_financial_query(
ctx: RunContext[PermitDeps],
query: FinancialQuery,
) -> bool:
"""Key checks:
- User has explicitly opted in to AI financial advice
- Consent is properly recorded and verified
- Classifies if the prompt is requesting advice
Args:
ctx: Context containing Permit client and user ID
query: The financial query to validate
Returns:
bool: True if user has consented to AI advice, False otherwise
"""
try:
# Classify if the prompt is requesting advice
is_seeking_advice = classify_prompt_for_advice(query.question)
permitted = await ctx.deps.permit.check(
# The user object with their attributes
{
"key": ctx.deps.user_id,
},
# The action being performed
"receive",
# The resource being accessed
{
"type": "financial_advice",
"attributes": {"is_ai_generated": is_seeking_advice},
},
)
if not permitted:
if is_seeking_advice:
return "User has not opted in to receive AI-generated financial advice"
else:
return "User does not have permission to access this information"
return True
except PermitApiError as e:
raise SecurityError(f"Permission check failed: {str(e)}")
2. Enforce Protección de Datos –
2. Enforzar la protección de datos –Siguiente, protegemos las consultas de generación aumentada de recuperación (RAG) asegurando que los modelos de IA solo puedan acceder a fuentes de conocimiento autorizadas . Esto se puede lograr mediante la filtración fina de los datos del agente de IA en nombre del usuario dentro del flujo de trabajo de IA:
Generación aumentada de recuperación (RAG)fuentes de conocimiento autorizadas
Cuando la aplicación de agentes realiza la filtración RAG, utiliza uno de los siguientes métodos:
GetUserPermissions
GetUserPermissions
Protección de datos de RAG con Langchain
Protección de datos RAG con LangchainLangchain, el famoso marco de aplicaciones de IA, es conocido (también) por sus componentes de retriever que proporcionan un gran soporte en retrieveres personalizados que pueden ser montados con cualquier tipo de fuente de datos, lo que hace que la implementación de RAG seguro sea fácil. Por ejemplo, con el SelfQueryRetriever
, puede envolver el RAG habitual con una función GetUserPermissions
que anexará los datos filtrados a la consulta. Aquí está un ejemplo del PermitSelfQueryRetriever que obtiene al usuario, la acción y el tipo de recursos de RAG para filtrar los resultados para el LLM:
SelfQueryRetriever
GetUserPermissions
# 1. Construye pequeñas incorporaciones vectoriales en la memoria = OpenAIEmbeddings() vectorstore = FAISS.from_documents(docs, embedding=embeddings) # 2. Inicia el PermitSelfQueryRetriever retriever = PermitSelfQueryRetriever( api_key=os.getenv("PERMIT_API_KEY", ""), pdp_url=os.getenv("PERMIT_PDP_URL"), usuario=USER, resource_type=RESOURCE_TYPE, acción=ACTION, llm=embeddings, vectorstore=vectorstore, enable_limit=False,
# 1. Build a small in-memory vector store
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(docs, embedding=embeddings)
# 2. Initialize the PermitSelfQueryRetriever
retriever = PermitSelfQueryRetriever(
api_key=os.getenv("PERMIT_API_KEY", ""),
pdp_url=os.getenv("PERMIT_PDP_URL"),
user=USER,
resource_type=RESOURCE_TYPE,
action=ACTION,
llm=embeddings,
vectorstore=vectorstore,
enable_limit=False,
)
The following repository contains the full implementation of the framework for Langchain: https://github.com/permitio/langchain-permit
https://github.com/permitio/langchain-permit3. Acceso externo seguro –
3. Acceso externo seguro –Los agentes de IA a menudo interactúan con APIs, servicios y herramientas de automatización externas. Sin un control de acceso adecuado, corren el riesgo de ejecutar acciones no autorizadas.
Mientras que los GPT y las interfaces de lengua natural no son nuevos, permitirles realizar acciones en nombre de los usuarios es un reto bastante nuevo con el que luchan muchos ingenieros.