Создание SPACE: безопасные и эффективные среды для агентов

SPACE — это безопасная и эффективная платформа-песочница от Perplexity, обеспечивающая работу долгоживущих рабочих процессов агентов и быстрое изолированное выполнение кода.

АвторыPerplexity Engineering

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

Традиционные подходы к песочницам на основе контейнеров не предназначены для подобных задач. Обычно они рассчитаны на кратковременные задания без сохранения состояния и используют ядро как единую точку отказа. Напротив, сеансы агентов являются долгоживущими и с сохранением состояния: агент накапливает часы контекста, рабочую файловую систему и выполняемые процессы, которые нельзя просто отбросить и воссоздать с нуля. Более того, рабочая нагрузка внутри по умолчанию должна считаться недоверенной, что требует более строгих мер безопасности. Для долгоживущих сеансов агентов необходима подложка, способная изолировать враждебную гостевую среду, сохранять ее состояние и при этом работать в масштабируемом режиме.

Основная сложность при проектировании песочницы проистекает из противоречий, часто возникающих между безопасностью, функциональностью и эффективностью. Например:

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

Совместное использование ресурсов между песочницами ускоряет их создание, но увеличивает поверхность атаки.

Более частое создание снимков улучшает восстановление и обеспечивает такие функции, как откат, но требует времени и дискового пространства.

Песочницы для агентов, подобные тем, что требуются для выполнения кода, использования навыков агента или выполнения конвейеров поиска как кода в запросах Computer, требуют всех трех компонентов. В течение последних нескольких месяцев мы усердно работали над проектированием инфраструктуры агентов следующего поколения, обеспечивающей работу наших продуктов. Сегодня мы представляем SPACE (песочница для выполнения кода агентами — Sandboxed Platform for Agentic Code Execution): платформу-песочницу, созданную для рабочих процессов агентов, которая является безопасной, надежной и эффективной при масштабировании. В прошлом месяце мы начали развертывание SPACE в качестве уровня песочницы, обеспечивающего работу Perplexity Computer. За последнюю неделю она безопасно поддержала миллионы созданий песочниц и десятки миллионов переподключений, при этом время запуска сократилось в 3–5 раз по сравнению с нашим предыдущим решением.

В этой статье представлены архитектурные и проектные решения, лежащие в основе SPACE. На сегодняшний день 100% сеансов Computer работают на платформе SPACE. Мы рады развернуть эту платформу на еще большем количестве интерфейсов, чтобы предоставить нашим пользователям и разработчикам лучшую в своем классе среду выполнения для агентов.

Архитектура

На верхнем уровне система организована в три слоя.

Плоскость управления является «мозгом» системы, определяющим, что должно существовать и где. Она состоит из шлюза API и модулей управления состоянием на уровне кластера.

Локальные службы узла — это механизмы, необходимые для выполнения плана, разработанного плоскостью управления. Они отвечают за жизненный цикл песочницы, хранение, работу в сети и привилегированные операции, стоящие за ними.

Песочница представляет собой изолированную среду выполнения. Она реализована как виртуальная машина в паре с демоном space: фоновым процессом внутри гостевой системы, который обеспечивает доступ рабочей нагрузки к файловой системе, процессам и сети.

Архитектура SPACE разделена на три уровня: плоскость управления без сохранения состояния; локальные службы узла, управляющие жизненным циклом песочницы, хранением и шлюзами безопасности; и сама песочница.

Плоскость управления

Шлюз API является точкой входа. Входящие запросы проходят аутентификацию и авторизацию, а затем преобразуются в записи желаемого состояния.

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

Локальные службы узла

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

Диспетчер песочниц знает, какие из них запущены, приостановлены или остановлены, а также располагает информацией об их реальных ресурсах. Он работает с ограниченными правами и делегирует все привилегированные задачи диспетчеру узла — единственному корневому процессу, который управляет базовыми примитивами. Хранение данных осуществляется локально и надежно: снимки текущих состояний песочниц сохраняются на узле, а менеджер томов перемещает снимки и шаблоны в объектное хранилище и обратно по мере необходимости для обеспечения кросс-узловых операций. Шлюзы безопасности охраняют доступ песочницы: менеджер учетных данных управляет внедрением данных в рамках авторизации для каждой службы, а сетевой шлюз обеспечивает выполнение политики исходящего трафика каждой песочницы.

Песочница

