الانتقال إلى المحتوى الرئيسي

الاحتواء حدٌّ لا ميزانية: لماذا يحتاج خروج الوكيل إلى نموذج تكلفة

تقيّد بيئات العزل المكان الذي يعمل فيه الوكيل، لا مدى وصوله. اقرن الاحتواء بميزانية خروج لكل تشغيل تقيس الوجهات وحجم الحمولة.

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

تأطير الاحتواء ونقطته العمياء

بدائيات الاحتواء — بيئات العزل، والأجهزة الافتراضية، ومرشّحات استدعاءات النظام — بارعة في الإجابة عن سؤال أين يجوز تشغيل الشيفرة. فهي تحدّد بيئة التنفيذ: أي الملفات التنفيذية يمكن تشغيلها، وأي الملفات يمكن قراءتها، وأي استدعاءات النواة مسموح بها. هذه طبقة ضرورية لأي وكيل يشغّل شيفرة مولّدة أو أدوات عشوائية. لكنها ليست، مع ذلك، نموذجًا للمدى الخارجي.

الوكيل داخل بيئة عزل محتواة بإحكام يمكنه مع ذلك إصدار آلاف الطلبات الصادرة إلى آلاف الوجهات المتمايزة. لا تعنِي بيئة العزل إن كانت العملية تتحدث إلى مضيف واحد أم عشرة آلاف؛ ما يعنِيها ألّا تفلت العملية من الصندوق. نمط الفشل الذي نصادفه مرارًا ليس الإفلات، بل المدى.

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

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

الخروج كمورد ذي ميزانية

نتعامل مع الخروج كمورد ذي ميزانية بأبعاد تُخصَم مقابل كل إجراء صادر. الأبعاد التي وجدناها مفيدة هي:

Close-up of a black keyboard with focus on the QWER keys

  • الوجهات المتمايزة. عدد نقاط النهاية الشبكية الفريدة التي جرى الاتصال بها، لا عدد الاستدعاءات. عشرة آلاف استدعاء لمضيف واحد تمثّل ملفًا خطرًا مختلفًا عن عشرة استدعاءات لعشرة آلاف مضيف. يجب أن يوحّد عدّ الوجهات بين DNS وعنوان IP والمنفذ، وأن يعامل عمليات إعادة التوجيه كوجهات جديدة.
  • البايتات الصادرة. حجم الحمولة الخارجة من العملية، بما في ذلك الترويسات وسلاسل الاستعلام وأجسام الطلبات. هذا يلتقط التسريب البطيء الذي يبقى تحت عتبات عدد الاستدعاءات.
  • نطاق بيانات الاعتماد. مجموعة الهويات والرموز التي يمكن للخروج تقديمها. ميزانية تسمح برمز واسع النطاق لوجهة ضيقة تبقى ميزانية واسعة.
  • النافذة الزمنية. الفترة التي تكون فيها الميزانية سارية. ميزانية تتجدد كل ثانية ليست ميزانية.

الإنفاذ ينتمي إلى الحدّ الشبكي، لا إلى إطار عمل الوكيل. الفحوص على مستوى الإطار استشارية: فهي تعتمد على تعاون الوكيل، وعلى استخدام غلاف الأداة استخدامًا صحيحًا، وعلى ألّا يتجاوز أي مسار شيفرة الغلاف. أما الحدّ الشبكي — وكيل وسيط، أو حاوية جانبية في شبكة خدمات، أو خطاف eBPF على واجهة الخروج — فيرى كل حزمة بصرف النظر عن المكتبة التي بدأتها. يمكن لإطار عمل الوكيل أن يطلب ميزانية؛ أما الحدّ فينفّذها.

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

قواعد التصميم

كل استدعاء أداة يغادر العملية يجب أن يخصم من ميزانية. يشمل ذلك الاستدعاءات التي تبدو داخلية، والاستدعاءات التي تستخدم مدخل DNS مخزّنًا مؤقتًا، والاستدعاءات التي تجريها التبعيات لا شيفرة الوكيل نفسه. إذا غادر بايت حدود العملية، فهو خروج. الخصم ذرّي مع الطلب؛ فإن فشل الخصم، لا يغادر الطلب.

الميزانيات لكل تشغيل ولكل هوية، ولا تُرحَّل. التشغيل مهمة منطقية واحدة ببداية ونهاية محدّدتين. الميزانية تنتمي إلى ذلك التشغيل، لا إلى عملية الوكيل، ولا إلى جلسة المستخدم، ولا إلى النشر. تُحدَّد نطاقات الهويات كلٌّ على حدة: وكيل يعمل نيابة عن مستخدم لا يرث ميزانية آخر. الميزانية غير المستخدمة لا تُدَّخر للتشغيل اWhite industrial robotic arm operating indoors in a modern factory setting](/media/server-rack-closeup-3b0bfb-b5562f.jpg)

سجّل الخصم وفئة الوجهة والقرار، لا الطلب فقط. سطر سجل يسجّل الرابط وحده غير كافٍ لتحليل ما بعد الحادث. نسجّل مقدار خصم الميزانية، وفئة الوجهة (على سبيل المثال: خدمة داخلية، واجهة برمجة تطبيقات خارجية، ويب عام، غير معروفة)، والميزانية المتبقية، وقرار السياسة الذي سمح بالطلب أو رفضه. سجل القرار هو ما يجعل الميزانية قابلة للتدقيق. بدونه، الميزانية رقم لا ضابط.

آلية ملموسة

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

لا يرى الوكيل جدول الميزانية أبدًا. يرى رفضًا، وعليه أن يتعامل معه كشرط غير قابل لإعادة المحاولة. هذا مقصود: لا ينبغي أن يكون الوكيل قادرًا على التفكير في مداه المتبقي، لأن وكيلًا يستطيع التفكير في مداه المتبقي يستطيع التخطيط حوله.

المقايضة الصادقة

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

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

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

مشاركةXLinkedInرابط دائم5 دقيقة قراءة

الأسئلة التي يجيب عنها هذا

Why is sandboxing alone insufficient for agent safety?

Sandboxing constrains the execution environment, not the external surface an agent can touch. A contained agent can still issue thousands of outbound requests to thousands of distinct destinations, so the failure mode is reach rather than escape.

What dimensions should an egress budget track?

Distinct destinations, bytes out, credential scope, and time window. Counting only calls misses fan-out to many hosts and slow exfiltration that stays under call-count thresholds.

Where should egress budgets be enforced?

At the network boundary — a proxy, service mesh sidecar, or eBPF hook — rather than in the agent framework. Framework-level checks depend on agent cooperation and can be bypassed by dependencies or alternate code paths.

What happens when an agent exhausts its egress budget?

The run terminates in a first-class budget-exhausted state. The operator is notified and can authorise a new run with an explicit new budget. Exhaustion is a defined outcome, not a silent retry.