Gateway
نطاقات المشغّل
تحدد نطاقات المشغّل ما يمكن لعميل Gateway فعله بعد أن يصادق على هويته. وهي آلية حماية لمستوى التحكم داخل نطاق مشغّل Gateway موثوق واحد، وليست عزلاً عدائياً متعدد المستأجرين. لتحقيق فصل قوي بين الأشخاص أو الفرق أو الأجهزة، شغّل Gateways منفصلة ضمن مستخدمي نظام تشغيل أو مضيفين منفصلين.
ذو صلة: الأمان، بروتوكول Gateway، إقران Gateway، CLI للأجهزة.
الأدوار
يتصل كل عميل WebSocket في Gateway باستخدام دور واحد:
operator: عملاء مستوى التحكم مثل CLI وواجهة التحكم والأتمتة وعمليات المساعدة الموثوقة.node: مضيفو الإمكانات (macOS وiOS وAndroid ودون واجهة رسومية) الذين يتيحون الأوامر من خلالnode.invoke.
تتطلب أساليب RPC الخاصة بالمشغّل دور operator؛ بينما تتطلب الأساليب الصادرة
عن Node دور node.
مستويات النطاق
| النطاق | المعنى |
|---|---|
operator.read |
الحالة والقوائم والكتالوج والسجلات وقراءات الجلسات وغيرها من الاستدعاءات غير المعدِّلة، بصلاحية القراءة فقط. |
operator.write |
إجراءات المشغّل المعدِّلة: إرسال الرسائل واستدعاء الأدوات وتحديث إعدادات المحادثة/الصوت وترحيل أوامر Node. ويستوفي أيضاً operator.read. |
operator.admin |
وصول إداري. يستوفي كل نطاقات operator.*. وهو مطلوب لتعديل الإعدادات والتحديثات والخطافات الأصلية ومساحات الأسماء المحجوزة والموافقات عالية المخاطر. |
operator.pairing |
إدارة إقران الأجهزة وNodes: السرد والموافقة والرفض والإزالة والتدوير والإبطال. |
operator.approvals |
واجهات API للموافقة على التنفيذ وPlugin. |
operator.talk.secrets |
قراءة إعدادات المحادثة مع تضمين الأسرار. |
تتطلب نطاقات operator.* المستقبلية غير المعروفة تطابقاً تاماً، ما لم يكن
المستدعي يحمل operator.admin بالفعل.
نطاق الأسلوب ليس سوى البوابة الأولى
لكل RPC في Gateway نطاق أسلوب قائم على أقل الامتيازات، يقرر ما إذا كان الطلب سيصل إلى معالجه. ثم تطبق بعض المعالجات فحوصاً أكثر صرامة بناءً على الشيء المحدد الجاري اعتماده أو تعديله:
- يمكن الوصول إلى
device.pair.approveباستخدامoperator.pairing، لكن اعتماد جهاز مشغّل لا يمكنه إصدار أو الاحتفاظ إلا بالنطاقات التي يحملها المستدعي بالفعل. - يمكن الوصول إلى
node.pair.approveباستخدامoperator.pairing، ثم يشتق نطاقات موافقة إضافية من قائمة الأوامر المعلنة الخاصة بـNode المعلّقة. - يُعد
chat.sendأسلوباً ذا نطاق كتابة، لكن أمري المحادثة/config setو/config unsetيتطلبانoperator.adminبالإضافة إلى ذلك، بغض النظر عن نطاق إرسال المحادثة لدى المستدعي.
يتيح ذلك للمشغّلين ذوي النطاقات الأدنى تنفيذ إجراءات إقران منخفضة المخاطر دون جعل جميع موافقات الإقران مقصورة على المسؤولين.
موافقات إقران الأجهزة
سجلات إقران الأجهزة هي المصدر الدائم للأدوار والنطاقات المعتمدة. لا يحصل الجهاز المقترن مسبقاً على وصول أوسع ضمنياً: إذ تؤدي إعادة الاتصال التي تطلب دوراً أو نطاقات أوسع إلى إنشاء طلب ترقية معلّق جديد.
عند اعتماد طلب جهاز:
- لا يحتاج الطلب الذي لا يتضمن دور مشغّل إلى موافقة على نطاق المشغّل.
- يتطلب طلب دور جهاز غير مشغّل (مثل
node) النطاقoperator.admin، رغم أنdevice.pair.approveنفسه لا يحتاج إلا إلىoperator.pairing. - يتطلب طلب
operator.readأوoperator.writeأوoperator.approvalsأوoperator.pairingأوoperator.talk.secretsأن يكون المستدعي حاملاً لذلك النطاق بالفعل، أو حاملاً لـoperator.admin. - يتطلب طلب
operator.adminالنطاقoperator.admin. - يمكن لطلب إصلاح دون نطاقات صريحة أن يرث نطاقات رمز المشغّل
الحالي؛ وإذا كان ذلك الرمز ذا نطاق إداري، فتظل الموافقة تتطلب
operator.admin.
لا يمكن لجلسات السر المشترك والوكيل الموثوق غير الإدارية اعتماد
طلبات أجهزة المشغّل إلا ضمن نطاقات المشغّل المعلنة الخاصة بها؛ وتظل الموافقة
على الأدوار غير المشغّلة مقصورة على المسؤولين، حتى عندما تستطيع تلك الجلسات استخدام
operator.pairing في الحالات الأخرى.
بالنسبة إلى جلسات رموز الأجهزة المقترنة، تكون الإدارة مقيدة بالذات ما لم يكن المستدعي
يحمل operator.admin: لا يرى المستدعي غير الإداري سوى إدخالات الإقران الخاصة به،
ولا يمكنه الموافقة أو الرفض أو التدوير أو الإبطال أو الإزالة إلا لإدخال جهازه.
موافقات إقران Node
تستخدم أساليب node.pair.* القديمة مخزناً منفصلاً لإقران Node يملكه Gateway.
أما WS Nodes فتستخدم إقران الأجهزة (role: node) بدلاً من ذلك، لكن مفردات
الموافقة نفسها تنطبق. راجع إقران Gateway لمعرفة كيفية ارتباط
المخزنين.
يشتق node.pair.approve نطاقات إضافية مطلوبة من قائمة أوامر الطلب
المعلّق:
| الأوامر المعلنة | النطاقات المطلوبة |
|---|---|
| لا شيء | operator.pairing |
| أوامر Node غير التنفيذية | operator.pairing + operator.write |
system.run أو system.run.prepare أو system.which |
operator.pairing + operator.admin |
لا يؤدي اعتماد تصريح Node إلى تمكين الأوامر التي لها بوابة قائمة سماح
منفصلة في وقت التشغيل. على سبيل المثال، يتطلب اعتماد Node يعلن
computer.act نطاقي الإقران والكتابة، لكنه لا يفعل سوى تسجيل السطح.
ويجب أن يظل المسؤول أو المالك هو من يفعّل computer.act. وما دام مفعّلاً،
فإن استدعاءه عبر أسلوب node.invoke ذي نطاق الكتابة لا يتطلب
نطاق المسؤول لكل إجراء.
ينشئ إقران Node الهوية والثقة؛ لكنه لا يحل محل سياسة الموافقة الخاصة بـNode
لتنفيذ system.run.
مصادقة السر المشترك
تُعامل مصادقة رمز/كلمة مرور Gateway المشتركة على أنها وصول مشغّل موثوق
لذلك Gateway. وتستعيد أسطح HTTP المتوافقة مع OpenAI و/tools/invoke ونقاط
نهاية سجل الجلسات عبر HTTP المجموعة الافتراضية الكاملة من نطاقات المشغّل
لمصادقة حامل السر المشترك، حتى إذا أرسل المستدعي نطاقات معلنة أضيق.
لا يزال بإمكان الأنماط الحاملة للهوية، مثل مصادقة الوكيل الموثوق أو none
للدخول الخاص، احترام النطاقات الصريحة المعلنة. استخدم Gateways منفصلة لتحقيق
فصل حقيقي بين حدود الثقة.