Аутентификация определяет, кто вы; авторизация решает, что вы можете делать. Растущее число приложений на базе ИИ проверяет личность пользователя один раз при входе, а затем позволяет лежащему в основе агенту действовать с любым ресурсом до конца сессии, фактически выдавая ему «карт-бланш». Такой подход открывает дверь для случайных утечек данных, нежелательных электронных писем или даже разрушительных обновлений базы данных, и риск растет каждый раз, когда ИИ-ассистент может вызывать несколько инструментов с миллисекундной задержкой.
Почему эта ошибка повторяется
Большинство разработчиков ИИ рассматривают экран входа как единственные «ворота» безопасности. Код запрашивает пароль или токен, помечает сессию как «аутентифицированную», а затем предполагает, что любой последующий запрос безопасен. В традиционном веб-приложении медленные клики пользователя-человека служат естественным барьером; человек сделает паузу, прежде чем нажать «удалить». ИИ-агент, однако, может выполнять десятки вызовов инструментов за считанные секунды. Если платформа спрашивает только «Вошел ли пользователь в систему?», каждый вызов наследует те же неограниченные привилегии.
Первопричина — удобство. Команды часто выделяют один долгоживущий сервисный аккаунт для всего приложения, чтобы коду не приходилось управлять несколькими токенами или областями доступа (scopes). Этот аккаунт обычно имеет широкие разрешения — чтение, запись, удаление — во всех проектах. Когда ИИ-ассистент запускается внутри этой сессии, он автоматически наследует эти права, независимо от того, требуются ли они для текущей задачи.
Что стоит на кону
- Раскрытие данных – агент, который может читать любой файл после входа пользователя, может непреднамеренно включить конфиденциальные документы в ответ, который позже будет передан за пределы организации.
- Непреднамеренные действия – ИИ-помощник инженера службы поддержки может выполнить прямой SQL-запрос к рабочим базам данных просто потому, что сессия инженера все еще активна, даже если запрос не связан с обрабатываемым тикетом.
- Соответствие нормативным требованиям – многие правила защиты данных требуют, чтобы доступ был ограничен минимально необходимым уровнем. Модель с неограниченными разрешениями может нарушать эти принципы и привести к проверкам или штрафам.
- Операционные расходы – ошибки, удаляющие или изменяющие записи, вынуждают команды откатывать изменения, расследовать причины и восстанавливать доверие пользователей — все это отнимает время и деньги.
Пропущенный шаг: авторизация для каждого действия
Авторизация должна проверяться у каждой «двери» внутри системы, а не только на главном входе. Вопрос меняется с «Кто это?» на «Может ли это конкретное действие с этим конкретным ресурсом быть выполнено прямо сейчас?». Внедрение такой проверки не требует полного перепроектирования; нужен лишь переход от одного флага сессии к краткосрочным токенам с ограниченной областью доступа.
Как это работает на практике
- Запрос токена с определенной областью доступа – когда ИИ-агенту нужно вызвать инструмент, он сначала получает токен, в котором перечислены именно те разрешения, которые необходимы (например,
read:ticket,execute:sql_query). - Валидация токена для каждого вызова – перед запуском инструмента сервис проверяет, включает ли токен необходимую область доступа и не истек ли срок действия токена.
- Сопоставление ресурса с областью доступа – если запрос направлен на определенный проект или базу данных, токен должен явно предоставлять доступ к этому идентификатору.
- Отказ или разрешение – если какая-либо проверка не пройдена, вызов отклоняется, а агент получает ошибку, которую может передать пользователю.
Разница в коде очевидна. «Плохой» подход может выглядеть так:
if session.is_authenticated():
tool.run(params)
«Хороший» подход расширяет проверку:
token = get_scoped_token(user, required_scope)
if token.is_valid() and token.allows(required_scope, resource_id):
tool.run(params)
else:
raise PermissionError
Второй паттерн добавляет несколько строк, но заставляет систему задавать правильный вопрос для каждой операции.
Стандарты, которые упрощают задачу
Области доступа (scopes) OAuth 2.0 уже предоставляют широко распространенный способ ограничить возможности токена. Выпуская краткосрочные токены доступа, которые кодируют такие области, как project:1234:write или email:send, разработчики могут полагаться на существующие библиотеки для выполнения этапа проверки.
Более новые Rich Authorization Requests (RFC 9396) расширяют эту идею, позволяя клиенту запрашивать детализированные разрешения во время выполнения, а не определять статический список заранее. Такая гибкость полезна, когда рабочему процессу ИИ может потребоваться добавлять или отключать возможности на лету в зависимости от намерений пользователя.
Контраргумент: простота против безопасности
Некоторые команды утверждают, что проверки для каждого отдельного действия увеличивают задержку и сложность кода, особенно когда ИИ-ассистент должен вызывать множество инструментов один за другим. Они указывают на то, что использование одного сессионного токена позволяет избежать накладных расходов на получение и проверку нового токена для каждого вызова. Однако ценой этого становится значительно более высокий риск злоупотреблений. Современные сервисы валидации токенов рассчитаны на работу за микросекунды, а дополнительный сетевой цикл (round-trip) можно объединять в пакеты или кэшировать без ущерба для принципа наименьших привилегий. В средах, где целостность данных и соблюдение нормативных требований не подлежат обсуждению, незначительные затраты производительности компенсируются снижением рисков.
На что обратить внимание в дальнейшем
- Внедрение токенов с ограниченной областью доступа (scoped tokens) в AI SDK — следите за обновлениями основных инструментариев (toolkits) ИИ-платформ; многие из них начинают внедрять вспомогательные функции для областей доступа на базе OAuth.
- Фреймворки «политика как код» (Policy-as-code) — новые решения позволяют командам описывать правила авторизации в декларативном файле, которые автоматически применяются во время выполнения.
- Журналы аудита, отображающие решения по каждому действию — по мере того как все больше платформ фиксируют каждую проверку авторизации, организации получат возможность видеть, какие действия ИИ разрешаются или блокируются, что поможет в корректировке будущих политик.
Основной вывод
Рассматривать активную сессию как разрешение на любые действия — это прямой путь к непредвиденным последствиям. Перенося решение об авторизации с момента входа в систему на каждый отдельный вызов инструмента и используя краткосрочные токены с ограниченной областью доступа, ИИ-приложения могут сохранить удобство автономных агентов, одновременно защищая данные, соблюдая правила и избегая дорогостоящих ошибок. Дополнительные строки кода — это малая цена за систему, которая каждый раз задает правильный вопрос при попытке совершить действие.
