−25%

за Windows при годишно плащане, до 31.10. Към плановете

EQVPS
Започни

Изолация с контейнер или microVM: 4 нива в сравнение, от подпроцес до пълна VM

10.10.2026 г. · 6 мин четене · EQVPS Team

„Пусни го в пясъчник“ звучи като една инструкция. На практика хората имат предвид четири често срещани граници и те спират много различни неща. Изборът на грешната или ви оставя уязвими, или прави всяко изпълнение по-бавно и по-скъпо, отколкото е нужно.

Това сравнение приема, че кодът е наистина недоверен: написан от езиков модел, подаден от потребител или пристигнал в pull request от някой, когото не познавате. Кодът, който сте написали сами, има други нужди.

Какво може да се обърка

Преди да сравним границите, полезно е да назовем за какво служат. Недовереният код може да:

  1. Прочете каквото не бива: променливи на средата, SSH ключове, файлове в домашната ви директория, крайни точки за метаданни на облака.
  2. Изчерпи ресурсите: да влезе в безкраен цикъл, да прави fork, докато машината заседне, да напълни диска.
  3. Злоупотреби с мрежата: да сканира други хостове, да праща спам, да копае криптовалута, да вика вътрешните ви услуги.
  4. Остане трайно: да инсталира cron задача или услуга, която надживява задачата.
  5. Избяга: да използва бъг в слоя отдолу, за да изпълни код на самия хост.

Всяко ниво по-долу се справя с някои от тези неща и не с други.

Ниво 1: процес

Най-простият пясъчник е дъщерен процес: subprocess.run с таймаут, може би под отделен потребител, с лимити на ресурсите и филтър seccomp, ако сте щателни.

Спира: неконтролираното време (таймаутът), част от изчерпването на ресурсите (лимитите), някои опасни системни извиквания (seccomp). Не спира: четенето на всичко, което този потребител може да чете, мрежовия достъп, трайното оставане чрез всичко, в което потребителят може да пише, и всеки бъг в ядрото. Типичен провал: кодът чете файл, за който сте забравили, че е четим, или „ограничен“ интерпретатор на език се оказва с вратичка. Историята е пълна с пясъчници вътре в езика, които не са издържали.

Времето за старт е на практика нула. Добре е за код, който сте написали вие; не е граница за код, който не сте.

Ниво 2: контейнер

Namespaces дават на кода собствен изглед към файловете, процесите и мрежата; cgroups ограничават CPU и паметта; премахнатите capabilities и seccomp стесняват това, което може да поиска от ядрото.

Спира: четенето на файловете на хоста (освен ако не са монтирани), виждането на други процеси, неограниченото използване на ресурси, голяма част от проблема с трайното оставане, ако контейнерът се изхвърля след това. Не спира: бъг в споделеното ядро на хоста. Всички контейнери на машината говорят с едно и също ядро, така че достъпна уязвимост в ядрото е изход. Типичен провал: конфигурацията, а не екзотични експлойти. Привилегирован контейнер, сокетът на container runtime, монтиран вътре, мрежата на хоста, включена „само за дебъгване“. Всяко от тях тихо премахва границата.

Времето за старт е милисекунди. Съществуват подсилени варианти, включително ядра в user space, които прихващат системните извиквания, преди да стигнат до хоста, на известна цена в скорост и съвместимост. За код от хора, на които вярвате, добре конфигурираният контейнер е разумен избор по подразбиране.

Ниво 3: microVM

MicroVM работи със собствено ядро под хипервайзор, като пълна VM, но с почти целия емулиран хардуер премахнат. Firecracker е най-известният пример.

Спира: всичко, което спира контейнерът, плюс проблема със споделеното ядро. За да стигне до хоста, кодът трябва да пробие хипервайзора или едно от шепа виртуални устройства — много по-малка повърхност от интерфейса на системните извиквания на ядро. Не спира: злоупотребата с това, което ѝ давате. Отвореният изходящ трафик пак може да бъде злоупотребен; тайните, които вкарате, пак могат да изтекат. Типичен провал: политиката, а не изолацията. Някой подава продукционен токен, „за да минат тестовете“, или оставя изходящия трафик неограничен за натоварване, което няма нужда от него.

Времето за старт е от част от секундата до около секунда, с няколко мегабайта допълнителна памет. Това е достатъчно бързо, за да създавате по една за всяка задача и да я изтривате след това, което решава и трайното оставане: няма към какво да се върне.

