Gateway
دامنههای اپراتور
دامنههای عملگر تعیین میکنند که یک کلاینت Gateway پس از احراز هویت چه کارهایی میتواند انجام دهد. آنها یک سازوکار حفاظتی صفحهٔ کنترل درون یک دامنهٔ عملگر مورداعتماد Gateway هستند، نه جداسازی چندمستاجری در برابر عوامل متخاصم. برای جداسازی قوی میان افراد، تیمها یا دستگاهها، Gatewayهای جداگانهای را تحت کاربران یا میزبانهای جداگانهٔ سیستمعامل اجرا کنید.
مرتبط: امنیت، پروتکل 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 |
مدیریت جفتسازی دستگاه و Node: فهرستکردن، تأیید، رد، حذف، چرخش و ابطال. |
operator.approvals |
APIهای تأیید اجرا و Plugin. |
operator.questions |
فهرستکردن، خواندن، پاسخدادن و حلوفصل پرسشهای تعاملی. |
operator.talk.secrets |
خواندن پیکربندی گفتوگو همراه با اسرار. |
دامنههای ناشناختهٔ آیندهٔ operator.* به تطبیق دقیق نیاز دارند، مگر اینکه فراخواننده
از قبل operator.admin را داشته باشد.
دامنهٔ متد فقط نخستین دروازه است
هر RPC مربوط به Gateway یک دامنهٔ متد با حداقل سطح دسترسی دارد که تعیین میکند آیا درخواست به کنترلکنندهٔ آن میرسد یا نه. متدهای آگاه از پارامتر، این دامنه را پیش از ارسال استخراج میکنند تا خطاهای مجوزدهی یک پاسخ ساختیافتهٔ معیار داشته باشند:
agentبرای نوبتهای عادی بهoperator.writeو برای فرمانهای چرخهٔ عمر نشست/newیا/resetبهoperator.adminنیاز دارد.node.invokeبرای فرمانهای عادی رله بهoperator.writeو برایbrowser.proxy،fs.listDirوterminal.uploadبهoperator.adminنیاز دارد.talk.configبهoperator.readنیاز دارد؛includeSecrets: trueهمچنین بهoperator.talk.secretsنیاز دارد.
سپس برخی کنترلکنندهها بر اساس مورد مشخصی که تأیید یا تغییر داده میشود، بررسیهای سختگیرانهتری اعمال میکنند:
device.pair.approveباoperator.pairingقابل دسترسی است، اما تأیید یک دستگاه عملگر فقط میتواند دامنههایی را ایجاد یا حفظ کند که فراخواننده از قبل در اختیار دارد.node.pair.approveباoperator.pairingقابل دسترسی است، سپس دامنههای تأیید اضافی را از فهرست فرمانهای اعلامشدهٔ Node در انتظار استخراج میکند.chat.sendمتدی با دامنهٔ نوشتن است، اما فرمانهای گپ/config setو/config unsetعلاوه بر آن بهoperator.adminنیاز دارند، فارغ از دامنهٔ ارسال گپ فراخواننده.
این امکان را فراهم میکند که عملگرهای دارای دامنهٔ محدودتر، اقدامات جفتسازی کمخطر را انجام دهند، بدون آنکه همهٔ تأییدهای جفتسازی صرفاً مدیریتی شوند.
RPCهای تغییر نشست بر اساس دامنههای عملگر توافقشدهٔ آنها مجاز میشوند،
مستقل از client.id یا client.mode کلاینت متصلشونده. هویت کلاینت
همچنان میتواند بر سیاست اتصال و احراز هویت دستگاه اثر بگذارد، اما نه اختیار تغییر نشست را
اعطا میکند و نه آن را میگیرد.
تأییدهای جفتسازی دستگاه
رکوردهای جفتسازی دستگاه، منبع پایدار نقشها و دامنههای تأییدشده هستند. دستگاهی که قبلاً جفت شده است، بیسروصدا دسترسی گستردهتری دریافت نمیکند: اتصال مجددی که نقش یا دامنههای گستردهتری درخواست کند، یک درخواست ارتقای در انتظار جدید ایجاد میکند.
تأیید یک درخواست دستگاه:
- درخواستی بدون نقش عملگر به تأیید دامنهٔ عملگر نیاز ندارد.
- درخواست برای یک نقش دستگاه غیرعملگر (برای مثال
node) بهoperator.adminنیاز دارد، هرچند خودdevice.pair.approveفقط بهoperator.pairingنیاز دارد. - درخواست برای
operator.read،operator.write،operator.approvals،operator.questions،operator.pairingیاoperator.talk.secretsمستلزم آن است که فراخواننده از قبل آن دامنه یاoperator.adminرا داشته باشد. - درخواست برای
operator.adminبهoperator.adminنیاز دارد. - یک درخواست ترمیم بدون دامنههای صریح میتواند دامنههای توکن عملگر موجود را
به ارث ببرد؛ اگر دامنهٔ آن توکن مدیریتی باشد، تأیید همچنان به
operator.adminنیاز دارد.
نشستهای مبتنی بر راز مشترک و پروکسی مورداعتماد که مدیریتی نیستند، فقط میتوانند
درخواستهای دستگاه عملگر را در محدودهٔ دامنههای عملگر اعلامشدهٔ خود تأیید کنند؛ تأیید
نقشهای غیرعملگر صرفاً مدیریتی است، حتی زمانی که آن نشستها در حالت عادی میتوانند از
operator.pairing استفاده کنند.
برای نشستهای توکن دستگاه جفتشده، مدیریت به خود دستگاه محدود است، مگر اینکه فراخواننده
operator.admin را داشته باشد: فراخوانندهٔ غیرمدیریتی فقط ورودیهای جفتسازی خودش را میبیند و
فقط میتواند ورودی دستگاه خودش را تأیید، رد، بچرخاند، باطل یا حذف کند.
تأییدهای جفتسازی Node
متدهای قدیمی node.pair.* از یک مخزن جفتسازی Node جداگانه و متعلق به Gateway استفاده میکنند.
Nodeهای WS بهجای آن از جفتسازی دستگاه (role: node) استفاده میکنند، اما همان واژگان
تأیید اعمال میشود. برای چگونگی ارتباط این دو مخزن، جفتسازی Gateway را ببینید.
node.pair.approve دامنههای الزامی اضافی را از فهرست فرمانهای درخواست در انتظار
استخراج میکند:
| فرمانهای اعلامشده | دامنههای الزامی |
|---|---|
| هیچکدام | operator.pairing |
| فرمانهای عادی Node | operator.pairing + operator.write |
system.run، system.run.prepare، system.which، browser.proxy، fs.listDir یا system.execApprovals.get/set |
operator.pairing + operator.admin |
تأیید اعلامیهٔ یک Node، فرمانهایی را که دروازهٔ جداگانهٔ فهرست مجاز زمان اجرا دارند فعال نمیکند.
برای مثال، تأیید Nodeای که computer.act را اعلام میکند به جفتسازی بهعلاوهٔ دامنهٔ نوشتن نیاز دارد،
اما فقط آن سطح را ثبت میکند. یک مدیر یا مالک همچنان باید computer.act را فعال کند. تا زمانی که
فعال باقی میماند، فراخوانی آن از طریق node.invoke به دامنهٔ نوشتن نیاز دارد، اما برای هر اقدام
به دامنهٔ مدیریتی نیاز ندارد.
جفتسازی Node هویت و اعتماد را برقرار میکند؛ جایگزین سیاست تأیید اجرای
system.run خود Node نمیشود.
احراز هویت با راز مشترک
احراز هویت با توکن/گذرواژهٔ مشترک Gateway برای آن Gateway بهعنوان دسترسی عملگر مورداعتماد
در نظر گرفته میشود. سطوح HTTP سازگار با OpenAI، /tools/invoke و نقاط پایانی HTTP
تاریخچهٔ نشست، مجموعهٔ کامل دامنههای پیشفرض عملگر را برای احراز هویت حامل با راز مشترک
بازیابی میکنند، حتی اگر فراخواننده دامنههای اعلامشدهٔ محدودتری ارسال کند.
حالتهای دارای هویت، مانند احراز هویت پروکسی مورداعتماد یا none ورودی خصوصی،
همچنان میتوانند دامنههای صریح اعلامشده را رعایت کنند. برای جداسازی واقعی مرز اعتماد
از Gatewayهای جداگانه استفاده کنید.