العزل باستخدام الآلات الافتراضية لوكلاء التعليمات البرمجية عالية الأمان
gVisor وFirecracker microVMs والعزل على مستوى العتاد للوكلاء.
العزل باستخدام الآلات الافتراضية لوكلاء التعليمات البرمجية عالية الأمان درس مجاني في AI Agents على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Agents، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Agents 4 دروس في المجموع.
ما بعد Docker: عزل أقوى
تشترك حاويات Docker القياسية في نواة المضيف. ويمكن لاستغلال ثغرة في النواة من داخل الحاوية أن يتيح الخروج إلى المضيف. ويتطلب تنفيذ التعليمات البرمجية عالي الأمان طبقات عزل أقوى.
هناك نهجان رئيسيان: gVisor (وكيل نواة في مساحة المستخدم) وFirecracker (أجهزة افتراضية مصغرة خفيفة).
آلية عمل gVisor
يضع gVisor مكوّنًا في مساحة المستخدم يُسمى Sentry بين الحاوية ونواة المضيف. تنتقل استدعاءات النظام الخاصة بالحاوية إلى Sentry، الذي يعيد تنفيذ مجموعة فرعية آمنة منها باستخدام Go، وليس باستخدام النواة الحقيقية.
يُسمى وقت التشغيل runsc (حاوية تعمل في بيئة معزولة).
# Configure Docker to use gVisor runtime (runsc)
# /etc/docker/daemon.json:
# {
# "runtimes": {
# "runsc": { "path": "/usr/local/bin/runsc" }
# }
# }
import docker
client = docker.from_env()
output = client.containers.run(
'python:3.12-slim',
'python -c "print(\"hello from gVisor\")"',
runtime='runsc', # use gVisor
network_disabled=True,
auto_remove=True
)
print(output.decode())اعتراض gVisor لاستدعاءات النظام
عندما تستدعي التعليمات البرمجية داخل الحاوية open() أو read() أو socket()، يعترض gVisor استدعاء النظام ويقرر ما إذا كان سيسمح به أو يحاكيه أو يرفضه.
تُحظر استدعاءات النظام الحساسة مثل ptrace أو إنشاء المقابس الخام افتراضيًا، مما يغلق مسارات الاستغلال الشائعة.
# gVisor blocks dangerous syscalls like ptrace.
# This code would fail inside a gVisor container:
#
# import ctypes
# libc = ctypes.CDLL(None)
# libc.ptrace(...) # EPERM: Operation not permitted
#
# Normal Python I/O and computation works fine:
# open(), read(), write(), socket() (if network enabled)
# are all emulated safely by Sentry.
print('gVisor intercepts syscalls before they reach the host kernel')مقايضة أداء gVisor
يمر كل استدعاء نظام عبر Sentry بدلًا من انتقاله مباشرةً إلى النواة. ويضيف ذلك عبئًا إضافيًا يتراوح بين ~10-30% في أعباء العمل الكثيفة بعمليات الإدخال والإخراج. أما في العمليات التي تقيّدها وحدة المعالجة المركزية، فسيكون العبء الإضافي أقل بكثير.
يشبه وقت البدء وقت Docker العادي — بضع ميلي ثوانٍ.
import time
import docker
client = docker.from_env()
start = time.time()
client.containers.run('python:3.12-slim', 'python -c "pass"',
runtime='runsc', auto_remove=True)
print(f'gVisor startup: {time.time()-start:.2f}s') # ~0.3-0.8s
start = time.time()
client.containers.run('python:3.12-slim', 'python -c "pass"',
auto_remove=True)
print(f'Docker startup: {time.time()-start:.2f}s') # ~0.1-0.3sالأجهزة الافتراضية المصغرة في Firecracker
يتبع Firecracker نهجًا مختلفًا تمامًا: فهو يشغّل كل عبء عمل داخل جهاز افتراضي كامل له نواته الخاصة. ويبدأ الجهاز الافتراضي خلال ~50ms، ولا يستهلك سوى ~5MB من الذاكرة الإضافية.
وبما أن للأجهزة الافتراضية نواة منفصلة تمامًا، فلا توجد مساحة هجوم مشتركة على مستوى النواة.
# Firecracker is controlled via a REST API on a Unix socket.
# Python SDK example (firecracker-python-sdk or direct HTTP):
import requests_unixsocket
session = requests_unixsocket.Session()
base = 'http+unix://%2Ftmp%2Ffirecracker.socket'
# Boot the microVM
session.put(f'{base}/boot-source', json={
'kernel_image_path': '/opt/kernel/vmlinux',
'boot_args': 'console=ttyS0 reboot=k panic=1 pci=off'
})
session.put(f'{base}/actions', json={'action_type': 'InstanceStart'})
print('MicroVM booted in ~50ms')نموذج أمان Firecracker
صُممت أجهزة Firecracker الافتراضية بسطح هجوم محدود. إذ يعرض VMM خمسة أنواع من الأجهزة فقط (virtio-net وvirtio-block وserial وRTC وkeyboard). ولا يتوفر USB أو ناقل PCI أو BIOS.
يُعزل كل جهاز افتراضي على مستوى مشرف الأجهزة الافتراضية — ولا يمكن لاستغلال ثغرة في نواة الجهاز الافتراضي أن يصل إلى المضيف.
# Firecracker security properties:
# 1. Each microVM has its own Linux kernel instance
# 2. Guest-to-host attack surface is tiny (5 device types)
# 3. The VMM (Virtual Machine Monitor) runs unprivileged
# 4. No shared memory between VMs
# 5. Snapshot/restore: freeze a running VM, clone it for next request
# Used in production by:
# - AWS Lambda (each function invocation = Firecracker microVM)
# - Fly.io (each app container)
# - Replit (code execution)
print('Firecracker: full VM isolation at container startup speed')Kata Containers: الجمع بين النهجين
تستخدم Kata Containers جهازًا افتراضيًا خفيفًا (يمكن أن تستخدم Firecracker أو QEMU)، لكنها تعرض واجهة حاويات OCI القياسية. ويمكنك تشغيل أوامر Docker المعتادة؛ إذ تتولى Kata طبقة الجهاز الافتراضي بشفافية.
import docker
client = docker.from_env()
# Kata Containers registered as 'kata-runtime' in daemon.json
output = client.containers.run(
'python:3.12-slim',
'python -c "import platform; print(platform.node())"',
runtime='kata-runtime', # each container = a VM
mem_limit='256m',
network_disabled=True,
auto_remove=True
)
print(output.decode()) # unique VM hostnameاختيار مستوى العزل المناسب
تعتمد البيئة المعزولة المناسبة على نموذج التهديد والمهلة الزمنية المقبولة:
- Docker (runc): سريع، وعبؤه الإضافي منخفض، لكنه يشترك في النواة — مناسب للتعليمات البرمجية الموثوقة أو التي خضعت لتصفية محدودة
- gVisor (runsc): تصفية لاستدعاءات النظام، ونفس تنسيق الصور، وعبء إضافي محدود — حل متوازن
- Firecracker/Kata: عزل كامل بواسطة جهاز افتراضي وبدء خلال 50ms — مناسب لتعليمات المستخدم البرمجية غير الموثوقة على نطاق واسع
جدول الأمان مقابل زمن بدء التشغيل
ترتبط درجة العزل وسرعة بدء التشغيل بعلاقة عكسية. اختر بناءً على زمن الاستجابة المقبول لحالة استخدام وكيلك.
# Isolation vs Latency summary:
#
# Runtime | Isolation | Startup | Overhead
# -----------------|---------------|----------|----------
# runc (Docker) | Namespace | ~100ms | ~0%
# gVisor (runsc) | Syscall filter | ~300ms | ~15-30%
# Kata Containers | Full VM | ~500ms | ~10%
# Firecracker | Full VM | ~50ms | ~5%
# QEMU KVM | Full VM | ~1-2s | ~5%
#
# For interactive agent tools: gVisor is usually the sweet spot.
# For high-throughput batch jobs: Firecracker snapshots.
ISOLATION_OPTIONS = {
'runc (Docker)': {'isolation': 'Namespace', 'startup': '~100ms', 'overhead': '~0%'},
'gVisor (runsc)': {'isolation': 'Syscall filter', 'startup': '~300ms', 'overhead': '~15-30%'},
'Kata Containers': {'isolation': 'Full VM', 'startup': '~500ms', 'overhead': '~10%'},
'Firecracker': {'isolation': 'Full VM', 'startup': '~50ms', 'overhead': '~5%'},
'QEMU KVM': {'isolation': 'Full VM', 'startup': '~1-2s', 'overhead': '~5%'},
}
for runtime, info in ISOLATION_OPTIONS.items():
print(f"{runtime:<17} | {info['isolation']:<14} | startup {info['startup']:<7} | overhead {info['overhead']}")
التهيئة المسبقة للبيئات المعزولة
يؤدي بدء جهاز افتراضي من حالة باردة لكل طلب من الوكيل إلى إضافة زمن استجابة. وتُهيّئ أنظمة الإنتاج مسبقًا مجموعة من البيئات المعزولة الخاملة. وعند وصول طلب، تُحجز بيئة دافئة وتُستخدم ثم تُدمّر (ولا يُعاد استخدامها مطلقًا).
import queue, threading
SANDBOX_POOL_SIZE = 5
pool = queue.Queue()
def pre_warm():
'Start a sandbox and put it in the pool.'
container = client.containers.create(
'python:3.12-slim',
'tail -f /dev/null',
runtime='runsc',
mem_limit='256m',
network_disabled=True
)
container.start()
pool.put(container)
# Pre-warm the pool at startup
for _ in range(SANDBOX_POOL_SIZE):
threading.Thread(target=pre_warm, daemon=True).start()
def claim_sandbox():
return pool.get(timeout=5) # blocks until one is readyأخذ اللقطات والاستعادة للتوسع
يدعم Firecracker أخذ لقطة لجهاز افتراضي قيد التشغيل وحفظها على القرص. وتلتقط اللقطة حالة الذاكرة وحالة الأجهزة وسجلات وحدة المعالجة المركزية. وتستغرق الاستعادة من لقطة ~10ms، وهي أسرع بكثير من البدء من حالة باردة.
يتيح هذا النمط تهيئة مفسر Python مرة واحدة، ثم أخذ لقطة له واستعادته لكل طلب.
# Firecracker snapshot workflow:
# 1. Boot microVM, run Python interpreter, wait for REPL ready
# 2. Pause VM
# 3. Create snapshot
# PUT /snapshot/create { snapshot_path, mem_file_path }
# 4. For each request:
# PUT /snapshot/load { snapshot_path, mem_file_path }
# # VM resumes from paused state with Python already loaded
# # Send code via stdin/virtio-serial, read output
# 5. Discard VM after request (never reuse)
print('Snapshot restore: ~10ms vs 50ms cold boot for Firecracker')ما المكوّن الذي يضعه gVisor بين الحاوية ونواة المضيف؟
يعتمد نموذج العزل في gVisor على مكوّن محدد يعترض استدعاءات النظام. ويُعد فهم هذه البنية أمرًا أساسيًا لتقييم ضمانات الأمان التي يوفرها.
مراجعة عزل الأجهزة الافتراضية
لتنفيذ تعليمات الوكيل البرمجية بدرجة أمان عالية، تجاوز Docker القياسي إلى gVisor (اعتراض استدعاءات النظام وعبء إضافي منخفض) أو Firecracker (جهاز افتراضي كامل، وبدء خلال 50ms، و~5MB من الذاكرة الإضافية).
وتتمثل المقايضة دائمًا في عمق العزل مقابل زمن بدء التشغيل. ويمكن لمجموعات التهيئة المسبقة ولقطات الأجهزة الافتراضية استعادة معظم تكلفة زمن الاستجابة في بيئات الإنتاج.
الأسئلة الشائعة
هل درس «العزل باستخدام الآلات الافتراضية لوكلاء التعليمات البرمجية عالية الأمان» مجاني؟
نعم — نص درس «العزل باستخدام الآلات الافتراضية لوكلاء التعليمات البرمجية عالية الأمان» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Agents، انتقل إلى CoddyKit PRO. تتضمن دورة AI Agents 4 دروس في المجموع.
ماذا ستتعلم في «العزل باستخدام الآلات الافتراضية لوكلاء التعليمات البرمجية عالية الأمان»؟
gVisor وFirecracker microVMs والعزل على مستوى العتاد للوكلاء. تتمرن على AI Agents مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AI Agents؟
لا تُشترط خبرة سابقة. AI Agents على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «العزل باستخدام الآلات الافتراضية لوكلاء التعليمات البرمجية عالية الأمان»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AI Agents هذا؟
نعم. كل درس في AI Agents يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- بيئات اختبار الوكلاء المعتمدة على Docker
- العزل باستخدام الآلات الافتراضية لوكلاء التعليمات البرمجية عالية الأمان
- خدمات E2B وبيئات الاختبار السحابية
- سياسات الأمان لتنفيذ التعليمات البرمجية