Ниво 4: пълна виртуална машина

Обикновената VM, или VPS, има същия вид граница като microVM: хардуерна виртуализация и хипервайзор. Разликата е във всичко около нея: пълен модел на устройствата, цяла ОС, публичен IP, ако искате, и жизнен цикъл, измерван в дни или месеци.

Спира: същите класове проблеми като microVM, с малко по-голяма повърхност за атака, защото се емулира повече хардуер. Не спира: злоупотребата със собствената ѝ мрежова идентичност. VM с публичен IP, която изпълнява злонамерен код, вкарва в блоклист своя IP, което има значение, ако същият IP праща и пощата ви. (Ако това вече се е случило, вижте какво да правите, когато IP адресът ви е в блоклист.) Типичен провал: живее твърде дълго. VM, създадена за един експеримент, събира идентификационни данни и състояние и бавно се превръща в доверената машина, която трябваше да пази.

Времето за старт е от десетки секунди до минути, а таксуването обикновено е месечно. Това е правилната форма за дълго работеща услуга, която се нуждае от входящи портове, и грешната форма за изпълнение на код за 20 секунди.

Сравнението

ПроцесКонтейнерMicroVMПълна VM
Собствено ядроненедада
Основна границаправа на потребителяnamespaces + споделено ядрохипервайзор, миниатюрен модел на устройстватахипервайзор, пълен модел на устройствата
Време за старт~0ms~0.1–1 с10 с – минути
Допълнителна паметнямамалканяколко MiBдесетки–стотици MiB
Изхвърляне след всяка задачалеснолеснолеснобавно, скъпо
Входящи портове / публичен IPна хостана хостаобикновено нямада

Изборът

  • Код, написан от вас или екипа ви: процес или контейнер е достатъчен.
  • CI за собствените ви клонове: контейнер на вашия runner.
  • Код от агент, подавания от потребители, външни pull requests: microVM за всяка задача, изтривана след това.
  • Недоверена услуга, която трябва да приема връзки или да работи седмици: отделна VM със собствен IP, далеч от всичко, което държи идентификационните ви данни или праща пощата ви.

Каквото и да изберете, отгоре важат две правила: не слагайте вътре нищо, което не бихте дали на автора на кода, и решете съзнателно какво може да прави мрежата.

Къде са нашите продукти

За ниво 3 предлагаме пясъчници за код: Firecracker microVM, които стартират за около секунда, с изходящ интернет, без входящи портове и с таксуване на секунда. Насочени са точно към третата точка по-горе; страницата за защитите на MCP обяснява как да ограничите какво може да прави агент с тях. За ниво 4 VPS като тарифата AI agent ви дава цяла машина за месец. Разработените примери в пясъчник за AI агенти показват модела с microVM от край до край, а от какво се нуждаят AI агентите от инфраструктурата разглежда изолацията като едно от няколко изисквания.

Въпроси

Достатъчен ли е контейнер за изпълнение на код, генериран от AI?

За код от собствения ви екип — обикновено да. За код, който никой не е прегледал — изхода на агент, подавания от потребители, външни pull requests — споделеното ядро на контейнера е слабото място. MicroVM или VM поставя хипервайзор между този код и хоста.

Каква е разликата между microVM и обикновена VM по отношение на изолацията?

Границата е от същия вид: хардуерна виртуализация и хипервайзор. MicroVM излага много по-малко виртуални устройства, така че повърхността е по-малка, и стартира за около секунда вместо за десетки. Пълната VM е по-добра за дълго работещи услуги, които се нуждаят от публичен IP, повече устройства или цяла ОС.

Пречи ли изолацията на кода да открадне API ключовете ми?

Само ако ключовете не са вътре. Изолацията пази хоста от кода; тя не пази тайни, които сте подали съзнателно. Не давайте на недоверен код нищо, което не бива да има.

А мрежовият достъп?

Има толкова значение, колкото и изчислителната граница. Решете дали кодът изобщо има нужда от изходящ интернет и се уверете, че нищо не може да се свърже отвън. Идеално изолирана машина пак може да се използва за сканиране, спам или копаене, ако трафикът ѝ е неограничен.

Коментари

Още няма коментари. Бъди първият.

Остави коментар

Коментарите се модерират преди да се появят.