Benchling запустила AI-код над чувствительными данными множества клиентов и пришла к неприятному выводу: стандартная песочница решает только часть задачи. Если контролировать HTTP и исходящие порты, но оставить DNS без наблюдения, у недоверенного кода сохраняется канал для вывода данных.
Как пишет AWS Machine Learning Blog, архитектура Benchling уже обрабатывает больше 600 сессий исполнения кода в день для более чем 250 арендаторов в неделю. Зафиксированных инцидентов безопасности компания не отмечает. Это не доказательство неуязвимости, но уже эксплуатационный результат, а не схема из презентации.
Что именно закрыла Benchling
AI-приложение Benchling генерирует научный код от имени исследователей. Каждая сессия должна видеть данные только своего арендатора, не иметь доступа к соседним клиентам и не устанавливать неразрешенные сетевые соединения.
Sandbox-режим AgentCore Code Interpreter ограничивает исходящий доступ операциями с Amazon S3. Для Benchling этого оказалось мало: команда хотела сама определять, какие домены разрешено преобразовывать в IP-адреса, какие конечные точки доступны и как эти ограничения проверяются.
Поэтому недоверенный код вынесли в отдельный AWS-аккаунт, не связанный напрямую с production-средой. В его VPC нет интернет-шлюза и NAT-шлюза. Группа безопасности оставляет только порт 443, а разрешенный трафик проходит через VPC Endpoints.
Отдельно закрыт DNS. Route 53 Resolver DNS Firewall сначала блокирует известные вредоносные домены, затем разрешает только явно перечисленные адреса, после чего отклоняет все остальные запросы. Интеграционные тесты регулярно имитируют попытки эксфильтрации.
Изоляция арендаторов без леса IAM-ролей
Выдать отдельную IAM-роль каждому клиенту при тысячах арендаторов означало бы накопить трудноуправляемую систему статических прав. Benchling выбрала другой уровень разграничения: production-аккаунт через AWS STS передает в каждую сессию временные учетные данные только к информации, нужной для конкретного задания. Сам код не получает ни production-реквизиты, ни доступ ко всему клиентскому хранилищу.
Это и есть главный практический вывод. Для агентского кода единицей доступа должен быть не клиент и тем более не приложение целиком, а отдельное задание. Контейнерная песочница Benchling на gVisor остается дополнительным слоем изоляции, но AWS прямо отмечает, что это существующая часть инфраструктуры компании, а не обязательный элемент описанного паттерна.
Для SaaS-команды такой кейс дает короткий тест архитектуры: кто контролирует DNS, может ли одна сессия увидеть данные другой, ограничены ли права конкретным заданием и переживет ли production-аккаунт компрометацию среды исполнения. Если ответы сводятся к «у нас закрыт интернет», threat model еще не закончен.