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.
  • Scoped typed lifecycle tools (typed_providers_*) that now require tenant_id + namespace_id and enforce namespace validation before mutació del cicle de vida.
  • Typed lifecycle tenant-authz seam now receives optional provider_id context, allowing provider-level RBAC policy at the enterprise authorizer límit mentre es preserva el comportament per defecte d’OSS.
  • 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 inquilins es tracten com a identificadors explícits portats per les sol·licituds d’eines. L’identificador d’espai de noms reservat per defecte és 1 i ha de passar controls addicionals abans que qualsevol operació procedeixi.F:crates/decision-gate-mcp/src/tools/router.rs L162-L168 F:crates/decision-gate-mcp/src/tools/router.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 capçalera x-correlation-id derivada del capçalera de correlació proporcionada pel client insegura quan estigui disponible (retornant a l’id de sol·licitud JSON-RPC o l’id de correlació emès pel servidor). Els IDs de correlació del client es validen estrictament i es rebutgen quan són invàlids; només es reenvien valors netejats a l’autoritat del namespace per prevenir la injecció de capçaleres i l’engany de registres.F:crates/decision-gate-mcp/src/tools/router.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/router.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 desviació implícita.F:crates/decision-gate-mcp/src/tools/router.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. F:crates/decision-gate-mcp/src/namespace_authority.rs L130-L158 F:crates/decision-gate-mcp/src/tools/router.rs L3217-L3222
  2. No implicit default namespace: id 1 requires explicit allowlist and tenant match; otherwise denied. F:crates/decision-gate-config/src/config.rs L1025-L1052 F:crates/decision-gate-mcp/src/tools/router.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. F:crates/decision-gate-mcp/src/tools/router.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. F:crates/decision-gate-mcp/src/tools/router.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.

La desviació de la completitud de la prova del sistema es revela a través de Docs/generated/testing/proof_gaps.json i s’ha de mantenir alineada amb 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/router.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 integrada/personalitzada.
Aplicació d’ACL de registrecrates/decision-gate-mcp/src/tools/router.rsensure_registry_access + emissió d’auditories + verificacions 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 de registre d’esquemescrates/decision-gate-store-sqlite/src/store.rsColumnes de metadades de signatura i migracions.