Можете ли вы запустить контейнер песочницы в контейнере Cloud Run?

Допустим, я бы позволил пользователю загрузить какой-нибудь скрипт python или bash, выполнить его в облаке и получить результат обратно. Для этого я бы создал службу Cloud Run с учетной записью службы, у которой нет разрешений на доступ к ресурсам проекта. Я бы также запустил сценарий во вложенном контейнере, чтобы пользователь не мог вмешиваться в код сервера и манипулировать последовательными запросами от других пользователей.

Как сделать gvisor runsc или другую среду выполнения песочницы доступной в контейнере, запущенном в Cloud Run?

Я нашел некоторые ресурсы, в которых упоминается использование привилегированного флага в исходном контейнере, но это невозможно с Cloud Run. Кроме того, я не могу найти никакой информации о том, как запускать контейнеры без root с помощью runsc. Сообщите мне, на правильном ли я пути, возможно ли это даже с облачным запуском, или мне следует использовать другую службу?

Спасибо.

1 ответ

Решение

В настоящее время Cloud Run (полностью управляемый) сам работает в изолированной программной среде gVisor, поэтому его поддержка низкоуровневых API-интерфейсов Linux для создания дополнительных контейнерных сред с использованием cgroups или API-интерфейсов пространств имен Linux, вероятно, будет невозможна.

Однако, поскольку gVisor технически является технологией песочницы в пользовательском пространстве (хотя я не уверен, какой уровень привилегий она требует), вы можете запустить песочницу gVisor внутри gVisor, хотя я бы не возлагал больших надежд, так как это, вероятно, не предназначен для этого. Я предполагаю, что песочница gVisor не предоставляетptrace возможности для работы вложенных песочниц, хотя вы, вероятно, можете спросить об этом в собственном репозитории gVisor на GitHub.

Для такого случая использования я рекомендую проверить Cloud Run для Anthos на GKE, это аналогично Cloud Run для разработчиков, но запускает ваши приложения на узлах GKE (которые являются виртуальными машинами GCE), для которых доступен полный набор системных вызовов Linux.. Поскольку там доступен Kubernetes podspec, вы можете создавать привилегированные контейнеры и запускать в них виртуальные машины и т. Д.

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

Другие вопросы по тегам