xenon
@xenon
Too drunk to fsck

Как сделать безопасное исполнение пользовательского кода (lambda, function as a service)?

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

Какой язык программирования - не принципиально.

Главное требование - это должно быть безопасно, в том числе:
  • Скрипт не может получить root доступ или доступ к системным файлам
  • Скрипт не может получить доступ к файлам других пользователей
  • Скрипт не может слишком сильно нагружать машину (отжирать 100% CPU или работать вечно, вместо 3-5 секунд), расфоркиваться в тысячу процессов, демонизироваться итд
  • Скрипт (тут я не уверен) не должен иметь возможность работать с сетью
  • Решение должно быть легковесным. Наверное, все предыдущие пункты можно удовлетворить если запускать скрипт внутри docker контейнера, но это, кмк, отожрет очень много ресурсов


Пока что на ум приходит сочетание chroot / timeout / ulimit / unshare - насколько это хороший вариант? (но не нравится идея, что придется с юзерскими данными хранить libc и другие либы для скрипта - это как-то можно красиво сделать? разрешить доступ только к /lib/, /usr/lib/ и /home/username/data).

Насколько сильный оверхед дает Docker, по сравнению с просто запуском в chroot? А если одновременно будет 100 lambda функций исполняться (100 процессов не проблема даже для простой виртуалки, но вот 100 докер-контейнеров будет, наверное, требовать огромных ресурсов?).

Может быть есть и другой вариант какой-то? А множество всяких провайдеров (Amazon, Scaleway) - они все свой велосипед изобретают или есть какое-то готовое решение для этого?
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Тут должна быть шутка про Firecracker на котором работает AWS Lambda
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg Куратор тега Linux
Любые ответы на любые вопросы
Самое главное - брать с людей деньги и вести логи.

Что касается докера - чисто технически, докер накладывает некоторые небольшие тормоза на сеть (в определенном режиме, когда он проксирует порт машины на порт в контейнере) и на ФС (когда контейнер работает не с вольюмом, а с оверлеем).

На вычисления оверхеда нет.

Докер - это не виртуализация, это просто аккуратная настройка network namespaces и cgroup. Где вы видите жор ресурсов? Конечно, если это делать через кубернетис, который тащит порядка двух гиг своего барахла, это будет жор ресурсов.

Все набросанные вами идеи как раз и реализуются при помощи ковыряний в cgroup и network namespaces, так какой смысл повторять докер своими руками?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы