Ограничьте доступные ассистенту инструменты

КибербезопасностьBeginner
Практиковаться сейчас

Введение

Проектный ассистент помогает коллегам читать планы. Он предлагает вызов инструмента — структурированный запрос вроде documents.read. Tool Server выполняет действие. Правдоподобное предложение не даёт права на выполнение.

Вы обслуживаете учебный сервис с синтетическими данными. Начните с нормального чтения, затем двумя небольшими правками уберите лишние права записи и удаления. Предложения детерминированно воспроизводятся, а не поступают от работающей модели. Аутентификация, решения сервера и операции с документами реальны. Эта работа не проверяет устойчивость к инъекциям в запросы.

Используйте Policy Editor для конфигурации, Test Client для подтверждённых запросов и Assistant Tool Lab для страницы воспроизведения. Терминалы работают под разными пользователями одной системы. Policy Editor намеренно имеет права обслуживания; Test Client не может менять политику или применять sudo. Достаточно базового знакомства с терминалом.

Сохраните чтение и уберите запись

На этом шаге наблюдайте обычное чтение документа, затем уберите у ассистента право записи.

Чтобы начать этот шаг, выберите вкладку Assistant Tool Lab в интерфейсе лабораторной работы.

Учебные аккаунты — alice и bob. Principal — личность пользователя, установленная аутентификацией. У обоих есть роль assistant, объединяющая права инструментов. Документы синтетические: alice-notes принадлежит Alice, bob-notes — Bob, а team-plan Bob открыл Alice. Только demo-pad предназначен для одноразовых демонстраций.

Перейдите на вкладку Assistant Tool Lab. Выберите alice, введите пароль training-alice и нажмите Sign in. Оставьте инструмент documents.read и документ alice-notes, затем нажмите Replay proposal. Трассировка отделяет недоверенное предложение от результата сервера. Ожидайте HTTP 200, субъекта alice, решение allowed и Synthetic Alice planning notes. Это настоящее чтение документа.

Assistant Tool Lab отделяет повторённое предложение от разрешённого результата сервера

Перейдите на вкладку Test Client. Подготовленная команда assistant отправляет HTTP-запросы с аутентифицированным аккаунтом. replay отправляет предложение через маршрут повтора; call обращается прямо к обработчику инструмента. Следующие два слова задают инструмент и документ. Выполните:

Перед выполнением следующей команды перейдите на вкладку Test Client.

assistant replay documents.read team-plan

Ожидаются HTTP 200 и Synthetic shared project plan. Теперь наблюдайте избыточные права только на одноразовом документе:

assistant replay documents.write demo-pad

Ожидаются HTTP 200 и "effect": "written". Сервер действительно изменил демонстрационный документ. Роль только для чтения не должна этого делать.

Перейдите на вкладку Policy Editor. cat выводит файл; этот абсолютный путь указывает действующий список разрешённых инструментов:

Перед выполнением следующей команды перейдите на вкладку Policy Editor.

cat /home/labex/project/tools.json

JSON использует имена и значения в кавычках, двоеточие между ними и квадратные скобки для списка. В assistant сейчас есть чтение, запись и удаление. Удаление пункта меню оставит прямые запросы открытыми; проверка обработчика загружает этот список при каждом запросе.

Замените файл следующей промежуточной политикой. cat > path записывает текст вместо печати. Заключённый в кавычки EOF начинает буквальный here-document; завершающий EOF должен стоять отдельно на строке. Небольшой файл заменяется полностью, поэтому повторение исправляет опечатку.

cat > /home/labex/project/tools.json <<'EOF'
{
  "assistant": ["documents.read", "documents.delete"]
}
EOF

Вернитесь на вкладку Test Client и повторите предложение записи:

Перед выполнением следующей команды перейдите на вкладку Test Client.

assistant replay documents.write demo-pad

Ожидайте HTTP 403 и tool_denied. Ответ 403 означает, что сервис получил и отклонил запрос; ошибка соединения означает, что запрос не дошёл до решения. CLI выводит намеренные отказы, не завершая оболочку. При policy_error перейдите на вкладку Policy Editor, повторите полную правку JSON, затем вернитесь на Test Client и повторите запросы. Перезапуск не нужен.

assistant call documents.read alice-notes

Чтение должно по-прежнему возвращать HTTP 200. Проверка испытывает запрет записи и обычное чтение для обеих подтверждённых личностей; копировать вывод не требуется.

Закройте прямой путь удаления

На этом шаге завершите роль только для чтения и проверьте прямой обработчик и воспроизведение.

Чтобы начать этот шаг, выберите вкладку Policy Editor в интерфейсе лабораторной работы.

Удаление — отдельная операция. Блокировка записи не блокирует удаление автоматически. Перейдите на вкладку Policy Editor. Оставьте в списке единственную необходимую роли операцию. Используйте ту же технику замены полного файла:

Перед выполнением следующей команды перейдите на вкладку Policy Editor.

cat > /home/labex/project/tools.json <<'EOF'
{
  "assistant": ["documents.read"]
}
EOF

Перейдите на вкладку Test Client. Отправьте прямой запрос удаления временного блокнота:

Перед выполнением следующей команды перейдите на вкладку Test Client.

assistant call documents.delete demo-pad

Ожидаются HTTP 403 и tool_denied. Поскольку call обходит страницу воспроизведения, это подтверждает: видимый интерфейс не является границей принудительной проверки. Испытайте и прямую запись:

assistant call documents.write demo-pad

Ожидайте тот же отказ. Убедитесь, что Alice по-прежнему читает законно открытый ей документ:

assistant call documents.read team-plan

Ожидайте HTTP 200 и Synthetic shared project plan. Перейдите на вкладку Assistant Tool Lab. Сохранив вход Alice, выберите documents.delete, введите demo-pad и нажмите Replay proposal. Здесь сервер тоже должен отказать с tool_denied.

Assistant Tool Lab показывает отказ сервера в ненужном инструменте удаления

Просьба «пожалуйста, только читай» не заменяет проверку. Сервер должен решать независимо от предложения. Отключение всех инструментов также сломает полезную работу ассистента. Если чтение запрещено, проверьте точное написание documents.read в JSON. Проверка вызывает тот же защитный код обработчиков записи и удаления на одноразовых документах в памяти и проверяет реальные разрешённые чтения; документы учащегося никогда не удаляются.

Инструмент чтения пока может запросить чужой закрытый объект. Следующая работа добавляет отдельную границу документов.

Резюме

Вы сохранили обычное чтение и убрали права записи и удаления. Воспроизводимые предложения и прямые вызовы теперь проходят одну реальную серверную проверку. Права инструмента — лишь одна граница: разрешённое чтение всё равно требует решения для конкретного документа.