pending_approval، يُعلَّق استدعاء الأداة وينتظر
وكيلك. افتراضياً يمحو مراجِع ذلك التعليق من وحدة التحكم. webhook موافقة جدار
الحماية يربط نفس البوابة بـ نظامك: ترسل البوابة POST بإشعار موقَّع إلى
نقطة نهايتك لحظة تعليق استدعاء، ويرسل نظامك POST بقرار موقَّع بـ HMAC عائداً
لتحريره — لا مقعد وحدة تحكم، لا استطلاع إنسان.
هذا النصف اللامتزامن (الاستدعاء) من الإنسان في الحلقة. الاستدعاء المُعلَّق،
والحكم، ومسار حل وحدة التحكم مغطّاة في
حل الموافقات و
مرجع جدار الحماية؛ هذه الصفحة
هي مجرد ربط الـ webhook.
الـ webhook تنبيه مسار سريع، وليس نظام السجل. الاستطلاع الطويل للترحيل
على الاستدعاء المُعلَّق هو البوابة الموثوقة — إذا أُسقِط إشعار أو كان مستقبِلك
معطّلاً، يبقى التعليق قائماً ويمكن لمراجِع محوه من وحدة التحكم. ضبط الـ webhook
يضيف فقط طريقة برمجية لحلّه.
1. متى تستخدم webhook موافقة جدار الحماية
الجأ إليه عندما يجب حل بوابة جدار حماية بالإنسان في الحلقة بشيء غير شخص ينقر زراً:وجّه إلى واجهة موافقاتك الخاصة
ادفع استدعاءات الأدوات المُعلَّقة إلى Slack أو PagerDuty أو طابور مراجعة
داخلي وحلّها حيث يعمل فريقك بالفعل.
سياسة برمجية
وافق تلقائياً على
db.query مُعلَّق مقابل نسخة قراءة، ارفض تلقائياً واحداً
مقابل prod — كودك يقرّر، البوابة تفرض.2. اضبطه في وحدة التحكم
كلا النصفين يعيشان على إعداد مساحة عمل واحد. افتح Firewall → Settings واملأ حقلين (إجراء Developer+ — كتابة الإعدادات محكومة بالدور):Approval webhook URL — أين نُشعرك
Approval webhook URL — أين نُشعرك
نقطة نهاية
https:// التي نرسل POST إليها عند تعليق استدعاء. HTTP مرفوض،
وتُمرَّر الـ URL عبر فحص SSRF مسبق عند الحفظ، فوجهة loopback أو نطاق خاص أو
بيانات تعريف سحابة تُرفض قبل أن يمكن تخزينها. اتركه فارغاً لتعطيل المسار
اللامتزامن بالكامل.Shared secret — كيف يصادق الجانبان
Shared secret — كيف يصادق الجانبان
3. الإشعار الذي نرسله لك
عند تعليق استدعاء، نرسل POST بمظروف JSON موقَّع إلى الـ URL الخاص بك:approval_id الذي تحتاجه
للحل ومعرّفات للربط، وليس أبداً وسائط الأداة. تفصيل الوسائط يعيش في
طابور الموافقات و
سجل أحداث جدار الحماية.
4. الاستدعاء الذي ترسله عائداً
لتحرير (أو رفض) التعليق، أرسل POST بقرارك إلى نقطة نهاية الاستدعاء بـapproval_id من الإشعار:
decision هو approved أو rejected — لا قيمة أخرى مقبولة. reason
اختياري ويظهر على مسار تدقيق الموافقة المحلولة.
الاستدعاء أول-قرار-يفوز وعديم الأثر تكرارياً: أياً كان من يحل أولاً —
webhook الخاص بك أو مراجِع وحدة تحكم — يضبط النتيجة، واستدعاء مكرَّر لموافقة
محلولة بالفعل يعيد 200 فيتوقف نظامك عن إعادة المحاولة.
5. تحرير الاستدعاء المُعلَّق
حل الموافقة لا يعيد تشغيل استدعاء الأداة لك — يرفع البوابة فيمكن لوكيلك إعادة إصداره. زمن تشغيل الوكيل:- يستطلع حالة التعليق على
GET /api/v1/firewall/approvals/:id(مفتاح ضمن نطاق بوابة جدار الحماية، وليس مفتاح ترحيلك أو جلسة وحدة التحكم) حتى يغادرpending. - عند
approved، يعيد تقديم استدعاء الأداة الأصلي حاملاً ترويسةX-OrcaRouter-Firewall-Approvalأحادية الاستخدام — تدع البوابة ذلك الاستدعاء الواحد يمر ويُستهلَك الرمز.
إذا حُرِّرت القاعدة الأساسية بعد تعليق الاستدعاء، يعلّم
طابور الموافقات أن القاعدة تغيّرت
منذ ذلك الحين ويكبت عبارة “عُلِّق لأن…” القديمة الآن، فلا يتصرّف مراجِع وحدة
تحكم بناءً على أصل لم يعد يطابق ما علّق الاستدعاء.
6. تحقّق من الربط
فحص سريع من البداية إلى النهاية قبل أن تعتمد عليه:| الخطوة | ماذا تفعل | المتوقَّع |
|---|---|---|
| علّق استدعاءً | أطلق قاعدة بحكم pending_approval | 400 firewall_approval_pending |
| الإشعار | راقب نقطة نهايتك | يصل POST موقَّع firewall.approval.pending |
| الاستدعاء | أرسل POST موقَّعاً { "decision": "approved" } | 200 بالحالة المحلولة |
| حارس الإعادة | أرسل الاستدعاء مجدداً | 200، محلولة بالفعل (لا تطبيق مزدوج) |
7. أين يقع هذا
حل الموافقات
مسار مراجِع وحدة التحكم ودورة حياة الاستدعاء المُعلَّق الكاملة.
الأحكام
من أين يأتي
pending_approval وكيف يتركّب مع الأحكام الأخرى.مفاتيح البوابة
اسكك المفتاح ضمن نطاق بوابة جدار الحماية الذي يحتاجه تدفّق الاستطلاع +
إعادة التقديم.
الوكالة المفرطة
التهديد الذي بُنيت بوابات الإنسان في الحلقة لاحتوائه.