Сама песочница — это виртуальная машина (ВМ) с собственным гостевым ядром, выполняющая рабочую нагрузку пользователя за границей аппаратной изоляции. Поскольку каждая песочница имеет собственное ядро, скомпрометированная рабочая нагрузка не может опираться на общее ядро хоста как на единую точку отказа; даже если она успешно эксплуатирует свое гостевое ядро, эта компрометация ограничивается границей ВМ песочницы, а не распространяется на другие рабочие нагрузки.

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

Три столпа: безопасность, функциональность и эффективность

Далее мы углубимся в ключевые свойства, которые SPACE должна обеспечивать по трем направлениям: безопасность, функциональность и эффективность. Как отмечалось ранее, эти три параметра противодействуют друг другу. Тем не менее, мы не можем идти на компромисс ни по одному из них, если хотим поддерживать мощных агентов, соответствующих современным возможностям моделей. Безопасность защищает хост, других арендаторов или секреты пользователя от недоверенной, возможно, враждебной рабочей нагрузки. Функциональность дает агентам необходимый им богатый жизненный цикл. Эффективность делает все это доступным при ограниченном объеме памяти, диска и вычислительных ресурсов.

Безопасность: защита данных и систем

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

SPACE обеспечивает многоуровневую безопасность за счет сочетания изоляции на уровне виртуальной машины и хоста со строго контролируемыми каналами связи, управлением учетными данными и шифрованием.

SPACE применяет многоуровневый подход для обеспечения безопасности песочниц. Изоляция песочницы состоит из двух компонентов: изоляция виртуальной машины и изоляция процесса ОС хоста. Для доступа между песочницами необходимо преодолеть обе. Общение с песочницей строго контролируется; процессы могут общаться только через выделенные каналы. Сетевой шлюз принудительно направляет весь исходящий трафик через себя. Демон space является единственным санкционированным каналом между (недоверенной) песочницей и (доверенной) платформой.

Учетные данные никогда не хранятся там, где их может украсть агент. Хранилище учетных данных находится вне границы песочницы и отвечает за их жизненный цикл. Оно сохраняет и извлекает секреты с помощью подключаемого бэкенда хранилища, разрешает учетные данные с использованием иерархических областей действия, управляет метаданными, такими как метод внедрения и срок действия, а также обеспечивает ограничение скорости доступа и аудит журналов. При необходимости учетные данные внедряются на уровне сети или автоматически заполняются агентом браузера, вместо того чтобы непосредственно попадать в песочницу.

Данные защищены в состоянии покоя. SPACE поддерживает BYOK (использование собственного ключа) для защиты внешних хранимых данных. Ключи шифрования поступают из службы управления ключами клиента и никогда не попадают в песочницу. Если предприятие отзывает ключ, их данные становятся нечитаемыми.

Функциональность: поддержка рабочих процессов агентов

Для поддержки рабочих процессов агентов песочницам требуется полноценная поддержка жизненного цикла. Они должны создаваться быстро и в масштабе, поскольку агент может запустить множество песочниц одновременно и не должен ждать загрузки каждой из них. Они должны сохраняться в течение неопределенного срока, так как сеанс может длиться минуты или месяцы. Они должны корректно приостанавливаться, иногда на длительные периоды, например, когда задача заблокирована в ожидании ввода данных человеком. Кроме того, они должны поддерживать создание копий (forking), откат и восстановление после сбоев, чтобы сеанс можно было разветвить, отменить ошибочный шаг или возобновить после сбоя, вместо того чтобы начинать все сначала.

SPACE поддерживает все вышеперечисленное. Она моделирует полный жизненный цикл песочницы как явный конечный автомат, что делает возможными такие операции, как создание, приостановка, возобновление, перевод в режим ожидания и восстановление.

Этот основной набор состояний и переходов песочницы обеспечивает полноценную поддержку жизненного цикла.

Снимки (snapshots) являются механизмом, лежащим в основе большинства этих возможностей. Планировщик работает с регулярными интервалами и создает снимки двух типов: снимки диска (копии файловой системы на определенный момент времени) и полные снимки (контрольные точки всей приостановленной виртуальной машины). Снимки диска делаются часто, в то время как полные контрольные точки — реже. Все остается на узле, а хранение данных сокращается по уровням. Эти снимки можно использовать для восстановления внутри сеанса; например, снимки диска можно использовать для отката файловой системы, чтобы отменить разрушительную команду, а полные контрольные точки позволяют аварийной песочнице возобновить работу с недавнего активного момента, а не с «холодного» диска.

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

