AI-агентам нужны границы, а не мастер-ключи

Предоставление AI-агенту доступа к вашему приложению через MCP — это риск. Вы вручаете связку ключей в надежде, что они откроют только определенные двери. Такое доверие — это угроза безопасности.

При создании MCP-инструментов для многопользовательского (multi-tenant) приложения на Laravel вы должны решить одну задачу: как позволить агенту управлять приложением, не предоставляя доступ к чужим данным.

Каждый MCP-инструмент работает как эндпоинт. Агент вызывает инструмент, и ваш сервер выполняет код. В многопользовательской архитектуре каждый инструмент должен отвечать на два вопроса:

  • Разрешено ли вам это делать?
  • Разрешено ли вам делать это именно здесь?

Если вы проигнорируете их, вы создадите дыру в безопасности.

Веб-запросы используют сессии для управления многопользовательским режимом. MCP-инструменты используют токены. Здесь нет сессий и нет middleware для установки контекста текущего тенанта. Если вы полагаетесь на глобальные области видимости (global scopes), которые ищут «текущую организацию» в сессии, они ничего не найдут. Запрос, который должен быть ограниченным, может вернуть все строки из вашей базы данных.

Чтобы оставаться в безопасности, я использую эти четыре правила:

  • Явная фильтрация: Никогда не полагайтесь на неявную область видимости (ambient scope) при аутентификации по токену. Всегда используйте один и тот же trait для фильтрации по организации.
  • Используйте UUID: Никогда не используйте автоинкрементные ID. Используйте непредсказуемые идентификаторы, чтобы агенты не могли угадать другие записи.
  • Повторно используйте разрешения: Не создавайте новые наборы разрешений для агентов. Используйте те же строки способностей (ability strings), что и ваше веб-приложение.
  • Помечайте побочные эффекты: Используйте аннотации, чтобы пометить инструменты как «только для чтения» (read-only) или «с возможностью записи» (write-enabled).

Используя один trait для поиска организации, вы создаете единую точку для аудита. Если поиск возвращает null, инструмент сообщает агенту, что запись не найдена. Агент не получает никакой информации о других тенантах.

Это не проблема AI. Это проблема многопользовательской архитектуры и авторизации. MCP упрощает доступ к вашему приложению, поэтому вы должны строго соблюдать границы.

Агент должен делать именно то, что может делать человек в рамках своего собственного тенанта, и ничего больше.

Source: https://dev.to/nasrulhazim/giving-an-ai-agent-the-keys-without-giving-it-the-building-rbac-org-scoped-mcp-tools-in-laravel-43oi

Optional learning community: https://t.me/GyaanSetuAi