انتقل إلى المحتوى

شروحات

اعزل وكيلك عن الشبكة وامنحه الوصول الذي يحتاجه فقط: أوّل خطوات مع NVIDIA OpenShell

شرح عملي لـOpenShell 0.1.0 مفتوح المصدر من NVIDIA: أنشئ بيئة معزولة بلا شبكة، ثم اسمح بالقراءة فقط من GitHub API وامنع الكتابة، وسجّل كل قرار، واربط بيانات الاعتماد دون أن يراها الوكيل.

اعزل وكيلك عن الشبكة وامنحه الوصول الذي يحتاجه فقط: أوّل خطوات مع NVIDIA OpenShell

المستوى: متقدّم — يفترض أنك تشغّل وكلاء برمجة وتعرف سطر الأوامر.
وقت القراءة: نحو 8 دقائق.
هتحتاج: تثبيت OpenShell 0.1.0 باتّباع دليل التثبيت الرسمي، وملفّي السياسة المرافقين للدليل.

OpenShell بيئة تشغيل مفتوحة المصدر من NVIDIA، تحدّد الأنظمة والبيانات التي يصل إليها الوكيل دون إعادة كتابة الوكيل نفسه، وتفرض الصلاحيات خارج الوكيل: الوكيل يفسّر التعليمات ويختار الأدوات ويغيّر أسلوبه كما يشاء، لكن ما يستطيع الوصول إليه يُحدَّد ويُراقَب من الخارج. وهي جزء من منصّة NVIDIA الجديدة لسلامة الوكلاء. الإصدار الحالي 0.1.0، فجرّبها أوّلًا في بيئة اختبار قبل الإنتاج.

الفكرة في ثلاثة مكوّنات

  • Gateway: يدير دورة حياة البيئات المعزولة وسياساتها.
  • Supervisor: يرافق كل بيئة ويعمل خارجها، ويفحص كل طلب صادر مقابل السياسة.
  • Sandbox: يشغّل العمل بضوابط على مستوى النواة للملفات والعمليات، ولا مسار شبكي له إلا عبر المشرف.

وتبقى الضوابط سارية حين يفتح الوكيل shell أو يشغّل كودًا مولّدًا أو يطلق عمليات فرعية أو يفوّض مهامّ لوكلاء فرعيين. وتُسجَّل القرارات في سجلّ تدقيق بصيغة OCSF.

الخطوة 1: أنشئ بيئة بلا شبكة

بعد التثبيت، نزّل ملفّي السياسة no-network.yaml وgithub-readonly.yaml المرافقين للدليل إلى مجلّد examples، ثم:

openshell sandbox create --name policy-demo \
  --no-auto-providers \
  --policy examples/no-network.yaml

يفتح الأمر shell داخل البيئة. جرّب قراءة نقطة عامة:

curl -sS --max-time 10 https://api.github.com/zen

سيفشل الطلب لأن البيئة بلا صلاحية شبكة صادرة. وفي طرفية ثانية على جهازك، اعرف أي برنامج أرسل الطلب ولماذا مُنع:

openshell logs policy-demo --since 5m

الخطوة 2: اسمح بالقراءة فقط

السياسات تُكتب بـYAML وتُترجم إلى OPA/Rego وتُقيَّم لكل طلب صادر. هذه القاعدة تسمح لبرنامج curl فقط بالوصول إلى GitHub API للقراءة:

network_policies:
  github_api:
    name: github-api-readonly
    endpoints:
      - host: api.github.com
        port: 443
        protocol: rest
        enforcement: enforce
        access: read-only
    binaries:
      - path: /usr/bin/curl

مع protocol: rest يفحص OpenShell طلبات HTTP نفسها، فيسمح بالقراءة ويمنع الكتابة، حتى عبر الواجهة نفسها. طبّق السياسة من جهازك دون إعادة تشغيل البيئة:

openshell policy set policy-demo \
  --policy examples/github-readonly.yaml --wait

الخطوة 3: اختبر القراءة والكتابة

# Read: allowed
curl -sS --max-time 10 https://api.github.com/zen
# Write: blocked
curl -sS --max-time 10 -X POST https://api.github.com/zen

راجع السجلّ مرّة أخرى لتتأكّد أن طلب POST مُنع. أي وكيل يشغّل هذه الأوامر سيواجه القيود نفسها.

الخطوة 4: بيانات الاعتماد خارج الوكيل

يحتاج الوكيل غالبًا إلى واجهات مدفوعة أو خدمات خاصّة. في OpenShell تبقى بيانات الاعتماد الحقيقية خارج بيئة الوكيل، ويرى الوكيل «عنصرًا نائبًا» فقط، ويُستبدل بالقيمة الحقيقية خارج البيئة ولنقطة معتمدة فقط. إذا أرسل الوكيل العنصر النائب إلى وجهة أخرى، يُرفض الطلب. ويحدّد «ملف المزوّد» (Provider Profile) البيانات والنقاط والبرامج المسموحة. مثلًا، مع مزوّد GitHub مُعدّ مسبقًا باسم github:

openshell sandbox create \
  --provider github \
  -- codex

والخدمة المستقبِلة تظلّ تطبّق صلاحيات بيانات الاعتماد نفسها، لكن OpenShell يضيف طبقة أخرى: سياسة القراءة فقط تمنع الكتابة حتى لو كان المفتاح يملك صلاحية الكتابة.

الخطوة 5: دع الوكيل يقترح، وأنت توافق

قد يكتشف الوكيل أثناء العمل أنه يحتاج خدمة لم تكن معروفة مسبقًا. مع تفعيل «مستشار السياسات»، يستطيع الوكيل اقتراح تعديل ضيّق على سياسة الشبكة أو الملفات، ويبقى الاقتراح معلّقًا لمراجعة بشرية افتراضيًا، ولا يستطيع الوكيل الموافقة على طلبه بنفسه:

openshell settings set <sandbox-name> \
  --key agent_policy_proposals_enabled \
  --value true

بعد الموافقة تُحمَّل القاعدة الجديدة في البيئة العاملة. أما قيود الملفات والعمليات فتُحدَّد عند الإنشاء، وتغييرها يحتاج بيئة جديدة.

ملاحظة: تحقّق من السياسة نفسها

قد تبدو السياسة مقيّدة بينما تترك طريقًا آخر مفتوحًا: منع الكتابة إلى GitHub عبر أداة لا يفيد إذا كانت أداة أخرى مسموحة أو كود مولّد يستطيع استخدام المفتاح نفسه. لذلك يتضمّن OpenShell «مُثبِت سياسات» يستخدم المنطق الصوري للتحقّق من أن الصلاحيات الممنوحة تبقى ضمن حدود يحدّدها المشغّل، أو يعرض إجراءً محدّدًا يتجاوزها.

جرّب بنفسك

ابدأ بما في الخطوات 1 إلى 3: بيئة بلا شبكة، ثم قراءة فقط من خدمة واحدة، وراقب السجلّ. بعدها شغّل وكيل البرمجة الذي تستخدمه داخل البيئة بالسياسة نفسها، وسجّل كل طلب مُنع: هذه القائمة هي بالضبط ما كان وكيلك سيصل إليه دون أن تعرف.

المصادر: NVIDIA Developer — 2026-09-28