وثائق بوابة القرار

تقييم بوابة حتمي وقابل لإعادة التشغيل مع قرارات قابلة للتدقيق.

وثائق Asset Core

مساحة قرار البوابة + بنية RBAC/ACL لسجل

Audience: Engineers implementing or reviewing namespace policy, Asset Core namespace authority integration, and schema registry access control. This document is the canonical, implementation-aligned description of how الجمهور: المهندسون الذين يقومون بتنفيذ أو مراجعة سياسة مساحة الأسماء، تكامل سلطة مساحة أسماء Asset Core، والتحكم في الوصول إلى سجل المخططات. هذه الوثيقة هي الوصف القياسي المتماشي مع التنفيذ لكيفية فرض Decision Gate (DG) لحدود مساحة الأسماء وRBAC/ACL للسجل.


جدول المحتويات

  1. نظرة عامة تنفيذية
  2. نطاق والأهداف غير المتضمنة
  3. المفاهيم الأساسية والأنواع
  4. Namespace Policy
    1. حارس مساحة الاسم الافتراضية
    2. وضعيات سلطة النطاق
    3. قواعد رسم خرائط الأصول الأساسية
    4. وضع الفشل
  5. Registry RBAC/ACL
    1. قرار رئيسي
    2. سياسة ACL المدمجة
    3. سياسة ACL مخصصة
    4. متطلبات التوقيع
  6. تدفقات قرار التفويض
  7. تدقيق ورصد
  8. التخزين والاستمرارية
  9. ثوابت الأمان
  10. اختبار والتحقق
  11. مرجع متقاطع ملف بملف
  12. وثائق ذات صلة

نظرة عامة تنفيذية

تفرض Decision Gate عزل المساحات الاسمية وتفويض سجل المخططات كـ حدود أمان من الدرجة الأولى. جميع فحوصات المساحة الاسمية والسجل هي فشل مغلق وتُنفذ قبل أي تغيير في حالة السجل أو السيناريو. النظام متحفظ عن عمد:

Registry RBAC/ACL يتم تحديد نطاقه بواسطة المستأجر + مساحة الأسماء + الموضوع ويمكن تكوينه كإما مدمج أو مخصص. يتم تعريف السياسة المدمجة بشكل صريح بواسطة أسماء الأدوار مع تصنيف فئة السياسة للوصول الكتابي.F:crates/decision-gate-mcp/src/registry_acl.rs L218-L255


نطاق والأهداف غير المتوقعة

في النطاق:

  • التحقق من صحة مساحة الأسماء في أدوات MCP.
  • قيود مساحة الأسماء الافتراضية.
  • دمج سلطة مساحة اسم Asset Core.
  • سياسة RBAC/ACL لمستودع المخططات ومتطلبات التوقيع.
  • تدقيق وتشغيل سياق الأمان لهذه القرارات.

