Espai de noms de Decision Gate + Arquitectura de registre 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 Audiència: Enginyers que implementen o revisen la política d’espai de noms, integració de l’autoritat d’espai de noms d’Asset Core i control d’accés al registre d’esquemes. Aquest document és la descripció canònica, alineada amb la implementació, de com Decision Gate (DG) fa complir els límits d’espai de noms i el RBAC/ACL del registre.
Taula de continguts
- Visió Executiva
- Abast i No Objectius
- Conceptes i Tipus Fonamentals
- Namespace Policy
- Registry RBAC/ACL
- Fluixos de Decisió d’Autorització
- Auditoria i Observabilitat
- Emmagatzematge i Persistència
- Invariants de Seguretat
- Proves i Validació
- File per Fitxer Referència Creuada
- Documentació relacionada
Executive Overview
Decision Gate aplica aïllament de l’espai de noms i autorització del registre d’esquema com a fronteres de seguretat de primera classe. Totes les comprovacions d’espai de noms i registre són fail-closed i s’executen abans de qualsevol mutació de l’estat del registre o del escenari. El sistema és intencionadament conservador:
- El routatge de namespaces requereix una validació explícita; els namespaces desconeguts són denegats.
- 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 L’identificador de l’espai de noms per defecte reservat (1) està bloquejat per defecte i només es permet quan tantnamespace.allow_default = truecom el llogater de la persona que crida apareix ennamespace.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 La integració d’Asset Core és explícita i limitada a punts finals configurats i temps d’espera; no s’accepta cap mapeig d’espai de noms implícit.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 L’accés al registre d’esquema està protegit per una capa dedicada d’ACL del registre que és independent de les llistes d’aprovació d’eines; ambdues han de permetre l’acció.F:crates/decision-gate-mcp/src/registry_acl.rs L146-L215 F:crates/decision-gate-mcp/src/tools.rs L2881-L2910
Registry RBAC/ACL està delimitat per tenant + namespace + subject i es pot configurar com a builtin o personalitzat. La política builtin està definida explícitament pels noms de rol amb control de classe de política per a l’accés d’escriptura.F:crates/decision-gate-mcp/src/registry_acl.rs L218-L255
Abast i No Objectius
En abast:
- Validació de l’espai de noms en eines MCP.
- Restriccions del namespace per defecte.
- Integració de l’autoritat del namespace Asset Core.
- Política RBAC/ACL del registre d’esquema i requisits de signatura.
- Auditar i executar el context de seguretat per a aquestes decisions.
Fora de l’abast (tractat en altres llocs o exclòs intencionadament):
- Asset Core write-path gating (explicitly out of scope in the integration Control d’escriptura d’Asset Core (explícitament fora de l’abast en el contracte d’integració).
- Control d’accés basat en rols (RBAC) a nivell d’escenari o llistes blanques d’eines (tractat en la documentació d’autenticació del servidor).
- Aplicació de la confiança dels proveïdors d’evidència (documentat a la guia de seguretat).
Conceptes i Tipus Fonamentals
Identificadors de Namespace i Llogater
Els espais de noms i els llogaters es tracten com a identificadors explícits que es porten a terme per les sol·licituds d’eines. L’identificador d’espai de noms per defecte reservat és 1 i ha de passar controls addicionals abans que qualsevol operació pugui continuar.F:crates/decision-gate-mcp/src/tools.rs L162-L168 F:crates/decision-gate-mcp/src/tools.rs L2821-L2841
Registre d’Esquemes
Les entrades del registre d’esquema són valors DataShapeRecord immutables. Cada registre està delimitat per inquilí + espai de noms + id d’esquema + versió, i pot incloure metadades de signatura opcionals (id de clau, signatura, algorisme opcional). F:crates/decision-gate-core/src/core/data_shape.rs L49-L72
Namespace Política
Guàrdia de l’espai de noms per defecte
L’espai de noms per defecte és un identificador reservat codificat (1). El seu comportament és intencionadament limitat:
- If
namespace.allow_defaultis false, all requests targeting the default Sinamespace.allow_defaultés fals, totes les sol·licituds que apunten al namespace per defecte són rebutjades. - If
namespace.allow_defaultis true,namespace.default_tenantsmust be Sinamespace.allow_defaultés cert,namespace.default_tenantsha de ser no buit i el sol·licitant ha de proporcionar untenant_ida la llista d’autoritzacions. - El guardià de l’espai de noms per defecte s’aplica abans de les comprovacions d’autoritat externa.
Implementació:
- La validació de la configuració imposa el requisit de la llista d’acceptació.F:crates/decision-gate-config/src/config.rs L1025-L1052
- El router d’eines aplica la guàrdia per sol·licitud.F:crates/decision-gate-mcp/src/tools.rs L2821-L2841
Modes d’Autoritat de Namespace
L’autoritat del namespace determina com DG valida l’existència del namespace:
| Mode | Behavior | Source |
|---|---|---|
none | No es realitzen comprovacions d’autoritat externa (només política de l’espai de noms local) | NamespaceAuthorityMode::NoneF:crates/decision-gate-config/src/config.rs L1056-L1115 |
assetcore_http | Valida l’espai de noms mitjançant l’API HTTP del daemon d’escriptura d’Asset Core | NamespaceAuthorityMode::AssetcoreHttpF:crates/decision-gate-config/src/config.rs L1056-L1115 F:crates/decision-gate-mcp/src/namespace_authority.rs L67-L159 |
Quan assetcore_http està habilitat, DG valida els espais de noms emetent una sol·licitud GET a /{base_url}/v1/write/namespaces/{resolved_id}. HTTP 200 = permès; 404 o 401/403 = denegat; altres estats i errors de transport es tracten com a no disponibles (fallada tancada).F:crates/decision-gate-mcp/src/namespace_authority.rs L130-L158
Les sol·licituds d’autoritat d’Asset Core poden incloure un token de portador opcional i un x-correlation-id header derivat de l’encapçalament de correlació proporcionat pel client insegur quan estigui disponible (recaient en l’id de sol·licitud JSON-RPC o en l’id de correlació emès pel servidor). Els IDs de correlació del client són estrictament validats i rebutjats quan són invàlids; només es reenvien valors netejats a l’autoritat de l’espai de noms per prevenir la injecció d’encapçalaments i l’engany de registres.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
Restricció d’integració: el mode dev-permissive és prohibit quan namespace.authority.mode = assetcore_http per evitar debilitar la seguretat del namespace en desplegaments integrats.F:crates/decision-gate-config/src/config.rs L580-L603
Regles del Namespace Asset Core
Els identificadors de l’espai de noms són numèrics a tot arreu (>= 1). La validació de l’autoritat d’Asset Core és directa i no aplica cap mapeig ni traducció. Qualsevol fallada de parseig genera un error de validació de l’espai de noms (fail closed).F:crates/decision-gate-config/src/config.rs L1118-L1165 F:crates/decision-gate-mcp/src/namespace_authority.rs L130-L158
La validació de configuració imposa els ajustos requerits d’Asset Core (URL base, rangs de temps d’espera) quan s’habilita l’autoritat d’Asset Core.F:crates/decision-gate-config/src/config.rs L1118-L1165
Postura de fallida
Les fallades de l’autoritat de l’espai de noms es mapegen de la següent manera:
- Entrada de namespace no vàlida ->
InvalidParams(error de l’agent) - Autoritat denegada o no disponible ->
Unauthorized(fallada tancada)
Això assegura que els espais de noms que falten i les interrupcions a la font es tractin com a fallades d’accés en lloc de camins permesos.F:crates/decision-gate-mcp/src/tools.rs L3217-L3222
Registre RBAC/ACL
Resolució Principal
El registre ACL es basa en un principal derivat del context d’autenticació MCP:
AuthContext.principal_id()resolves to subject, token fingerprint, or aAuthContext.principal_id()es resol a subjecte, empremta del token o una etiqueta de reserva estable (local/token/mtls).- Principal profiles are configured in
server.auth.principals, each with Els perfils principals es configuren aserver.auth.principals, cadascun amb una classe de política opcional i vinculacions de rol. - Role bindings can be globally scoped or restricted to a tenant and/or Les vinculacions de rol poden tenir un abast global o estar restringides a un inquilí i/o un espai de noms.
Referències d’implementació:
- Derivació de l’id principal.F:crates/decision-gate-mcp/src/auth.rs L181-L216
- Configuració i validació principals.F:crates/decision-gate-config/src/config.rs L802-L977
- Resolutor de mapeig principal i lògica d’abastament de rols.F:crates/decision-gate-mcp/src/registry_acl.rs L54-L143
Política ACL integrada
La política integrada és la predeterminada (schema_registry.acl.mode = builtin). El comportament és intencionadament conservador i ancorat en noms de rol canònics:
Llegir (Llista/Obtenir) permès quan el principal té qualsevol de:
- TenantAdmin, NamespaceOwner, NamespaceAdmin, NamespaceWriter, TenantAdmin, NamespaceOwner, NamespaceAdmin, NamespaceWriter, NamespaceReader, SchemaManager
Escriure (Registrar) permès quan:
- TenantAdmin, NamespaceOwner o NamespaceAdmin; O bé
- La classe SchemaManager i la classe de política no és
prod
Si no s’especifica cap classe de política, es tracta com a prod (fallar tancat per a les escriptures de SchemaManager).F:crates/decision-gate-mcp/src/registry_acl.rs L218-L283
Política ACL Personalitzada
La política personalitzada (schema_registry.acl.mode = custom) avalua les regles en ordre i retorna la primera coincidència. Una regla coincideix quan totes les dimensions no buides coincideixen:
- acció
- llogater
- espai de noms
- subjecte (id principal)
- rols (coincidència de rol delimitat)
- classe de política
Si no coincideixen regles, s’aplica l’efecte per defecte (allow o deny). F:crates/decision-gate-mcp/src/registry_acl.rs L287-L339 F:crates/decision-gate-config/src/config.rs L1723-L1812
Requisit de Signatura
El registre ACL pot requerir metadades de signatura de l’esquema:
schema_registry.acl.require_signing = trueenforces presence ofsigningschema_registry.acl.require_signing = trueimposa la presència de metadades designingen els registres d’esquema.- Missing or empty signing metadata is rejected as unauthorized before registry La manca o l’absència de metadades de signatura es rebutja com a no autoritzada abans de la mutació del registre. F:crates/decision-gate-config/src/config.rs L1768-L1785 F:crates/decision-gate-mcp/src/tools.rs L3032-L3041
Fluixos de Decisió d’Autorització
Flux d’Aplicació de l’Espai de Noms (Tots els Eines Amb Àmbit d’Espai de Noms)
Request
-> Tool auth (DefaultToolAuthz)
-> ensure_namespace_allowed
-> default namespace guard
-> namespace authority check (optional)
-> tool execution
El guardià de l’espai de noms per defecte s’executa abans de les comprovacions d’autoritat per evitar qualsevol retrocés o desviament implícit.F:crates/decision-gate-mcp/src/tools.rs L2821-L2841
Flux d’ACL del Registre (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
Referències d’implementació:
- Aplicació i auditoria de l’ACL del registre.F:crates/decision-gate-mcp/src/tools.rs L2881-L2910
- Avaluador ACL del registre (integrat/personalitzat).F:crates/decision-gate-mcp/src/registry_acl.rs L146-L339
Auditoria i Observabilitat
DG emet registres d’auditoria explícits per a les decisions d’accés al registre i els canvis en la postura de seguretat:
RegistryAuditEventcaptures tenant, namespace, action, allow/deny decision, reason, principal roles, schema identity, and correlation identifiers (unsafeRegistryAuditEventcaptura el llogater, l’espai de noms, l’acció, la decisió d’autoritzar/denegar, el motiu, els rols principals, la identitat de l’esquema i els identificadors de correlació (client insegur + emès pel servidor) per a la traçabilitat de l’auditoria.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.SecurityAuditEventregistra l’activació permissiva de desenvolupament (i els rebuigs de correlació no vàlids) juntament amb la postura d’autoritat del namespace; els identificadors de correlació s’inclouen quan l’esdeveniment està vinculat a una sol·licitud. 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 exportaRunpackSecurityContextamb metadades d’autoritat de dev-permissive i de namespace, fent que la postura de seguretat sigui verificable fora de línia. F:crates/decision-gate-core/src/core/runpack.rs L94-L104 F:crates/decision-gate-mcp/src/server.rs L534-L543
Emmagatzematge i Persistència
Els registres del schema registry inclouen metadades de signatura de punta a punta:
DataShapeRecordinclou camps de signatura opcionals.- SQLite registry persists signing metadata in dedicated columns and migrates El registre SQLite persisteix metadades de signatura en columnes dedicades i migra la versió d’esquema 3 -> 4 per afegir les columnes de signatura.
Referències:
- Definició del tipus de forma de dades.F:crates/decision-gate-core/src/core/data_shape.rs L49-L72
- Emmagatzematge i migració de registre SQLite.F:crates/decision-gate-store-sqlite/src/store.rs L318-L480 F:crates/decision-gate-store-sqlite/src/store.rs L1013-L1037
Seguretat Invariants
- Fail-closed namespace enforcement: Invalid, unknown, or unreachable namespace authority always denies access. Aplicació de l’espai de noms en mode tancat: L’autoritat de l’espai de noms invàlid, desconegut o inaccessibile sempre denega l’accés. 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. Sense espai de noms per defecte implícit: id1requereix una llista d’autoritzacions explícita i coincidència de llogater; d’altra manera, es denega. 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. La integració d’Asset Core és estricta: La configuració d’Asset Core és requerida quannamespace.authority.mode = assetcore_http, i el mode dev-permissive no està permès quan s’utilitza l’autoritat d’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. L’ACL del registre és autoritzada: Les llistes blanques de les eines no eludeixen l’ACL del registre; l’accés al registre s’aplica i s’audita per cada acció del registre. 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. L’accés al registre només local és explícit:schema_registry.acl.allow_local_onlyper defecte ésfalse. Quan està habilitat, l’ACL integrat pot permetre que els subjectes de loopback/stdio eludeixin el mapeig de principals; això no s’aplica a les regles d’ACL personalitzades. 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. L’aplicació de la signatura de l’esquema és explícita: Quan està habilitada, la signatura de metadades és obligatòria per a les escriptures del registre. F:crates/decision-gate-mcp/src/tools.rs L3032-L3041
Proves i Validació
Les capes de registre i espai de noms han de ser validades tant a nivell d’unitat com de sistema. La cobertura recomanada inclou:
- Mapeig d’autoritat de l’espai de noms (explícit vs numèric) i comportament de fallada tancada.
- Aplicació de la llista blanca del namespace per defecte.
- Matriu ACL del registre incorporat (lectura/escriptura per rol i classe de política).
- Precedència de coincidència d’ACL personalitzades + efectes per defecte.
- Aplicació de la signatura requerida i persistència de la metadada de signatura.
Les llacunes de les proves del sistema es registren a system-tests/test_gaps.toml i s’han de mantenir juntament amb els canvis d’aquestes polítiques.
File per Fitxer Referència Creuada
| Àrea | Fitxer | Notes |
|---|---|---|
| Configuració de namespace + validació | crates/decision-gate-config/src/config.rs | Política de namespace + configuració i validació de l’autoritat d’Asset Core. |
| Namespace per defecte + aplicació d’autoritat | crates/decision-gate-mcp/src/tools.rs | ensure_namespace_allowed i mapeig d’errors de namespace. |
| Integració d’autoritat de namespace | crates/decision-gate-mcp/src/namespace_authority.rs | Validació HTTP, regles de mapeig, semàntica de fallada tancada. |
| Motor ACL de registre | crates/decision-gate-mcp/src/registry_acl.rs | Mapeig de principals + avaluació d’ACL integrades/personalitzades. |
| Aplicació d’ACL de registre | crates/decision-gate-mcp/src/tools.rs | ensure_registry_access + emissió d’auditories + comprovacions de signatura. |
| Identificadors de principals d’autenticació | crates/decision-gate-mcp/src/auth.rs | IDs de principals estables per al mapeig d’ACL. |
| Esquemes d’esdeveniments d’auditoria | crates/decision-gate-mcp/src/audit.rs | Càrregues d’auditoria de registre + seguretat. |
| Context de seguretat de runpack | crates/decision-gate-core/src/core/runpack.rs | Metadades de seguretat incrustades en runpacks. |
| Persistència del registre d’esquemes | crates/decision-gate-store-sqlite/src/store.rs | Columnes de metadades de signatura i migracions. |