Decision Gate Docs

Avaluació de portes determinista, reproduïble amb decisions auditable.

Asset Core docs

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

  1. Visió Executiva
  2. Abast i No Objectius
  3. Conceptes i Tipus Fonamentals
  4. Namespace Policy
    1. Guàrdia del Namespace per Defecte
    2. Modes d’Autoritat de Namespace
    3. Regles de Mapeig del Nucli d’Actius
    4. Postura de fallida
  5. Registry RBAC/ACL
    1. Resolució Principal
    2. Política ACL integrada
    3. Política ACL personalitzada
    4. Requisit de signatura
  6. Fluixos de Decisió d’Autorització
  7. Auditoria i Observabilitat
  8. Emmagatzematge i Persistència
  9. Invariants de Seguretat
  10. Proves i Validació
  11. File per Fitxer Referència Creuada
  12. 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:

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_default is false, all requests targeting the default Si namespace.allow_default és fals, totes les sol·licituds que apunten al namespace per defecte són rebutjades.
  • If namespace.allow_default is true, namespace.default_tenants must be Si namespace.allow_default és cert, namespace.default_tenants ha de ser no buit i el sol·licitant ha de proporcionar un tenant_id a la llista d’autoritzacions.
  • El guardià de l’espai de noms per defecte s’aplica abans de les comprovacions d’autoritat externa.

Implementació:

Modes d’Autoritat de Namespace

L’autoritat del namespace determina com DG valida l’existència del namespace:

ModeBehaviorSource
noneNo 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_httpValida l’espai de noms mitjançant l’API HTTP del daemon d’escriptura d’Asset CoreNamespaceAuthorityMode::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 a AuthContext.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 a server.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ó:

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:


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ó:


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:

  • RegistryAuditEvent captures tenant, namespace, action, allow/deny decision, reason, principal roles, schema identity, and correlation identifiers (unsafe RegistryAuditEvent captura 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-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 registra 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 RunpackSecurityContext with dev-permissive and namespace authority metadata, making security posture verifiable offline. Runpack exporta RunpackSecurityContext amb 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:

  • DataShapeRecord inclou 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:


Seguretat Invariants

  1. 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
  2. No implicit default namespace: id 1 requires explicit allowlist and tenant match; otherwise denied. Sense espai de noms per defecte implícit: id 1 requereix 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
  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. La integració d’Asset Core és estricta: La configuració d’Asset Core és requerida quan namespace.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
  4. 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
  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. L’accés al registre només local és explícit: schema_registry.acl.allow_local_only per defecte és false. 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
  6. 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

ÀreaFitxerNotes
Configuració de namespace + validaciócrates/decision-gate-config/src/config.rsPolítica de namespace + configuració i validació de l’autoritat d’Asset Core.
Namespace per defecte + aplicació d’autoritatcrates/decision-gate-mcp/src/tools.rsensure_namespace_allowed i mapeig d’errors de namespace.
Integració d’autoritat de namespacecrates/decision-gate-mcp/src/namespace_authority.rsValidació HTTP, regles de mapeig, semàntica de fallada tancada.
Motor ACL de registrecrates/decision-gate-mcp/src/registry_acl.rsMapeig de principals + avaluació d’ACL integrades/personalitzades.
Aplicació d’ACL de registrecrates/decision-gate-mcp/src/tools.rsensure_registry_access + emissió d’auditories + comprovacions de signatura.
Identificadors de principals d’autenticaciócrates/decision-gate-mcp/src/auth.rsIDs de principals estables per al mapeig d’ACL.
Esquemes d’esdeveniments d’auditoriacrates/decision-gate-mcp/src/audit.rsCàrregues d’auditoria de registre + seguretat.
Context de seguretat de runpackcrates/decision-gate-core/src/core/runpack.rsMetadades de seguretat incrustades en runpacks.
Persistència del registre d’esquemescrates/decision-gate-store-sqlite/src/store.rsColumnes de metadades de signatura i migracions.