خارج النطاق (تم التعامل معه في مكان آخر أو تم استبعاده عمدًا):

  • Asset Core write-path gating (explicitly out of scope in the integration حجب مسار الكتابة في Asset Core (خارج نطاق العقد التكامل).
  • التحكم في الوصول القائم على الدور على مستوى السيناريو أو قوائم الأدوات المسموح بها (مغطاة في وثائق مصادقة الخادم).
  • تنفيذ ثقة مزود الأدلة (موثق في دليل الأمان).

المفاهيم الأساسية والأنواع

معرفات المساحة والمستأجرين

تُعتبر المساحات الإسمية والمستأجرون معرفات صريحة تحملها طلبات الأدوات. المعرف الافتراضي المحجوز للمساحة الإسمية هو 1 ويجب أن يمر بفحوصات إضافية قبل أن تتم أي عملية. F:crates/decision-gate-mcp/src/tools.rs L162-L168 F:crates/decision-gate-mcp/src/tools.rs L2821-L2841

سجلات سجل المخططات

مدخلات سجل المخطط هي قيم DataShapeRecord غير قابلة للتغيير. يتم تحديد كل سجل بواسطة المستأجر + مساحة الاسم + معرف المخطط + الإصدار، وقد تتضمن بيانات توقيع اختيارية (معرف المفتاح، التوقيع، الخوارزمية الاختيارية). F:crates/decision-gate-core/src/core/data_shape.rs L49-L72


سياسة النطاق

حارس مساحة الأسماء الافتراضية

الفضاء الافتراضي هو معرف محجوز مشفر (1). سلوكه ضيق عن عمد:

  • If namespace.allow_default is false, all requests targeting the default إذا كانت namespace.allow_default خاطئة، يتم رفض جميع الطلبات التي تستهدف مساحة الأسماء الافتراضية.
  • If namespace.allow_default is true, namespace.default_tenants must be إذا كانت namespace.allow_default صحيحة، يجب أن تكون namespace.default_tenants غير فارغة ويجب على المتصل تقديم tenant_id في قائمة السماح.
  • يتم تطبيق حارس مساحة الأسماء الافتراضية قبل التحقق من السلطات الخارجية.

تنفيذ:

أوضاع سلطة الفضاء

تحدد سلطة مساحة الأسماء كيفية تحقق DG من وجود مساحة الأسماء:

الوضعالسلوكالمصدر
noneلا توجد فحوصات للسلطة الخارجية (سياسة مساحة الأسماء المحلية فقط)NamespaceAuthorityMode::NoneF:crates/decision-gate-config/src/config.rs L1056-L1115
assetcore_httpتحقق من مساحة الأسماء عبر واجهة برمجة التطبيقات HTTP لكتابة Asset CoreNamespaceAuthorityMode::AssetcoreHttpF:crates/decision-gate-config/src/config.rs L1056-L1115 F:crates/decision-gate-mcp/src/namespace_authority.rs L67-L159

عند تمكين assetcore_http، يقوم DG بالتحقق من الأسماء المستعارة من خلال إصدار طلب GET إلى /{base_url}/v1/write/namespaces/{resolved_id}. HTTP 200 = مسموح؛ 404 أو 401/403 = مرفوض؛ يتم التعامل مع الحالات الأخرى وأخطاء النقل على أنها غير متاحة (فشل مغلق). F:crates/decision-gate-mcp/src/namespace_authority.rs L130-L158

يمكن أن تتضمن طلبات سلطة Asset Core رمز حاملي اختياري ورأس x-correlation-id مشتق من رأس التوافق الذي قدمه العميل غير الآمن عند توفره (مع العودة إلى معرف طلب JSON-RPC أو معرف التوافق الصادر عن الخادم). يتم التحقق من معرفات توافق العميل بدقة ورفضها عند عدم صلاحيتها؛ فقط القيم المعقمة يتم تمريرها إلى سلطة الفضاء الاسمي لمنع حقن الرؤوس وتزوير السجلات.F:crates/decision-gate-mcp/src/tools.rs L2821-L2852 F:crates/decision-gate-mcp/src/namespace_authority.rs L103-L126 F:crates/decision-gate-mcp/src/server.rs L1648-L1657

قيود التكامل: وضع المطور المتساهل هو غير مسموح به عندما يكون namespace.authority.mode = assetcore_http لتجنب إضعاف أمان مساحة الأسماء في النشر المتكامل.F:crates/decision-gate-config/src/config.rs L580-L603

قواعد مساحة اسم Asset Core

معرفات النطاق رقمية في كل مكان (>= 1). تحقق سلطة Asset Core هو مباشر ولا ينطبق أي تحويل أو ترجمة. أي فشل في التحليل يؤدي إلى خطأ في التحقق من النطاق (فشل مغلق). F:crates/decision-gate-config/src/config.rs L1118-L1165 F:crates/decision-gate-mcp/src/namespace_authority.rs L130-L158

تحقق صحة التكوين يفرض إعدادات Asset Core المطلوبة (عنوان URL الأساسي، نطاقات المهلة) عندما يكون تفويض Asset Core مفعلًا.F:crates/decision-gate-config/src/config.rs L1118-L1165

وضع الفشل

فشل سلطة مساحة الأسماء يتم رسمه كما يلي:

  • إدخال مساحة اسم غير صالح -> InvalidParams (خطأ في المتصل)
  • السلطة المرفوضة أو غير المتاحة -> Unauthorized (فشل مغلق)

هذا يضمن أن يتم التعامل مع المساحات المفقودة وانقطاعات المصدر كفشل في الوصول بدلاً من مسارات مسموح بها.F:crates/decision-gate-mcp/src/tools.rs L3217-L3222


سجل RBAC/ACL

القرار الرئيسي

تستند ACL السجل إلى مبدأ مستمد من سياق مصادقة MCP:

  • AuthContext.principal_id() resolves to subject, token fingerprint, or a AuthContext.principal_id() يحل إلى الموضوع، بصمة التوكن، أو تسمية احتياطية مستقرة (محلي/توكن/mtls).
  • Principal profiles are configured in server.auth.principals, each with يتم تكوين ملفات التعريف الرئيسية في server.auth.principals، كل منها مع فئة سياسة اختيارية وروابط أدوار.
  • Role bindings can be globally scoped or restricted to a tenant and/or يمكن أن تكون روابط الأدوار محددة على مستوى عالمي أو مقيدة لمستأجر و/أو مساحة اسم.

مراجع التنفيذ:

سياسة ACL المدمجة

سياسة البناء المدمجة هي الإعداد الافتراضي (schema_registry.acl.mode = builtin). السلوك متحفظ عمدًا ومؤسس على أسماء الأدوار القياسية:

القراءة (القائمة/الحصول) مسموح بها عندما يحمل الشخص الرئيسي أي من:

  • TenantAdmin, NamespaceOwner, NamespaceAdmin, NamespaceWriter, TenantAdmin، NamespaceOwner، NamespaceAdmin، NamespaceWriter، NamespaceReader، SchemaManager

اكتب (سجل) مسموح عندما:

  • TenantAdmin، NamespaceOwner، أو NamespaceAdmin؛ أو
  • SchemaManager و فئة السياسة ليست prod

إذا لم يتم توفير فئة سياسة، يتم اعتبارها prod (فشل مغلق لكتابات SchemaManager). F:crates/decision-gate-mcp/src/registry_acl.rs L218-L283

سياسة ACL مخصصة

سياسة مخصصة (schema_registry.acl.mode = custom) تقيم القواعد بالترتيب وتعيد أول تطابق. تتطابق القاعدة عندما تتطابق جميع الأبعاد غير الفارغة:

  • إجراء
  • المستأجر
  • مساحة الاسم
  • الموضوع (معرف رئيسي)
  • الأدوار (مطابقة الدور المحدد)
  • فئة السياسة

إذا لم تتطابق أي قواعد، يتم تطبيق التأثير الافتراضي (allow أو deny). F:crates/decision-gate-mcp/src/registry_acl.rs L287-L339 F:crates/decision-gate-config/src/config.rs L1723-L1812

متطلبات التوقيع

يمكن أن يتطلب ACL السجل بيانات تعريف توقيع المخطط:


تدفقات قرار التفويض

تدفق تطبيق مساحة الاسم (جميع الأدوات المحددة بمساحة الاسم)

Request
  -> Tool auth (DefaultToolAuthz)
  -> ensure_namespace_allowed
     -> default namespace guard
     -> namespace authority check (optional)
  -> tool execution

يحمي حارس مساحة الأسماء الافتراضية قبل التحقق من السلطات لمنع أي تراجع ضمني أو تجاوزات.F:crates/decision-gate-mcp/src/tools.rs L2821-L2841

تدفق ACL السجل (schemas_register/list/get)

Request
  -> Tool auth (DefaultToolAuthz)
  -> ensure_namespace_allowed
  -> ensure_registry_access
     -> resolve principal (auth context -> profile)
     -> evaluate registry ACL (builtin or custom)
     -> emit registry audit event
  -> validate signing metadata (optional)
  -> registry mutation or read

مراجع التنفيذ:


التدقيق والمراقبة

DG تصدر سجلات تدقيق صريحة لقرارات الوصول إلى السجل وتغييرات الوضع الأمني:

  • RegistryAuditEvent captures tenant, namespace, action, allow/deny decision, reason, principal roles, schema identity, and correlation identifiers (unsafe RegistryAuditEvent يلتقط المستأجر، مساحة الأسماء، الإجراء، قرار السماح/الرفض، السبب، أدوار الكيانات الرئيسية، هوية المخطط، ومعرفات الترابط (عميل غير آمن + صادر عن الخادم) لتتبع التدقيق. F:crates/decision-gate-mcp/src/audit.rs L112-L145
  • SecurityAuditEvent records dev-permissive activation (and invalid correlation rejections) along with namespace authority posture; correlation identifiers are included when the event is tied to a request. SecurityAuditEvent يسجل تفعيل الإذن المطلق للمطورين (ورفضات الارتباط غير الصالحة) جنبًا إلى جنب مع موقف سلطة مساحة الأسماء؛ يتم تضمين معرفات الارتباط عندما يكون الحدث مرتبطًا بطلب. F:crates/decision-gate-mcp/src/audit.rs L204-L223 F:crates/decision-gate-mcp/src/server.rs L1739-L1749
  • Runpack exports embed RunpackSecurityContext with dev-permissive and namespace authority metadata, making security posture verifiable offline. تصدير Runpack يتضمن RunpackSecurityContext مع بيانات تعريف تفويض مطورة وبيانات تعريف مساحة الأسماء، مما يجعل وضع الأمان قابلاً للتحقق منه دون اتصال. F:crates/decision-gate-core/src/core/runpack.rs L94-L104 F:crates/decision-gate-mcp/src/server.rs L534-L543

التخزين والاستمرارية

تتضمن سجلات سجل المخطط بيانات التعريف الخاصة بالتوقيع من البداية إلى النهاية:

  • DataShapeRecord يتضمن حقول توقيع اختيارية.
  • SQLite registry persists signing metadata in dedicated columns and migrates يسجل SQLite بيانات التوقيع في أعمدة مخصصة وينقل إصدار المخطط من 3 -> 4 لإضافة أعمدة التوقيع.

المراجع:


ثوابت الأمان

  1. Fail-closed namespace enforcement: Invalid, unknown, or unreachable namespace authority always denies access. فرض مساحة الأسماء المغلقة: السلطة على مساحة الأسماء غير الصالحة أو غير المعروفة أو غير القابلة للوصول دائماً ترفض الوصول. F:crates/decision-gate-mcp/src/namespace_authority.rs L130-L158 F:crates/decision-gate-mcp/src/tools.rs L3217-L3222
  2. No implicit default namespace: id 1 requires explicit allowlist and tenant match; otherwise denied. لا يوجد مساحة اسم افتراضية ضمنية: المعرف 1 يتطلب قائمة سماح صريحة ومطابقة للمستأجر؛ وإلا سيتم الرفض. F:crates/decision-gate-config/src/config.rs L1025-L1052 F:crates/decision-gate-mcp/src/tools.rs L2821-L2841
  3. Asset Core integration is strict: Asset Core config is required when namespace.authority.mode = assetcore_http, and dev-permissive is disallowed when using Asset Core authority. تكامل Asset Core صارم: يتطلب تكوين Asset Core عندما يكون namespace.authority.mode = assetcore_http، ويُمنع استخدام dev-permissive عند استخدام سلطة Asset Core. F:crates/decision-gate-config/src/config.rs L580-L603 F:crates/decision-gate-config/src/config.rs L1118-L1165
  4. Registry ACL is authoritative: Tool allowlists do not bypass registry ACL; registry access is enforced and audited for every registry action. قائمة التحكم في الوصول إلى السجل هي السلطة العليا: قوائم الأدوات المسموح بها لا تتجاوز قائمة التحكم في الوصول إلى السجل؛ يتم فرض الوصول إلى السجل وتدقيقه لكل إجراء في السجل. F:crates/decision-gate-mcp/src/tools.rs L2881-L2910
  5. Local-only registry access is explicit: schema_registry.acl.allow_local_only defaults to false. When enabled, the built-in ACL can allow loopback/stdio subjects to bypass principal mapping; this does not apply to custom ACL rules. الوصول إلى السجل المحلي فقط هو صريح: schema_registry.acl.allow_local_only الافتراضي هو false. عند التمكين، يمكن أن يسمح ACL المدمج لموضوعات loopback/stdio بتجاوز تعيين المبدأ؛ هذا لا ينطبق على قواعد ACL المخصصة. F:crates/decision-gate-config/src/config.rs L1768-L1785 F:crates/decision-gate-mcp/src/registry_acl.rs L218-L230
  6. Schema signing enforcement is explicit: When enabled, signing metadata is mandatory for registry writes. فرض توقيع المخطط صريح: عند التفعيل، يصبح توقيع البيانات الوصفية إلزاميًا لكتابات السجل. F:crates/decision-gate-mcp/src/tools.rs L3032-L3041

اختبار والتحقق

يجب التحقق من طبقات السجل واسم النطاق على كل من مستويات الوحدة والنظام. تشمل التغطية الموصى بها:

  • رسم خرائط سلطة مساحة الأسماء (صريح مقابل عددي) وسلوك الفشل المغلق.
  • فرض قائمة السماح الافتراضية للمساحة الاسمية.
  • مصفوفة ACL الخاصة بالسجل المدمج (قراءة/كتابة حسب الدور وفئة السياسة).
  • أولوية مطابقة ACL المخصصة + التأثيرات الافتراضية.
  • تنفيذ يتطلب التوقيع واستمرار بيانات التوقيع.

تُتبع فجوات اختبار النظام في system-tests/test_gaps.toml ويجب الحفاظ عليها جنبًا إلى جنب مع التغييرات في هذه السياسات.


مرجع متقاطع لكل ملف

المنطقةالملفالملاحظات
تكوين + تحقق من مساحة الأسماءcrates/decision-gate-config/src/config.rsسياسة مساحة الأسماء + تكوين والتحقق من سلطة Asset Core.
مساحة الأسماء الافتراضية + تنفيذ السلطةcrates/decision-gate-mcp/src/tools.rsensure_namespace_allowed ورسم خرائط أخطاء مساحة الأسماء.
دمج سلطة مساحة الأسماءcrates/decision-gate-mcp/src/namespace_authority.rsتحقق HTTP، قواعد الرسم، دلالات الفشل المغلقة.
محرك ACL السجلcrates/decision-gate-mcp/src/registry_acl.rsرسم خرائط الجهات الفاعلة + تقييم ACL المدمج/المخصص.
تنفيذ ACL السجلcrates/decision-gate-mcp/src/tools.rsensure_registry_access + إصدار التدقيق + فحوصات التوقيع.
معرفات الجهات الفاعلة في المصادقةcrates/decision-gate-mcp/src/auth.rsمعرفات الجهات الفاعلة المستقرة لرسم خرائط ACL.
مخططات أحداث التدقيقcrates/decision-gate-mcp/src/audit.rsحمولات تدقيق السجل + الأمان.
سياق أمان Runpackcrates/decision-gate-core/src/core/runpack.rsبيانات التعريف الأمنية المدمجة في Runpacks.
استمرارية سجل المخططاتcrates/decision-gate-store-sqlite/src/store.rsأعمدة بيانات التوقيع والترحيلات.