-Даніель Басс
Деніел Бас
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
Захист агентів штучного інтелекту в цьому контексті стає настільки ж важливим, як і можливості самих агентів штучного інтелекту, якщо не більше.
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 controlПроблема: ризики безпеки штучного інтелекту в чутливих доменах
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
Інша стурбованість полягає в нових векторах атак, які впроваджують системи штучного інтелекту.Конвенціональні заходи безпеки не були розроблені для боротьби з атаками швидкого введення, спробами вилучення моделей або атаками отруєння даних.
Рішення має форму всеосяжної системи безпеки, побудованої навколо чотирьох основних периметрів -
Рішення: рамки чотирьох периметрів
Оскільки додатки AI відрізняються від стандартного програмного забезпечення тим, як вони обробляють входи, отримують дані, виконують дії та генерують виходи, вони також вводять унікальні ризики безпеки.
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.
Чотири периметричні рамкиfine-grained authorization throughout the AI lifecycle
Рамка складається з чотирьох частин:
- Prompt Filtering - Забезпечення того, що тільки підтверджені, безпечні входи досягають моделей AI.
- RAG Data Protection - Контроль доступу AI до зовнішніх джерел знань.
- Secure External Access - Визначення дозволів агента AI при взаємодії з зовнішніми інструментами.
- Response Enforcement - Застосування перевірок відповідності та фільтрація вихідів, що генеруються AI.
Where Does FGA Come In?
Як вже згадувалося раніше, традиційні методи контролю доступу, такі як RBAC, не справляються з динамічною, контекстно-залежною поведінкою штучного інтелекту.
- ABAC для Prompt Filtering моделі AI обробляють неструктуровані входи, що ускладнює застосування традиційних правил безпеки.
- ABAC для Prompt Filtering моделі AI обробляють неструктуровані входи, що ускладнює застосування традиційних правил безпеки.ABAC для Prompt Filtering
Як виглядає крок за кроком впровадження?
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.
Чотири Perimeter Framework в діїпідтвердження закликів, забезпечення захисту даних, обмеження зовнішнього доступу та модерація відповідейPermit.io AI Access ControlPermit.io1. Використання пробного фільтрування
1. Використання Prompt FilteringПерший периметр безпеки зосереджений на валідації та очищенні входів штучного інтелекту, перш ніж вони досягають моделі.Ми можемо застосувати структуровану обробку входів та застосувати політики доступу до запрошень, перш ніж вони досягають моделі штучного інтелекту:
- Контроль доступу на основі ролі, атрибуту та відносин здійснюється, забезпечуючи, щоб тільки затверджені параметри передавалися до AI.
- Всі порушення політики реєструються та блокуються в режимі реального часу, зберігаючи аудитоспроможну сліду рішень щодо доступу.
- Перевірки авторизації вбудовані в поточний валідаційний трубопровід, запобігаючи несанкціонованим даним впливати на вихід AI.
- Роль, атрибут і контроль доступу на основі відносин здійснюються, забезпечуючи, що тільки затверджені параметри передаються до AI. Будь-які порушення політики реєструються та блокуються в режимі реального часу, зберігаючи аудиторний слід рішення про доступ.
- Токенна валідація - Ефективний метод для простих перевірок, таких як довжина запису або загальна допустимість запущених входів в системі. Функції перевірки дозволів у цьому методі вивчають структуровані атрибути текстових записів.
- Паттерна відповідність - у цьому методі перевірка дозволів вивчає закономірності в тексті запису. Перевірка, наприклад, чи відповідає закономірність запиту SQL або прикладу коду.
- Класифікація AI - найсучасніший метод у цьому списку, класифікація AI використовує AI для аналізу запису за допомогою спеціальної системної записки, класифікуючи
- Токенна валідація - Ефективний метод для простих перевірок, таких як довжина прописки або загальна допустимість запущених входів в системі.Застосування токенів
- Відповідність шаблонів - у цьому методі перевірка дозволів розглядає шаблони в текстовому записі.Перевірка, наприклад, чи відповідає шаблон SQL-запиту або прикладу коду. Паттерні відповіді
- Класифікація AI - найсучасніший метод в цьому списку, класифікація AI використовує AI для аналізу промпту за допомогою спеціального системного промпту, класифікуючи його в структурований вхід, який може бути точно проаналізований в перевірці дозволів. Класифікація ІТ
- Фінограмована політика використовує передові моделі фільтрації даних, такі як управління доступом на основі відносин, щоб дозволити передові фільтрації запитів до двигуна політики.
- Векторні та графічні джерела, пов'язані з агентами AI, мають метадані, які можуть допомогти двигуну маніпулювати неструктурованим запитом, фільтруючи його, щоб включати тільки дозволені дані.
- Кожен раз, коли агент отримує дані з бази знань RAG, він фільтрує результати за дозволом користувача.
- Векторні та графічні джерела, пов'язані з агентами AI, мають метадані, які можуть допомогти двигуну маніпулювати неструктурованим запитом, фільтруючи його, щоб включати тільки дозволені дані.
- Кожен раз, коли агент отримує дані з бази знань RAG, він фільтрує результати за дозволом користувача.
FilterObjects
— У цьому методі графічне застосування отримує всі відповідні дані з RAG, а потім фільтрує їх за дозволами користувача. Перевага цієї функції полягає в тому, що воно зберігає двигун політики без статусу і не знає даних RAG.GetUserPermissions
- У цьому методі агент надає RAG неструктурований запит. RAG потім викликає функціюGetUserPermissions
, додаючи запит фільтра до неструктурованого запиту RAG. Це дозволяє фільтрувати запит тільки до ресурсів, до яких користувач може отримати доступ.FilterObjects
— У цьому методі графічний додаток отримує всі відповідні дані з RAG, а потім фільтрує їх за дозволами користувача.FilterObjects
GetUserPermissions
- У цьому методі агент надає RAG неструктурований запит. RAG потім викликає функціюGetUserPermissions
, додаючи запит фільтра до неструктурованого запиту RAG. Це дозволяє фільтрувати запит тільки до ресурсів, до яких користувач може отримати доступ.GetUserPermissions
GetUserPermissions
Захист даних RAG з Langchain
Захист даних RAG з LangchainLangchain, знаменита рамка додатків AI, відома (також) своїми компонентами-ретриверами, які надають велику підтримку в налаштованих ретриверах, які можуть бути зібрані з будь-яким джерелом даних, що полегшує впровадження безпечного RAG. Наприклад, за допомогою
SelfQueryRetriever
ви можете упакувати звичайний RAG з функцієюGetUserPermissions
, яка додасть фільтровані дані до запиту. Ось приклад PermitSelfQueryRetriever, який отримує користувача, дію та тип ресурсів RAG для фільтрації результатів для LLM:SelfQueryRetriever
GetUserPermissions
# 1. Будівництво невеликих вбудованих в пам'яті векторних сховищ = OpenAIEmbeddings() vectorstore = FAISS.from_documents(docs, embedding=embeddings) # 2. Ініціалізація 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,
# 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, )- 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.
- 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Розробники можуть призначати ідентичності машин агентам AI, обмежуючи їх можливості тільки попередньо затвердженими функціями.
- Безпека прямого доступу - найпростіший рівень. Користувач запитує агента ІТ для виконання операції, наприклад, HTTP-розмови. Агент ІТ вміє перевіряти, чи дозволяється операція, враховуючи поточний контекст і користувача.
- Спілкування агента-агента - на цьому наступному рівні ми вимагаємо каскадного потоку ідентичності та дозволів, які дозволяють агенту виконувати дії самостійно на основі принципу найменшої привілеї. На цьому рівні ми хотіли б використовувати зв'язок між ідентичностями - людським і нелюдським - для каскаду різних рівнів дозволів.
- Доступний потік запитів
- Безпека прямого доступу - найпростіший рівень. Користувач просить агента AI виконати операцію, наприклад, HTTP-дзвінок.Безпека прямого доступу
- Спілкування від агента до агента - на цьому наступному рівні нам потрібен каскадний потік ідентичності та дозволів, які дозволяють агентам виконувати дії самостійно на основі принципу найменшої привілеї.Спілкування агента з агентом
- Потоки запитів доступу - найбільш захоплюючий рівень зовнішнього доступу - це коли агент AI розуміє необхідність запитувати доступ безпосередньо від людського користувача, коли він хоче виконати операцію.Потоки запитів доступу
MCP, Human-in-the-Loop і зовнішній доступ
MCP, Human-in-the-Loop і зовнішній доступModel Context Protocol - це новий протокол, запроваджений Anthropic, який вирішує проблему дозволу агентам AI виконувати проактивні дії і служить найбільшим засобом для забезпечення зовнішнього доступу.
У наступному прикладі ми показуємо MCP-сервер, який знає, як управляти потоками запитів доступу, приводячи людей в ланцюг і використовуючи API Permit.io для запиту дозволів.
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: ""Iniciate 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 requesting access for resource_name: The name of the restaurant to request access for """ = wait permit.elements.login_as({ "userId": slugify(username), "tenant: "default"}) print(login_sending_default) url ="https://pay.permit.io/v2/facts/{PROJECT_ID}/{ENV_ID} /{ENV_
@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 Затвердити відповіді AI –
4 Валідуйте відповіді AI –Останній периметр примушує до зміцнення контенту та дотримання відповідей, що генеруються AI. Це можна зробити, створюючи робочий процес, який застосовує фільтрацію, засновану на політиці, перш ніж доставляти вихід AI:
- Комбіновані робочі процеси з перевірки даних та авторизації забезпечують, що тільки підтверджені та дозволені дані можуть переходити вперед.
- Відповідь, що повертається користувачам, може бути редагована на основі заздалегідь визначених обмежень, що дозволяє маскувати дані або повідомляти користувача про обмеження використання.
Ось три способи фільтрування запрошень - від найпростішого до найсучаснішого:
Фільтрування за допомогою PydanticAI
Підтримка фільтрації з PydanticAIЩоб найкраще продемонструвати реалізацію ефективного фільтрації проб, ось приклад використання інструментів PydanticAI для фільтрації входів користувачів до агентів AI. PydanticAI - це рамка агентів, яка використовує знамениту бібліотеку Python Pydantic та її можливості статичного друку і перетворює її на структуровану структуру AI, яка обробляє неструктуровані дані.
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], query: FinancialQuery, ) -> bool: ""Ключові перевірки: - Користувач явно вибрав на AI фінансову консультацію, Фальшивий інакше "" спробуйте: #Classify якщо прохання запитує пораду_seeking_advice = classify_promptforad_vice(query.vice) Return Information: 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_ad
@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. Захист персональних даних –
2. Захист персональних даних –Далі, ми захищаємо recovery-augmented generation (RAG) запити, гарантуючи, що моделі AI можуть отримати доступ тільки до авторизованих джерел знань.Повернення збільшеного покоління (RAG)авторизовані джерела знань
Політика з тонким зерном використовує передові моделі фільтрації даних, такі як контроль доступу на основі відносин, щоб дозволити передові фільтрації запитів до двигуна політики.
Коли програма агента виконує фільтрацію RAG, вона використовує один з наступних методів:
The following repository contains the full implementation of the framework for Langchain: https://github.com/permitio/langchain-permit
https://github.com/permitio/langchain-permit3. Безпечний зовнішній доступ –
3. Безпечний зовнішній доступ –Агенти штучного інтелекту часто взаємодіють з зовнішніми API, сервісами та інструментами автоматизації. Без належного контролю доступу вони ризикують виконувати несанкціоновані дії. Таким чином, ми повинні переконатися, що операції, спрямовані на штучний інтелект, обмежені на основі політики ідентичності машини.
Фільтрування відповідей за допомогою Langflow
Фільтрування відповідей за допомогою 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
Заключення
Системи штучного інтелекту швидко інтегруються в додатки в різних галузях, але їх рамки безпеки залишаються недорозвиненими порівняно з традиційним програмним забезпеченням.Без належного контролю доступу, що усвідомлює ідентичність, агенти штучного інтелекту ризикують викрити конфіденційні дані, виконати несанкціоновані операції та генерувати відповіді, які не відповідають рекомендаціям щодо відповідності.
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
Це означає, що ця галузь все ще відносно нова, і кращі практики для захисту агентів штучного інтелекту все ще розвиваються. рамка чотирьох периметрів є експериментальним підходом, і хоча вона забезпечує міцний фундамент, я визнаю, що розгортання в реальному світі завжди вимагає подальшого удосконалення та адаптації.
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