Эффективность: оптимизация времени и пространства

Недостаточно просто реализовать вышеуказанные функции в отрыве друг от друга; они также должны быть осуществимы в условиях жестких ресурсных ограничений. Память и диск на узле ограничены, а пользователи хотят, чтобы агенты работали как можно быстрее, поэтому операции жизненного цикла должны быть недорогими как по времени, так и по пространству. Мы не можем позволить себе копировать полный образ машины каждый раз при создании, приостановке или разветвлении песочницы.

Ключевое проектное решение делает это возможным: файловая система. SPACE использует btrfs в качестве локальной файловой системы для хранения данных песочницы. Btrfs (файловая система B-tree) сочетает в себе файловую систему с копированием при записи (copy-on-write) с интегрированным управлением логическими томами. Это дает несколько преимуществ:

Копирование reflink выполняется быстро, поскольку вы используете общие базовые экстенты, поэтому копировать нужно только метаданные.

Снимки атомарны и быстры, так как вы просто создаете новый корень.

Требуется минимальное хранилище, так как вы сохраняете только изменения.

В результате песочницы можно создавать и восстанавливать быстро. Вместо того чтобы каждый раз создавать песочницу с нуля, мы храним «теплый» пул контейнеров, на дисках которых уже материализованы общие шаблоны, и выполняем запрос путем привязки его к контейнеру, шаблон которого уже совпадает. Предоставление этой песочнице собственной записываемой корневой файловой системы в таком случае является клонированием методом копирования при записи, а не полным копированием. Когда подходящего «теплого» контейнера нет, мы материализуем шаблон по запросу; мы сводим параллельные запросы на один и тот же образ в одну загрузку, поэтому всплеск идентичных запросов не превращается в всплеск идентичной работы.

Результатом является среда выполнения песочницы, которая одновременно мощная, легковесная и молниеносно быстрая. Когда мы развернули SPACE, мы запустили ее параллельно с нашим предыдущим поставщиком песочниц на том же производственном трафике. В течение недели запуска SPACE создавала песочницы в три-пять раз быстрее на всем протяжении распределения. В частности, медианная задержка создания сократилась со 185 до 60 миллисекунд (улучшение в 3,1 раза), а задержка на 90-м процентиле — с 447 до 89 миллисекунд (улучшение в 5,0 раза). Мы наблюдали аналогичные улучшения на порядок по другим показателям производительности и использования ресурсов.

При прямом сравнении задержка создания песочниц SPACE до 5 раз меньше, чем у нашего предыдущего решения для песочниц.

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

Заключение

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

Каждое отдельное дизайнерское решение может служить нескольким целям одновременно, делая возможным этот хрупкий баланс. Виртуальные машины для каждой песочницы дают каждой рабочей нагрузке собственное ядро, усиливая безопасность за счет надежной изоляции и одновременно предоставляя чистую границу контрольной точки, на которую полагаются снимки. Btrfs обеспечивает эффективную реализацию снимков, ветвления и других операций, необходимых для среды выполнения агентов. Демон space сохраняет все взаимодействие с гостевой системой на контролируемом пути со стороны хоста, запечатывая границу между гостем и хостом, сохраняя при этом свободу маневра агентов. Центральный сетевой шлюз выступает посредником для исходящего трафика и внедрения учетных данных, никогда не раскрывая секреты гостевой системе.

Результатом этих и других дизайнерских решений является платформа, которая позволяет осуществлять реальную оркестрацию агентов в масштабе. SPACE предоставляет подложку, на которой долгоживущие агенты с сохранением состояния могут безопасно решать задачи произвольной сложности или продолжительности, не жертвуя при этом производительностью или безопасностью.

Сегодня SPACE уже обеспечивает работу миллионов сеансов Perplexity Computer. Мы намерены использовать SPACE в качестве единого уровня для подготовки и контроля песочниц в любых условиях: от микроВМ Linux и гостевых систем Windows до локальной машины пользователя. Мы усердно работаем над внедрением SPACE в эти новые условия, чтобы разработчики могли выпускать AI-продукты, которые работают везде, где работают пользователи.

Если вам не терпится заняться формированием вычислительного уровня для завтрашних передовых агентов, мы приглашаем вас присоединиться к нашей команде.