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.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 است استفاده میکنند.
Nodeهای WS در عوض از جفتسازی دستگاه (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 هویت و اعتماد را برقرار میکند؛ اما جایگزین سیاست تأیید اجرای
system.run خود Node نمیشود.
احراز هویت با راز مشترک
احراز هویت با توکن/گذرواژهٔ مشترک Gateway برای همان Gateway بهعنوان دسترسی اپراتوری
مورد اعتماد در نظر گرفته میشود. سطوح HTTP سازگار با OpenAI، /tools/invoke و نقاط پایانی HTTP
تاریخچهٔ نشست، مجموعهٔ کامل و پیشفرض دامنههای اپراتور را برای احراز هویت حاملِ راز مشترک
بازیابی میکنند، حتی اگر فراخواننده دامنههای اعلامشدهٔ محدودتری ارسال کند.
حالتهای دارای هویت، مانند احراز هویت پراکسی مورد اعتماد یا none در ورودی خصوصی،
همچنان میتوانند دامنههای صریح اعلامشده را رعایت کنند. برای جداسازی واقعی مرز اعتماد،
از Gatewayهای جداگانه استفاده کنید.