مساحة قرار البوابة + بنية 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 للسجل.
جدول المحتويات
- نظرة عامة تنفيذية
- نطاق والأهداف غير المتضمنة
- المفاهيم الأساسية والأنواع
- Namespace Policy
- Registry RBAC/ACL
- تدفقات قرار التفويض
- تدقيق ورصد
- التخزين والاستمرارية
- ثوابت الأمان
- اختبار والتحقق
- مرجع متقاطع ملف بملف
- وثائق ذات صلة
نظرة عامة تنفيذية
تفرض Decision Gate عزل المساحات الاسمية وتفويض سجل المخططات كـ حدود أمان من الدرجة الأولى. جميع فحوصات المساحة الاسمية والسجل هي فشل مغلق وتُنفذ قبل أي تغيير في حالة السجل أو السيناريو. النظام متحفظ عن عمد:
- يتطلب توجيه مساحة الأسماء تحققًا صريحًا؛ يتم رفض مساحات الأسماء غير المعروفة.
- The reserved default namespace id (1) is blocked by default and allowed only
when both
namespace.allow_default = trueand the caller’s tenant appears in معرف مساحة الأسماء الافتراضية المحجوزة (1) محجوز بشكل افتراضي ومسموح به فقط عندما يكون كل منnamespace.allow_default = trueويظهر مستأجر المتصل فيnamespace.default_tenants.F:crates/decision-gate-config/src/config.rs L1025-L1052 F:crates/decision-gate-mcp/src/tools.rs L2821-L2841 - Asset Core integration is explicit and bounded to configured endpoints and تكامل Asset Core واضح ومحدد بالنقاط النهائية المكونة والمهل الزمنية؛ لا يُسمح بتعيين مساحة الأسماء الضمنية. F:crates/decision-gate-config/src/config.rs L1118-L1165 F:crates/decision-gate-mcp/src/namespace_authority.rs L103-L159
- Schema registry access is guarded by a dedicated Registry ACL layer that is الوصول إلى سجل المخطط محمي بواسطة طبقة ACL مخصصة للسجل تكون مستقلة عن قوائم السماح للأدوات؛ يجب أن تسمح كلاهما بالإجراء. F:crates/decision-gate-mcp/src/registry_acl.rs L146-L215 F:crates/decision-gate-mcp/src/tools.rs L2881-L2910
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_defaultis false, all requests targeting the default إذا كانتnamespace.allow_defaultخاطئة، يتم رفض جميع الطلبات التي تستهدف مساحة الأسماء الافتراضية. - If
namespace.allow_defaultis true,namespace.default_tenantsmust be إذا كانتnamespace.allow_defaultصحيحة، يجب أن تكونnamespace.default_tenantsغير فارغة ويجب على المتصل تقديمtenant_idفي قائمة السماح. - يتم تطبيق حارس مساحة الأسماء الافتراضية قبل التحقق من السلطات الخارجية.
تنفيذ:
- يفرض التحقق من التكوين متطلبات القائمة المسموح بها.F:crates/decision-gate-config/src/config.rs L1025-L1052
- يقوم جهاز التوجيه للأدوات بفرض الحماية لكل طلب.F:crates/decision-gate-mcp/src/tools.rs L2821-L2841
أوضاع سلطة الفضاء
تحدد سلطة مساحة الأسماء كيفية تحقق DG من وجود مساحة الأسماء:
| الوضع | السلوك | المصدر |
|---|---|---|
none | لا توجد فحوصات للسلطة الخارجية (سياسة مساحة الأسماء المحلية فقط) | NamespaceAuthorityMode::NoneF:crates/decision-gate-config/src/config.rs L1056-L1115 |
assetcore_http | تحقق من مساحة الأسماء عبر واجهة برمجة التطبيقات HTTP لكتابة Asset Core | NamespaceAuthorityMode::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 aAuthContext.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 يمكن أن تكون روابط الأدوار محددة على مستوى عالمي أو مقيدة لمستأجر و/أو مساحة اسم.
مراجع التنفيذ:
- اشتقاق معرف الرئيس.F:crates/decision-gate-mcp/src/auth.rs L181-L216
- تكوين البوابة الرئيسية والتحقق منها.F:crates/decision-gate-config/src/config.rs L802-L977
- منطق حل التعيين الرئيسي وتحديد نطاق الدور.F:crates/decision-gate-mcp/src/registry_acl.rs L54-L143
سياسة 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 السجل بيانات تعريف توقيع المخطط:
schema_registry.acl.require_signing = trueenforces presence ofsigningschema_registry.acl.require_signing = trueيفرض وجود بيانات التعريفsigningعلى سجلات المخطط.- Missing or empty signing metadata is rejected as unauthorized before registry يتم رفض بيانات التوقيع المفقودة أو الفارغة كغير مصرح بها قبل تغيير السجل. F:crates/decision-gate-config/src/config.rs L1768-L1785 F:crates/decision-gate-mcp/src/tools.rs L3032-L3041
تدفقات قرار التفويض
تدفق تطبيق مساحة الاسم (جميع الأدوات المحددة بمساحة الاسم)
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
مراجع التنفيذ:
- تنفيذ ACL للسجل + التدقيق.F:crates/decision-gate-mcp/src/tools.rs L2881-L2910
- مُقيّم ACL السجل (مضمن/مخصص).F:crates/decision-gate-mcp/src/registry_acl.rs L146-L339
التدقيق والمراقبة
DG تصدر سجلات تدقيق صريحة لقرارات الوصول إلى السجل وتغييرات الوضع الأمني:
RegistryAuditEventcaptures tenant, namespace, action, allow/deny decision, reason, principal roles, schema identity, and correlation identifiers (unsafeRegistryAuditEventيلتقط المستأجر، مساحة الأسماء، الإجراء، قرار السماح/الرفض، السبب، أدوار الكيانات الرئيسية، هوية المخطط، ومعرفات الترابط (عميل غير آمن + صادر عن الخادم) لتتبع التدقيق. F:crates/decision-gate-mcp/src/audit.rs L112-L145SecurityAuditEventrecords 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
RunpackSecurityContextwith 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 لإضافة أعمدة التوقيع.
المراجع:
- تعريف نوع شكل البيانات.F:crates/decision-gate-core/src/core/data_shape.rs L49-L72
- تخزين سجلات SQLite والترحيل.F:crates/decision-gate-store-sqlite/src/store.rs L318-L480 F:crates/decision-gate-store-sqlite/src/store.rs L1013-L1037
ثوابت الأمان
- 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
- No implicit default namespace: id
1requires 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 - 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 - 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
- Local-only registry access is explicit:
schema_registry.acl.allow_local_onlydefaults tofalse. 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 - 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.rs | ensure_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.rs | ensure_registry_access + إصدار التدقيق + فحوصات التوقيع. |
| معرفات الجهات الفاعلة في المصادقة | crates/decision-gate-mcp/src/auth.rs | معرفات الجهات الفاعلة المستقرة لرسم خرائط ACL. |
| مخططات أحداث التدقيق | crates/decision-gate-mcp/src/audit.rs | حمولات تدقيق السجل + الأمان. |
| سياق أمان Runpack | crates/decision-gate-core/src/core/runpack.rs | بيانات التعريف الأمنية المدمجة في Runpacks. |
| استمرارية سجل المخططات | crates/decision-gate-store-sqlite/src/store.rs | أعمدة بيانات التوقيع والترحيلات. |