Можете ли вы запустить контейнер песочницы в контейнере Cloud Run? - PullRequest
3 голосов
/ 28 апреля 2020

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

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

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

Спасибо.

1 Ответ

4 голосов
/ 28 апреля 2020

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

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

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

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

...