The blueprint predates the re-cut and describes Gate House as a running engine. Rather than delete it, mark it — the estate's precedent (zone-engine) is to retain superseded argument as design history. Adds a status banner with a per-section table separating what survives (domain model, authority context, operating modes, posture and credential contracts, MCP doctrine, change dynamics, audit, test program, architectural invariants) from what is withdrawn (component and policy architecture, evaluation order, storage, API surface, caching, deployment, technology direction, reference repository layout, performance, availability, admin interfaces) and what has lapsed (ADR-003; milestones M0, M3, M4). Inline markers on the eight sections most likely to be cited. A revision folding the surviving material into doctrine form is outstanding. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 2564823@bnt-lap001 Assistant-Session: 2a7ed827-4928-4b9f-8613-9135c9cadfe9
2573 lines
47 KiB
Markdown
2573 lines
47 KiB
Markdown
# Gate House — Architecture Blueprint
|
||
|
||
**Repository:** `gate-house`
|
||
**Project family:** NetKingdom
|
||
**Artifact:** `ArchitectureBlueprint.md`
|
||
**Status:** Partly withdrawn — see the status banner below
|
||
**Version:** 0.1
|
||
**Date:** 2026-08-24
|
||
**Reviewed:** 2026-08-28 (GH-DEC-2026-001)
|
||
|
||
---
|
||
|
||
---
|
||
|
||
> ## ⚠ Status: partly withdrawn — 2026-08-28
|
||
>
|
||
> This blueprint predates the Gate House re-cut and describes a deterministic
|
||
> authority plane: a policy decision point with an `/authorize` API, grant
|
||
> storage, and a revocation service. **That framing was withdrawn** by
|
||
> `decisions/decisions.md` GH-DEC-2026-001, on the ground that a decision point
|
||
> inside Gate House would place the deterministic authority boundary inside the
|
||
> non-deterministic management layer, violating INV-02. `access-engine`
|
||
> (currently `flex-auth`) is the only policy decision point in NetKingdom.
|
||
>
|
||
> The engine-describing sections are retained as **design history**, not as
|
||
> direction. Do not build from them, and check any section against `INTENT.md`
|
||
> before citing it.
|
||
>
|
||
> | Sections | Status |
|
||
> |---|---|
|
||
> | §6 domain model, §7 authority context | **survives** — now the authority context consumed by access-engine |
|
||
> | §14–15 operating modes | **survives** — assistant and autonomous as security regimes |
|
||
> | §16 posture, §17 credential separation | **survives** as contracts with kings-guard and secrets-engine |
|
||
> | §19 MCP integration, §20 change dynamics, §21 circuit breakers | **survives** as doctrine |
|
||
> | §23 policy self-modification, §24 audit architecture | **survives** as doctrine |
|
||
> | §34 security test program, §43 architectural invariants | **survives** — §34 as specifications executed by whitehat-security |
|
||
> | §8–9 decision schema and types | **moves** — the vocabulary stands, ownership is access-engine's |
|
||
> | §10–13 component architecture, policy architecture, evaluation order | **withdrawn** |
|
||
> | §25 storage, §26 API surface, §29 caching, §30 deployment | **withdrawn** |
|
||
> | §31 technology direction, §32 reference repository structure | **withdrawn** |
|
||
> | §35 performance, §36 availability, §38 administrative interfaces | **withdrawn** |
|
||
> | §40 ADR-003 (policy engine selection) | **lapsed** |
|
||
> | §41 milestones M0, M3, M4 | **lapsed** |
|
||
>
|
||
> A revision folding the surviving material into doctrine form is outstanding.
|
||
|
||
---
|
||
|
||
## 1. Purpose
|
||
|
||
This document translates the Gate House intent into a practical architecture for a first reference implementation.
|
||
|
||
Gate House is the **deterministic authority plane** for human, workload, and agent-active NetKingdom environments. It is the reference implementation of the Active Secrets Management (ASM) Plane.
|
||
|
||
Its central responsibility is:
|
||
|
||
> **Decide whether a requested action is allowed, under explicit and reproducible rules, and represent that decision as bounded authority that downstream systems can enforce.**
|
||
|
||
Gate House does not replace identity systems, secrets backends, policy engines, runtime execution systems, or adaptive security systems. It coordinates them around a canonical authority model.
|
||
|
||
The architectural maxim is:
|
||
|
||
> **Cognition proposes. Authority disposes. Infrastructure executes.**
|
||
|
||
---
|
||
|
||
# 2. Architectural Goals
|
||
|
||
Gate House should optimize for the following properties.
|
||
|
||
## 2.1 Deterministic final authorization
|
||
|
||
The final decision to grant or deny protected authority must be made by deterministic mechanisms.
|
||
|
||
LLMs, agents, probabilistic classifiers, or adaptive systems may contribute context or request actions, but they must not be able to manufacture authority by themselves.
|
||
|
||
## 2.2 Explicit identity chain
|
||
|
||
The system should distinguish:
|
||
|
||
- the **principal** on whose behalf authority originates;
|
||
- the **actor** directly requesting or performing the action;
|
||
- the **runtime identity** of the executing workload;
|
||
- the **tenant** and organizational context;
|
||
- the **mandate** or delegated purpose under which the action is attempted.
|
||
|
||
## 2.3 Least authority
|
||
|
||
Authority should be:
|
||
|
||
- task-scoped;
|
||
- action-scoped;
|
||
- resource-scoped;
|
||
- tenant-scoped;
|
||
- environment-scoped;
|
||
- time-bounded;
|
||
- quota-bounded where appropriate.
|
||
|
||
## 2.4 Short-lived authority
|
||
|
||
Standing credentials and standing privilege should be minimized.
|
||
|
||
Gate House should prefer issuance of short-lived authorization grants and rely on the Secrets Engine/OpenBao or cloud-native STS mechanisms to materialize them as short-lived credentials where necessary.
|
||
|
||
## 2.5 Explicit agentic operating modes
|
||
|
||
The system must support and distinguish:
|
||
|
||
- **Agent Assistant Coding** — human-supervised;
|
||
- **Autonomous Agent Coding** — independently operating under explicit mandate.
|
||
|
||
The transition from Assistant to Autonomous mode is an explicit governance event.
|
||
|
||
## 2.6 Safe autonomy
|
||
|
||
Autonomous agents must be independently stoppable.
|
||
|
||
Gate House should support deterministic:
|
||
|
||
- expiry;
|
||
- revocation;
|
||
- concurrency limits;
|
||
- action quotas;
|
||
- environment restrictions;
|
||
- circuit breakers;
|
||
- step-up authorization.
|
||
|
||
## 2.7 Explainability and evidence
|
||
|
||
Every material authorization decision should be reconstructable:
|
||
|
||
> Who acted? On whose behalf? Under which mandate? Against which resource? For which action? Under which policy and constraints? For how long? And why was it allowed or denied?
|
||
|
||
## 2.8 Composability
|
||
|
||
Gate House should be a small control plane with explicit integration contracts.
|
||
|
||
It should avoid becoming:
|
||
|
||
- an IAM suite;
|
||
- another secret manager;
|
||
- a SIEM;
|
||
- an incident platform;
|
||
- a workflow engine;
|
||
- an agent runtime.
|
||
|
||
---
|
||
|
||
# 3. Non-Goals
|
||
|
||
The first Gate House implementation will not attempt to:
|
||
|
||
- replace OpenBao;
|
||
- replace Key Cape;
|
||
- replace User Engine;
|
||
- replace Tenant Engine;
|
||
- implement King's Guard;
|
||
- implement a general secrets scanner;
|
||
- implement a general policy language;
|
||
- implement a general-purpose workflow engine;
|
||
- implement full cloud IAM abstraction;
|
||
- implement autonomous remediation;
|
||
- become the system of record for every security policy in NetKingdom.
|
||
|
||
Its job is to provide the deterministic authority contract connecting these systems.
|
||
|
||
---
|
||
|
||
# 4. System Context
|
||
|
||
```mermaid
|
||
flowchart TB
|
||
H[Human Developer / Operator]
|
||
AA[Assistant Agent]
|
||
AU[Autonomous Agent]
|
||
KG[King's Guard]
|
||
KC[Key Cape]
|
||
UE[User Engine]
|
||
TE[Tenant Engine]
|
||
|
||
GH[Gate House]
|
||
|
||
SE[Secrets Engine]
|
||
OB[OpenBao]
|
||
OW[Ops Warden]
|
||
OM[Ops Mason]
|
||
|
||
K8S[Kubernetes]
|
||
CLOUD[Cloud APIs]
|
||
DB[Databases]
|
||
GIT[Git / CI/CD]
|
||
SAAS[SaaS / External APIs]
|
||
|
||
WH[Whitehat Security]
|
||
AUD[Audit / Evidence Store]
|
||
|
||
H --> KC
|
||
KC --> GH
|
||
UE --> GH
|
||
TE --> GH
|
||
|
||
H --> AA
|
||
AA --> GH
|
||
AU --> GH
|
||
|
||
KG --> GH
|
||
|
||
GH --> SE
|
||
SE --> OB
|
||
|
||
GH --> OW
|
||
GH --> OM
|
||
|
||
OW --> K8S
|
||
OW --> CLOUD
|
||
OW --> DB
|
||
OM --> K8S
|
||
OM --> CLOUD
|
||
|
||
GH --> GIT
|
||
GH --> SAAS
|
||
|
||
GH --> AUD
|
||
KG --> AUD
|
||
OW --> AUD
|
||
OM --> AUD
|
||
|
||
WH --> GH
|
||
WH --> KG
|
||
```
|
||
|
||
---
|
||
|
||
# 5. Three-Plane Model
|
||
|
||
Gate House is easiest to reason about as the center of three planes.
|
||
|
||
## 5.1 Cognitive Plane
|
||
|
||
The Cognitive Plane determines what might usefully happen next.
|
||
|
||
Examples:
|
||
|
||
- humans;
|
||
- LLMs;
|
||
- coding agents;
|
||
- operations agents;
|
||
- planners;
|
||
- MCP clients;
|
||
- A2A agents;
|
||
- King's Guard risk analysis.
|
||
|
||
The Cognitive Plane can request authority.
|
||
|
||
It cannot grant authority.
|
||
|
||
## 5.2 Authority Plane
|
||
|
||
Gate House belongs to the Authority Plane.
|
||
|
||
The Authority Plane evaluates:
|
||
|
||
- authenticated identity;
|
||
- principal;
|
||
- actor;
|
||
- runtime identity;
|
||
- tenant;
|
||
- environment;
|
||
- task;
|
||
- mandate;
|
||
- delegation;
|
||
- requested action;
|
||
- requested resource;
|
||
- policy;
|
||
- approval;
|
||
- posture;
|
||
- TTL;
|
||
- quotas;
|
||
- budgets;
|
||
- authority ceiling.
|
||
|
||
It produces:
|
||
|
||
- `GRANT`;
|
||
- `DENY`;
|
||
- `REQUIRE_APPROVAL`;
|
||
- optionally `DEFER` for non-security-critical upstream enrichment.
|
||
|
||
Security-critical ambiguity should normally fail closed.
|
||
|
||
## 5.3 Execution Plane
|
||
|
||
The Execution Plane changes system state.
|
||
|
||
Examples:
|
||
|
||
- Git;
|
||
- CI/CD;
|
||
- Kubernetes;
|
||
- cloud APIs;
|
||
- databases;
|
||
- SaaS;
|
||
- production services;
|
||
- Ops Warden;
|
||
- Ops Mason.
|
||
|
||
Gate House should not perform most execution itself.
|
||
|
||
Instead it should issue or represent authority that execution systems can enforce.
|
||
|
||
---
|
||
|
||
# 6. Core Domain Model
|
||
|
||
The domain model is intentionally small.
|
||
|
||
## 6.1 Principal
|
||
|
||
The human, organization, workload, or system on whose behalf authority originates.
|
||
|
||
Examples:
|
||
|
||
```text
|
||
user:alice@example
|
||
service:release-controller
|
||
org:acme
|
||
tenant:acme
|
||
```
|
||
|
||
## 6.2 Actor
|
||
|
||
The entity directly requesting or performing the action.
|
||
|
||
Examples:
|
||
|
||
```text
|
||
agent:deploy-agent-22
|
||
workload:ci/github/actions/release
|
||
human:alice@example
|
||
```
|
||
|
||
## 6.3 Runtime Identity
|
||
|
||
The concrete workload instance performing execution.
|
||
|
||
Examples:
|
||
|
||
```text
|
||
spiffe://netkingdom/prod/deployer/22
|
||
k8s://cluster-a/ns-release/sa-deployer/pod-7f91
|
||
aws://sts/role-session/...
|
||
```
|
||
|
||
## 6.4 Tenant
|
||
|
||
The security and organizational domain in which the action occurs.
|
||
|
||
Examples:
|
||
|
||
```text
|
||
tenant:acme
|
||
tenant:internal
|
||
tenant:platform
|
||
```
|
||
|
||
## 6.5 Environment
|
||
|
||
Operational environment.
|
||
|
||
Examples:
|
||
|
||
```text
|
||
dev
|
||
test
|
||
staging
|
||
production
|
||
```
|
||
|
||
## 6.6 Mandate
|
||
|
||
A standing organizational authorization defining what an autonomous actor exists to do.
|
||
|
||
Examples:
|
||
|
||
```text
|
||
mandate:release-automation
|
||
mandate:vulnerability-remediation
|
||
mandate:production-diagnostics
|
||
```
|
||
|
||
A mandate is **not** a credential.
|
||
|
||
It is a policy-recognized declaration of intended authority.
|
||
|
||
## 6.7 Delegation
|
||
|
||
A scoped transfer of authority from a principal to an actor.
|
||
|
||
Delegation should normally attenuate:
|
||
|
||
```text
|
||
child_authority ⊆ parent_authority
|
||
```
|
||
|
||
## 6.8 Authority Ceiling
|
||
|
||
The maximum authority an actor can ever obtain under deterministic policy.
|
||
|
||
An agent may use less authority than its ceiling.
|
||
|
||
It may not reason itself into more.
|
||
|
||
## 6.9 Action
|
||
|
||
A canonical operation.
|
||
|
||
Examples:
|
||
|
||
```text
|
||
kubernetes.pod.read
|
||
kubernetes.deployment.restart
|
||
database.select
|
||
database.schema.modify
|
||
cloud.iam.role.modify
|
||
git.repository.write
|
||
release.deploy
|
||
```
|
||
|
||
## 6.10 Resource
|
||
|
||
A canonical target.
|
||
|
||
Examples:
|
||
|
||
```text
|
||
k8s://cluster-a/ns/payments/deployment/api
|
||
db://orders-prod/schema/public/table/orders
|
||
aws://123456789012/eks/cluster-a
|
||
git://github/acme/payments
|
||
```
|
||
|
||
## 6.11 Grant
|
||
|
||
A positive authorization result.
|
||
|
||
A grant should be:
|
||
|
||
- immutable after issuance;
|
||
- scoped;
|
||
- versioned;
|
||
- time-bounded;
|
||
- independently revocable where practical.
|
||
|
||
## 6.12 Denial
|
||
|
||
A negative authorization decision.
|
||
|
||
A denial should include:
|
||
|
||
- machine-readable reason;
|
||
- policy reference;
|
||
- evaluated constraints;
|
||
- optional remediation/approval hints.
|
||
|
||
## 6.13 Approval
|
||
|
||
An independent authorization artifact required for higher-risk actions.
|
||
|
||
Approvals should be:
|
||
|
||
- actor-bound;
|
||
- resource-bound;
|
||
- action-bound;
|
||
- parameter-bound;
|
||
- time-bound;
|
||
- replay-resistant.
|
||
|
||
## 6.14 Posture
|
||
|
||
A bounded security-state input.
|
||
|
||
Typical source:
|
||
|
||
- King's Guard.
|
||
|
||
Examples:
|
||
|
||
```text
|
||
HEALTHY
|
||
DEGRADED
|
||
SUSPICIOUS
|
||
CONTAIN
|
||
BLOCKED
|
||
```
|
||
|
||
Gate House should interpret posture through deterministic policy.
|
||
|
||
## 6.15 Credential Binding
|
||
|
||
The mapping from an authority grant to the technical credential mechanism used by a target system.
|
||
|
||
Examples:
|
||
|
||
```text
|
||
aws-sts-role
|
||
openbao-database-lease
|
||
openbao-pki-certificate
|
||
oauth-token-exchange
|
||
kubernetes-service-account-token
|
||
```
|
||
|
||
## 6.16 Decision Evidence
|
||
|
||
The authoritative record of:
|
||
|
||
- request;
|
||
- identities;
|
||
- evaluated policy;
|
||
- policy version;
|
||
- result;
|
||
- constraints;
|
||
- grant ID;
|
||
- approval ID;
|
||
- posture input;
|
||
- timestamps.
|
||
|
||
---
|
||
|
||
# 7. Canonical Authorization Request
|
||
|
||
A canonical request should be expressive enough for human, workload, and agent contexts without requiring every field in every scenario.
|
||
|
||
Example:
|
||
|
||
```yaml
|
||
request_id: req-01J6A8A1FJ3P
|
||
|
||
principal:
|
||
id: user:alice@example
|
||
type: human
|
||
|
||
actor:
|
||
id: agent:deploy-agent-22
|
||
type: agent
|
||
|
||
runtime:
|
||
id: spiffe://netkingdom/prod/deployer/22
|
||
|
||
tenant:
|
||
id: tenant:acme
|
||
|
||
environment: production
|
||
|
||
task:
|
||
id: release-7.2.1
|
||
type: release
|
||
|
||
mandate:
|
||
id: release-automation
|
||
|
||
delegation:
|
||
mode: assistant
|
||
parent_session: session-01J6A7
|
||
|
||
request:
|
||
action: production.deploy
|
||
resource: k8s://cluster-a/ns/payments/deployment/api
|
||
|
||
parameters:
|
||
image: registry.example/payments:7.2.1
|
||
replicas: 6
|
||
|
||
approval:
|
||
id: approval-9432
|
||
|
||
posture:
|
||
actor: HEALTHY
|
||
resource: HEALTHY
|
||
|
||
constraints:
|
||
requested_ttl: 20m
|
||
max_mutations: 1
|
||
|
||
context:
|
||
trace_id: 4bf92f3577b34da6a3ce929d0e0e4736
|
||
source: mcp://ops-warden
|
||
```
|
||
|
||
---
|
||
|
||
# 8. Canonical Decision
|
||
|
||
Example:
|
||
|
||
```yaml
|
||
decision_id: dec-01J6A8AJ4YQW
|
||
request_id: req-01J6A8A1FJ3P
|
||
|
||
decision: GRANT
|
||
|
||
policy:
|
||
bundle: production-release
|
||
version: 2026-08-24.3
|
||
|
||
authority:
|
||
grant_id: grant-01J6A8AXK0N2
|
||
action: production.deploy
|
||
resource: k8s://cluster-a/ns/payments/deployment/api
|
||
expires_at: 2026-08-24T20:22:00+02:00
|
||
mutation_limit: 1
|
||
|
||
credential_binding:
|
||
type: kubernetes-execution-token
|
||
provider: secrets-engine
|
||
audience: ops-warden
|
||
|
||
obligations:
|
||
- immutable_audit
|
||
- emit_deployment_evidence
|
||
- revoke_after_first_success
|
||
|
||
explanation:
|
||
code: RELEASE_MANDATE_APPROVED
|
||
message: >
|
||
Actor is operating under the release-automation mandate,
|
||
approval matches resource and parameters, and current posture
|
||
permits one production deployment.
|
||
|
||
evidence:
|
||
policy_hash: sha256:...
|
||
input_hash: sha256:...
|
||
```
|
||
|
||
---
|
||
|
||
# 9. Decision Types
|
||
|
||
The first implementation should support at least four outcomes.
|
||
|
||
## 9.1 GRANT
|
||
|
||
The request is authorized under explicit constraints.
|
||
|
||
## 9.2 DENY
|
||
|
||
The request is not authorized.
|
||
|
||
## 9.3 REQUIRE_APPROVAL
|
||
|
||
The request may proceed only after acquisition of a separately governed approval artifact.
|
||
|
||
This is preferable to returning a soft "maybe".
|
||
|
||
## 9.4 DEFER
|
||
|
||
Optional.
|
||
|
||
Used only for non-security-critical enrichment, such as waiting for authoritative tenant metadata.
|
||
|
||
A request must not be allowed to cross a privileged boundary while unresolved.
|
||
|
||
---
|
||
|
||
# 10. Internal Component Architecture
|
||
|
||
> **Withdrawn 2026-08-28** (GH-DEC-2026-001). Retained as design history: this describes Gate House as a running engine. The decision point is `access-engine`.
|
||
|
||
|
||
```mermaid
|
||
flowchart LR
|
||
API[Authorization API]
|
||
NORM[Request Normalizer]
|
||
CTX[Context Resolver]
|
||
POLICY[Policy Decision Service]
|
||
CEIL[Authority Ceiling Evaluator]
|
||
APPR[Approval Validator]
|
||
POST[Posture Interpreter]
|
||
LIMIT[Limits / Change Dynamics]
|
||
GRANT[Grant Service]
|
||
CRED[Credential Binding Adapter]
|
||
REVOKE[Revocation Service]
|
||
AUDIT[Audit / Evidence Service]
|
||
CACHE[Policy & Context Cache]
|
||
|
||
API --> NORM
|
||
NORM --> CTX
|
||
CTX --> POLICY
|
||
|
||
POLICY --> CEIL
|
||
POLICY --> APPR
|
||
POLICY --> POST
|
||
POLICY --> LIMIT
|
||
|
||
CEIL --> GRANT
|
||
APPR --> GRANT
|
||
POST --> GRANT
|
||
LIMIT --> GRANT
|
||
|
||
GRANT --> CRED
|
||
GRANT --> AUDIT
|
||
REVOKE --> AUDIT
|
||
|
||
CACHE --> CTX
|
||
CACHE --> POLICY
|
||
```
|
||
|
||
---
|
||
|
||
# 11. Component Responsibilities
|
||
|
||
> **Withdrawn 2026-08-28** (GH-DEC-2026-001). Retained as design history: this describes Gate House as a running engine. The decision point is `access-engine`.
|
||
|
||
|
||
## 11.1 Authorization API
|
||
|
||
Responsibilities:
|
||
|
||
- receive authorization requests;
|
||
- validate schema;
|
||
- enforce authentication of calling systems;
|
||
- attach correlation metadata;
|
||
- return normalized decisions.
|
||
|
||
The API should not embed business policy.
|
||
|
||
## 11.2 Request Normalizer
|
||
|
||
Responsibilities:
|
||
|
||
- canonicalize resource identifiers;
|
||
- canonicalize actions;
|
||
- normalize parameters;
|
||
- remove ambiguity before policy evaluation;
|
||
- ensure parameter-bound approvals compare normalized values.
|
||
|
||
Example:
|
||
|
||
```text
|
||
kubectl rollout restart deployment api -n payments
|
||
```
|
||
|
||
may normalize to:
|
||
|
||
```text
|
||
action: kubernetes.deployment.restart
|
||
resource: k8s://cluster-a/ns/payments/deployment/api
|
||
```
|
||
|
||
## 11.3 Context Resolver
|
||
|
||
Fetches authoritative context from trusted systems.
|
||
|
||
Potential sources:
|
||
|
||
- User Engine;
|
||
- Tenant Engine;
|
||
- Key Cape;
|
||
- Mandate registry;
|
||
- King's Guard;
|
||
- environment/resource registry.
|
||
|
||
The resolver should distinguish:
|
||
|
||
- authoritative context;
|
||
- advisory context;
|
||
- stale context.
|
||
|
||
Security-critical missing context should fail closed.
|
||
|
||
## 11.4 Policy Decision Service
|
||
|
||
Evaluates deterministic authorization logic.
|
||
|
||
The first implementation should make the policy backend pluggable.
|
||
|
||
Potential engines:
|
||
|
||
- OPA/Rego;
|
||
- Cedar;
|
||
- native evaluator.
|
||
|
||
The domain model must not depend on one policy language.
|
||
|
||
## 11.5 Authority Ceiling Evaluator
|
||
|
||
Ensures that requested authority does not exceed:
|
||
|
||
- actor ceiling;
|
||
- mandate ceiling;
|
||
- delegation ceiling;
|
||
- tenant ceiling;
|
||
- environment ceiling;
|
||
- parent-agent ceiling.
|
||
|
||
This should be a mandatory layer even if policy already encodes similar logic.
|
||
|
||
Defense in depth is appropriate at the authority boundary.
|
||
|
||
## 11.6 Approval Validator
|
||
|
||
Validates step-up authorization artifacts.
|
||
|
||
Should verify:
|
||
|
||
- issuer;
|
||
- actor;
|
||
- principal;
|
||
- action;
|
||
- resource;
|
||
- normalized parameters;
|
||
- issuance time;
|
||
- expiry;
|
||
- nonce/replay properties;
|
||
- approval class.
|
||
|
||
## 11.7 Posture Interpreter
|
||
|
||
Converts trusted adaptive-security posture into deterministic restrictions.
|
||
|
||
Example:
|
||
|
||
```yaml
|
||
posture:
|
||
actor: DEGRADED
|
||
```
|
||
|
||
may resolve into:
|
||
|
||
```yaml
|
||
restrictions:
|
||
deny:
|
||
- production.write
|
||
require_approval:
|
||
- staging.write
|
||
```
|
||
|
||
The Posture Interpreter must not call an LLM to determine whether authority exists.
|
||
|
||
## 11.8 Limits / Change Dynamics Controller
|
||
|
||
Evaluates operational limits:
|
||
|
||
- concurrent grants;
|
||
- concurrent mutating actors;
|
||
- per-task mutation count;
|
||
- runtime;
|
||
- deployment frequency;
|
||
- destructive action quota;
|
||
- token/compute budget;
|
||
- agent-chain depth.
|
||
|
||
This is not the primary authorization layer.
|
||
|
||
It is a secondary blast-radius layer.
|
||
|
||
## 11.9 Grant Service
|
||
|
||
Issues immutable grant records.
|
||
|
||
Responsibilities:
|
||
|
||
- assign grant IDs;
|
||
- enforce TTL;
|
||
- encode authority scope;
|
||
- attach obligations;
|
||
- register revocation state;
|
||
- optionally mint signed grant artifacts.
|
||
|
||
## 11.10 Credential Binding Adapter
|
||
|
||
Maps grants to credential mechanisms.
|
||
|
||
It should not contain the actual secret backend logic.
|
||
|
||
Instead it should delegate to Secrets Engine.
|
||
|
||
Example:
|
||
|
||
```text
|
||
grant
|
||
↓
|
||
credential binding request
|
||
↓
|
||
Secrets Engine
|
||
↓
|
||
OpenBao / AWS STS / OAuth / PKI
|
||
```
|
||
|
||
## 11.11 Revocation Service
|
||
|
||
Supports:
|
||
|
||
- grant revocation;
|
||
- actor suspension;
|
||
- mandate suspension;
|
||
- tenant freeze;
|
||
- emergency kill switch;
|
||
- propagation to credential providers.
|
||
|
||
Revocation should not depend on the affected agent cooperating.
|
||
|
||
## 11.12 Audit / Evidence Service
|
||
|
||
Records:
|
||
|
||
- request;
|
||
- normalized request;
|
||
- identity chain;
|
||
- context versions;
|
||
- policy version;
|
||
- decision;
|
||
- grant;
|
||
- revocation;
|
||
- credential binding metadata;
|
||
- execution references where available.
|
||
|
||
Audit storage should be independently controlled.
|
||
|
||
---
|
||
|
||
# 12. Policy Architecture
|
||
|
||
> **Withdrawn 2026-08-28** (GH-DEC-2026-001). Retained as design history: this describes Gate House as a running engine. The decision point is `access-engine`.
|
||
|
||
|
||
Gate House should separate policy into layers.
|
||
|
||
## 12.1 Baseline Invariants
|
||
|
||
Hard global rules.
|
||
|
||
Examples:
|
||
|
||
```text
|
||
deny if tenant is unresolved
|
||
deny if production action has no authenticated actor
|
||
deny if autonomous actor has no mandate
|
||
deny if child authority exceeds parent authority
|
||
deny if actor attempts to modify its own authority ceiling
|
||
deny if audit subsystem is unavailable for critical actions
|
||
```
|
||
|
||
These should be difficult to override.
|
||
|
||
## 12.2 Environment Policy
|
||
|
||
Examples:
|
||
|
||
```text
|
||
production
|
||
staging
|
||
development
|
||
```
|
||
|
||
Production should require stronger controls.
|
||
|
||
## 12.3 Tenant Policy
|
||
|
||
Per-tenant restrictions.
|
||
|
||
Important for multi-tenancy.
|
||
|
||
## 12.4 Mandate Policy
|
||
|
||
Defines what autonomous actor classes are intended to do.
|
||
|
||
## 12.5 Resource Policy
|
||
|
||
Specific restrictions for:
|
||
|
||
- Kubernetes clusters;
|
||
- databases;
|
||
- cloud accounts;
|
||
- repositories;
|
||
- SaaS APIs.
|
||
|
||
## 12.6 Posture Policy
|
||
|
||
Maps King's Guard state to authority consequences.
|
||
|
||
## 12.7 Approval Policy
|
||
|
||
Defines which action classes require:
|
||
|
||
- human approval;
|
||
- dual approval;
|
||
- break-glass;
|
||
- step-up MFA;
|
||
- parameter-bound authorization.
|
||
|
||
## 12.8 Change Dynamics Policy
|
||
|
||
Constrains:
|
||
|
||
- concurrency;
|
||
- rate;
|
||
- budget;
|
||
- runtime;
|
||
- action quotas.
|
||
|
||
---
|
||
|
||
# 13. Policy Evaluation Order
|
||
|
||
> **Withdrawn 2026-08-28** (GH-DEC-2026-001). Retained as design history: this describes Gate House as a running engine. The decision point is `access-engine`.
|
||
|
||
|
||
A simple initial evaluation order is desirable.
|
||
|
||
```text
|
||
1. authenticate caller
|
||
2. normalize request
|
||
3. resolve principal / actor / tenant / runtime
|
||
4. verify operating mode
|
||
5. verify mandate / delegation
|
||
6. enforce authority ceiling
|
||
7. evaluate hard invariants
|
||
8. evaluate environment + tenant + resource policy
|
||
9. apply posture restrictions
|
||
10. validate approval
|
||
11. apply change-dynamics limits
|
||
12. derive obligations
|
||
13. GRANT or DENY
|
||
14. emit evidence
|
||
```
|
||
|
||
Where possible, evaluation should be monotonic toward restriction:
|
||
|
||
```text
|
||
initial possible authority
|
||
↓
|
||
identity constraints
|
||
↓
|
||
mandate constraints
|
||
↓
|
||
tenant constraints
|
||
↓
|
||
resource constraints
|
||
↓
|
||
posture constraints
|
||
↓
|
||
approval constraints
|
||
↓
|
||
limits
|
||
↓
|
||
final authority
|
||
```
|
||
|
||
No later stage should silently expand beyond an earlier hard ceiling.
|
||
|
||
---
|
||
|
||
# 14. Assistant Mode Architecture
|
||
|
||
## 14.1 Intent
|
||
|
||
Assistant mode keeps the human as primary principal while preserving the agent as actor.
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant H as Human
|
||
participant A as Assistant Agent
|
||
participant K as Key Cape
|
||
participant G as Gate House
|
||
participant O as Ops Warden
|
||
participant R as Resource
|
||
|
||
H->>K: authenticate
|
||
K-->>H: human session
|
||
H->>A: request task
|
||
A->>G: request action(principal=H, actor=A)
|
||
G->>G: deterministic policy evaluation
|
||
G-->>A: scoped grant
|
||
A->>O: execute with grant
|
||
O->>R: perform authorized action
|
||
R-->>O: result
|
||
O-->>G: execution evidence
|
||
```
|
||
|
||
## 14.2 Assistant-Mode Requirements
|
||
|
||
- human session must be active;
|
||
- human principal must remain identifiable;
|
||
- agent should not inherit every human credential;
|
||
- privileged grants should be short-lived;
|
||
- human session termination should invalidate or shorten associated authority;
|
||
- irreversible actions may require explicit confirmation;
|
||
- agent must not silently continue as autonomous actor.
|
||
|
||
---
|
||
|
||
# 15. Autonomous Mode Architecture
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant T as Trigger/Scheduler
|
||
participant A as Autonomous Agent
|
||
participant K as Workload Identity
|
||
participant G as Gate House
|
||
participant S as Secrets Engine
|
||
participant O as Ops Warden
|
||
participant R as Resource
|
||
|
||
T->>A: start task
|
||
A->>K: attest workload identity
|
||
K-->>A: short-lived identity
|
||
A->>G: request action(actor=A, mandate=M)
|
||
G->>G: evaluate mandate + ceiling + policy
|
||
G-->>A: grant
|
||
A->>S: request credential binding(grant)
|
||
S-->>A: short-lived execution credential
|
||
A->>O: execute
|
||
O->>R: protected action
|
||
O-->>G: evidence
|
||
```
|
||
|
||
## 15.1 Autonomous-Mode Requirements
|
||
|
||
Every autonomous agent must have:
|
||
|
||
- unique identity;
|
||
- named governance owner;
|
||
- explicit mandate;
|
||
- authority ceiling;
|
||
- lifecycle;
|
||
- runtime limit;
|
||
- task budget;
|
||
- concurrency limit;
|
||
- revocation path;
|
||
- audit trace;
|
||
- no borrowed human credential.
|
||
|
||
---
|
||
|
||
# 16. King's Guard Integration
|
||
|
||
King's Guard is an adaptive security system.
|
||
|
||
Gate House should consume King's Guard output as **bounded posture input**.
|
||
|
||
## 16.1 Accepted Pattern
|
||
|
||
```text
|
||
King's Guard:
|
||
actor = agent-934
|
||
posture = DEGRADED
|
||
confidence = 0.72
|
||
reason = anomalous-tool-usage
|
||
```
|
||
|
||
Gate House policy:
|
||
|
||
```text
|
||
IF actor.posture == DEGRADED
|
||
THEN
|
||
deny production.write
|
||
allow production.read
|
||
require approval for staging.write
|
||
```
|
||
|
||
## 16.2 Forbidden Pattern
|
||
|
||
```text
|
||
King's Guard:
|
||
"This looks safe enough.
|
||
Give agent-934 admin."
|
||
```
|
||
|
||
Adaptive systems may restrict or request authority changes.
|
||
|
||
They must not bypass Gate House.
|
||
|
||
## 16.3 Containment Flow
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant KG as King's Guard
|
||
participant GH as Gate House
|
||
participant OW as Ops Warden
|
||
participant R as Resource
|
||
|
||
KG->>GH: posture update: CONTAIN actor-X
|
||
GH->>GH: deterministic containment policy
|
||
GH-->>OW: authorized containment grant
|
||
OW->>R: isolate / suspend / revoke
|
||
OW-->>KG: containment result
|
||
KG->>KG: validate outcome
|
||
```
|
||
|
||
---
|
||
|
||
# 17. Secrets Engine and OpenBao Integration
|
||
|
||
Gate House should not directly become a secrets backend.
|
||
|
||
## 17.1 Separation of Responsibilities
|
||
|
||
```text
|
||
Gate House:
|
||
"This authority is allowed."
|
||
|
||
Secrets Engine:
|
||
"This is how the target system expects authority to be represented."
|
||
|
||
OpenBao:
|
||
"This is how the required credential is securely issued and leased."
|
||
```
|
||
|
||
## 17.2 Example
|
||
|
||
Request:
|
||
|
||
```text
|
||
database.select
|
||
db://orders-prod
|
||
TTL 15m
|
||
```
|
||
|
||
Gate House:
|
||
|
||
```text
|
||
GRANT
|
||
```
|
||
|
||
Secrets Engine:
|
||
|
||
```text
|
||
binding = openbao.database.dynamic
|
||
role = orders-readonly
|
||
ttl = 15m
|
||
```
|
||
|
||
OpenBao:
|
||
|
||
```text
|
||
username = v-gh-...
|
||
password = ...
|
||
lease = 15m
|
||
```
|
||
|
||
The credential should ideally be consumed by a trusted execution layer and not placed into LLM context.
|
||
|
||
---
|
||
|
||
# 18. Execution Gateway Pattern
|
||
|
||
Where possible, Gate House should encourage a brokered execution model.
|
||
|
||
Preferred:
|
||
|
||
```text
|
||
Agent
|
||
↓ request
|
||
Gate House
|
||
↓ grant
|
||
Execution Gateway / Ops Warden
|
||
↓ obtains credential
|
||
Target System
|
||
```
|
||
|
||
Less preferred:
|
||
|
||
```text
|
||
Agent
|
||
↓
|
||
raw reusable credential
|
||
↓
|
||
Target System
|
||
```
|
||
|
||
Benefits:
|
||
|
||
- fewer secrets in model context;
|
||
- easier audit;
|
||
- easier revocation;
|
||
- target-specific enforcement;
|
||
- reduced exfiltration risk.
|
||
|
||
---
|
||
|
||
# 19. MCP Integration
|
||
|
||
MCP is treated as a capability interface, not an authorization system.
|
||
|
||
## 19.1 MCP Tool Registration
|
||
|
||
Tool metadata may define:
|
||
|
||
- action identifier;
|
||
- resource schema;
|
||
- parameter schema;
|
||
- risk class;
|
||
- reversibility;
|
||
- required grant class.
|
||
|
||
Example:
|
||
|
||
```yaml
|
||
tool: restart_service
|
||
action: kubernetes.deployment.restart
|
||
risk: privileged-write
|
||
reversible: true
|
||
authorization:
|
||
gate_house: required
|
||
```
|
||
|
||
## 19.2 Invocation Flow
|
||
|
||
```text
|
||
LLM selects tool
|
||
↓
|
||
MCP server constructs normalized authority request
|
||
↓
|
||
Gate House
|
||
↓
|
||
GRANT / DENY
|
||
↓
|
||
MCP server executes only if granted
|
||
```
|
||
|
||
## 19.3 Token Handling
|
||
|
||
Inbound tokens should not be blindly forwarded to downstream resources.
|
||
|
||
Downstream credentials should be separately issued or exchanged and audience-bound.
|
||
|
||
---
|
||
|
||
# 20. Change Dynamics Envelope
|
||
|
||
Gate House should model agentic operational velocity as a security concern.
|
||
|
||
## 20.1 Envelope Dimensions
|
||
|
||
Possible controls:
|
||
|
||
```yaml
|
||
change_dynamics:
|
||
max_concurrent_mutations: 2
|
||
max_actions_per_grant: 1
|
||
max_resources_per_task: 5
|
||
max_runtime: 30m
|
||
max_agent_chain_depth: 3
|
||
max_destructive_actions: 0
|
||
max_deployments_per_hour: 4
|
||
token_budget_eur: 10
|
||
compute_budget_cpu_minutes: 120
|
||
```
|
||
|
||
## 20.2 Hard vs Soft Limits
|
||
|
||
Hard:
|
||
|
||
- destructive action quota;
|
||
- production concurrency;
|
||
- authority ceiling;
|
||
- environment boundary.
|
||
|
||
Soft/advisory:
|
||
|
||
- cost warning;
|
||
- anomaly score;
|
||
- human attention recommendation.
|
||
|
||
Security-critical limits should be deterministic.
|
||
|
||
---
|
||
|
||
# 21. Circuit Breaker Architecture
|
||
|
||
Gate House should support independent suspension primitives.
|
||
|
||
Examples:
|
||
|
||
```text
|
||
suspend actor
|
||
suspend mandate
|
||
suspend tenant writes
|
||
suspend production writes
|
||
revoke grant
|
||
revoke all grants for runtime
|
||
switch environment to read-only
|
||
require approval for all mutations
|
||
```
|
||
|
||
## 21.1 Circuit Breaker Sources
|
||
|
||
Potential sources:
|
||
|
||
- King's Guard;
|
||
- human operator;
|
||
- incident automation;
|
||
- budget threshold;
|
||
- audit failure;
|
||
- policy subsystem failure;
|
||
- anomaly threshold mapped by deterministic policy.
|
||
|
||
## 21.2 Safe Degraded Mode
|
||
|
||
Preferred sequence:
|
||
|
||
```text
|
||
NORMAL
|
||
↓
|
||
RESTRICTED
|
||
↓
|
||
READ_ONLY
|
||
↓
|
||
BLOCKED
|
||
```
|
||
|
||
Observability should usually remain available longer than mutation authority.
|
||
|
||
---
|
||
|
||
# 22. Multi-Tenant Model
|
||
|
||
Gate House is intended for multi-tenant environments.
|
||
|
||
Tenant context must be explicit.
|
||
|
||
## 22.1 Rules
|
||
|
||
- every protected request should resolve to a tenant or explicitly be platform-scoped;
|
||
- cross-tenant authority must be exceptional;
|
||
- tenant isolation policy must be evaluated before resource policy;
|
||
- ambiguous tenant context should fail closed;
|
||
- audit evidence must retain tenant context;
|
||
- King's Guard signals must not accidentally leak tenant-private information across boundaries.
|
||
|
||
## 22.2 Platform Operations
|
||
|
||
Platform-level actors should use explicit platform mandates rather than implicit global authority.
|
||
|
||
Example:
|
||
|
||
```text
|
||
mandate: platform-maintenance
|
||
scope:
|
||
tenants: "*"
|
||
constraints:
|
||
action_class: infrastructure-only
|
||
customer_data_access: denied
|
||
```
|
||
|
||
---
|
||
|
||
# 23. Policy Self-Modification Protection
|
||
|
||
A major agentic failure mode is self-escalation.
|
||
|
||
Gate House must treat modifications to:
|
||
|
||
- authority ceilings;
|
||
- policy bundles;
|
||
- identity trust;
|
||
- tenant mappings;
|
||
- approval rules;
|
||
- audit configuration;
|
||
- credential backends;
|
||
- circuit breakers;
|
||
|
||
as control-plane changes requiring stronger authorization than ordinary workload changes.
|
||
|
||
Example invariant:
|
||
|
||
```text
|
||
IF actor == subject_of_policy_change
|
||
AND change would expand actor authority
|
||
THEN require independent governance principal
|
||
```
|
||
|
||
---
|
||
|
||
# 24. Audit Architecture
|
||
|
||
## 24.1 Event Types
|
||
|
||
At minimum:
|
||
|
||
```text
|
||
AUTH_REQUEST_RECEIVED
|
||
AUTH_CONTEXT_RESOLVED
|
||
AUTH_DECISION
|
||
GRANT_ISSUED
|
||
GRANT_REVOKED
|
||
APPROVAL_VALIDATED
|
||
POSTURE_APPLIED
|
||
CREDENTIAL_BINDING_REQUESTED
|
||
CREDENTIAL_BINDING_ISSUED
|
||
EXECUTION_STARTED
|
||
EXECUTION_COMPLETED
|
||
CIRCUIT_BREAKER_TRIGGERED
|
||
POLICY_CHANGED
|
||
```
|
||
|
||
## 24.2 Evidence Requirements
|
||
|
||
Privileged action evidence should support reconstruction of:
|
||
|
||
- principal;
|
||
- actor;
|
||
- runtime;
|
||
- tenant;
|
||
- task;
|
||
- mandate;
|
||
- resource;
|
||
- action;
|
||
- parameters hash;
|
||
- approval;
|
||
- posture;
|
||
- policy version;
|
||
- grant;
|
||
- credential binding;
|
||
- execution result.
|
||
|
||
## 24.3 Tamper Resistance
|
||
|
||
The actor being audited should not have authority to erase the authoritative audit record.
|
||
|
||
Gate House may write to:
|
||
|
||
- append-only event store;
|
||
- external SIEM;
|
||
- immutable object storage;
|
||
- signed evidence log.
|
||
|
||
The first implementation may use ordinary storage but should preserve the interface for stronger backends.
|
||
|
||
---
|
||
|
||
# 25. Data Storage
|
||
|
||
> **Withdrawn 2026-08-28** (GH-DEC-2026-001). Retained as design history: this describes Gate House as a running engine. The decision point is `access-engine`.
|
||
|
||
|
||
Gate House should minimize durable sensitive state.
|
||
|
||
## 25.1 Durable State
|
||
|
||
Likely:
|
||
|
||
- mandates;
|
||
- grant metadata;
|
||
- revocation state;
|
||
- policy references;
|
||
- approval references;
|
||
- audit metadata;
|
||
- limits/counters.
|
||
|
||
## 25.2 Avoid Storing
|
||
|
||
Prefer not to store:
|
||
|
||
- raw secret values;
|
||
- cloud access keys;
|
||
- database passwords;
|
||
- OAuth refresh tokens;
|
||
- full sensitive payloads unless required.
|
||
|
||
Credential material belongs in Secrets Engine/OpenBao or equivalent backends.
|
||
|
||
---
|
||
|
||
# 26. API Surface
|
||
|
||
> **Withdrawn 2026-08-28** (GH-DEC-2026-001). Retained as design history: this describes Gate House as a running engine. The decision point is `access-engine`.
|
||
|
||
|
||
Initial APIs should remain small.
|
||
|
||
## 26.1 Authorization
|
||
|
||
```text
|
||
POST /v1/authorize
|
||
```
|
||
|
||
Returns:
|
||
|
||
```text
|
||
GRANT
|
||
DENY
|
||
REQUIRE_APPROVAL
|
||
```
|
||
|
||
## 26.2 Grant Introspection
|
||
|
||
```text
|
||
GET /v1/grants/{grant_id}
|
||
```
|
||
|
||
Used by execution gateways.
|
||
|
||
## 26.3 Revocation
|
||
|
||
```text
|
||
POST /v1/grants/{grant_id}/revoke
|
||
POST /v1/actors/{actor_id}/suspend
|
||
POST /v1/mandates/{mandate_id}/suspend
|
||
```
|
||
|
||
## 26.4 Posture
|
||
|
||
```text
|
||
POST /v1/posture
|
||
```
|
||
|
||
Trusted integrations only.
|
||
|
||
## 26.5 Mandates
|
||
|
||
```text
|
||
POST /v1/mandates
|
||
GET /v1/mandates/{id}
|
||
```
|
||
|
||
Initial implementation may keep mandates static/config-driven.
|
||
|
||
## 26.6 Decision Explain
|
||
|
||
```text
|
||
GET /v1/decisions/{decision_id}
|
||
```
|
||
|
||
Returns machine- and human-readable explanation.
|
||
|
||
---
|
||
|
||
# 27. Trust Boundaries
|
||
|
||
```mermaid
|
||
flowchart TB
|
||
subgraph Untrusted["Potentially Probabilistic / Untrusted"]
|
||
LLM[LLM / Agent]
|
||
MCP[MCP Client]
|
||
end
|
||
|
||
subgraph TrustedIdentity["Trusted Identity Sources"]
|
||
KC[Key Cape]
|
||
UE[User Engine]
|
||
TE[Tenant Engine]
|
||
end
|
||
|
||
subgraph GateHouse["Gate House Trust Boundary"]
|
||
API[API]
|
||
POL[Policy]
|
||
GRT[Grant Service]
|
||
AUD[Audit]
|
||
end
|
||
|
||
subgraph Credential["Credential Boundary"]
|
||
SE[Secrets Engine]
|
||
OB[OpenBao]
|
||
end
|
||
|
||
subgraph Execution["Protected Execution"]
|
||
OW[Ops Warden]
|
||
RES[Resources]
|
||
end
|
||
|
||
LLM --> API
|
||
MCP --> API
|
||
KC --> API
|
||
UE --> API
|
||
TE --> API
|
||
API --> POL
|
||
POL --> GRT
|
||
GRT --> SE
|
||
SE --> OB
|
||
GRT --> OW
|
||
OW --> RES
|
||
GRT --> AUD
|
||
```
|
||
|
||
Gate House must not blindly trust identity fields supplied by the agent request.
|
||
|
||
Identity and tenant claims should come from authenticated or independently resolved sources.
|
||
|
||
---
|
||
|
||
# 28. Failure Modes
|
||
|
||
## 28.1 Policy Engine Unavailable
|
||
|
||
Production writes:
|
||
|
||
```text
|
||
DENY
|
||
```
|
||
|
||
Read-only diagnostics may optionally use cached policy if policy explicitly permits.
|
||
|
||
## 28.2 King's Guard Unavailable
|
||
|
||
Do not grant additional authority.
|
||
|
||
Use last-known-good restrictive posture or configured fallback.
|
||
|
||
## 28.3 Audit Unavailable
|
||
|
||
For privileged production mutation:
|
||
|
||
```text
|
||
DENY
|
||
```
|
||
|
||
or use redundant audit path.
|
||
|
||
## 28.4 Secrets Engine Unavailable
|
||
|
||
Authorization may still return a grant, but execution requiring credentials cannot proceed.
|
||
|
||
Gate House should distinguish:
|
||
|
||
```text
|
||
authority granted
|
||
credential unavailable
|
||
```
|
||
|
||
## 28.5 User Engine / Tenant Engine Unavailable
|
||
|
||
If identity or tenant context is security-critical and cannot be resolved:
|
||
|
||
```text
|
||
DENY
|
||
```
|
||
|
||
## 28.6 Stale Context
|
||
|
||
Every externally resolved context item should have:
|
||
|
||
- source;
|
||
- version;
|
||
- fetched time;
|
||
- expiry/staleness policy.
|
||
|
||
---
|
||
|
||
# 29. Caching
|
||
|
||
Caching is useful but dangerous at authorization boundaries.
|
||
|
||
## 29.1 Cacheable
|
||
|
||
Potentially:
|
||
|
||
- static resource metadata;
|
||
- policy bundles;
|
||
- tenant membership with short TTL;
|
||
- mandate definitions;
|
||
- public key sets.
|
||
|
||
## 29.2 Avoid Long-Lived Caching
|
||
|
||
Avoid long-lived caching of:
|
||
|
||
- revocation state;
|
||
- incident posture;
|
||
- emergency suspension;
|
||
- approvals;
|
||
- human session presence.
|
||
|
||
## 29.3 Cache Rule
|
||
|
||
A cache may improve availability.
|
||
|
||
It must not silently expand authority after source-of-truth changes.
|
||
|
||
---
|
||
|
||
# 30. Deployment Model
|
||
|
||
The first reference implementation should target Kubernetes.
|
||
|
||
## 30.1 Suggested Services
|
||
|
||
Minimal deployment:
|
||
|
||
```text
|
||
gate-house-api
|
||
gate-house-policy
|
||
gate-house-grants
|
||
gate-house-audit
|
||
```
|
||
|
||
The first prototype may combine these into one process with clear internal module boundaries.
|
||
|
||
## 30.2 Production Direction
|
||
|
||
Later:
|
||
|
||
- multiple replicas;
|
||
- stateless decision path;
|
||
- durable grant/revocation store;
|
||
- dedicated audit sink;
|
||
- independent policy bundle distribution;
|
||
- mTLS or workload identity;
|
||
- namespace/network isolation;
|
||
- protected admin/control API.
|
||
|
||
## 30.3 Workload Identity
|
||
|
||
Gate House itself should authenticate downstream services using workload identity rather than static credentials wherever possible.
|
||
|
||
---
|
||
|
||
# 31. Technology Direction
|
||
|
||
> **Withdrawn 2026-08-28** (GH-DEC-2026-001). Retained as design history: this describes Gate House as a running engine. The decision point is `access-engine`.
|
||
|
||
|
||
The architecture should remain implementation-neutral initially.
|
||
|
||
Potential choices:
|
||
|
||
## 31.1 API
|
||
|
||
- HTTP/JSON for initial interoperability;
|
||
- gRPC later if useful for high-volume decision calls.
|
||
|
||
## 31.2 Policy
|
||
|
||
- OPA/Rego is a strong initial candidate;
|
||
- Cedar is worth benchmarking for typed authorization semantics;
|
||
- native policy layer may be appropriate for hard invariants.
|
||
|
||
A hybrid model may eventually be useful:
|
||
|
||
```text
|
||
hard invariants: native
|
||
organizational policy: OPA/Cedar
|
||
```
|
||
|
||
## 31.3 Storage
|
||
|
||
Potential:
|
||
|
||
- PostgreSQL for grants, mandates, revocation, audit metadata;
|
||
- append-only event store later.
|
||
|
||
## 31.4 Identity
|
||
|
||
- OIDC;
|
||
- SPIFFE/SPIRE;
|
||
- Kubernetes projected service-account tokens;
|
||
- cloud workload identity.
|
||
|
||
## 31.5 Secrets
|
||
|
||
- Secrets Engine abstraction;
|
||
- OpenBao backend;
|
||
- cloud-native STS backends.
|
||
|
||
---
|
||
|
||
# 32. Reference Repository Structure
|
||
|
||
> **Withdrawn 2026-08-28** (GH-DEC-2026-001). Retained as design history: this describes Gate House as a running engine. The decision point is `access-engine`.
|
||
|
||
|
||
```text
|
||
gate-house/
|
||
├── README.md
|
||
├── INTENT.md
|
||
├── ArchitectureBlueprint.md
|
||
├── docs/
|
||
│ ├── adr/
|
||
│ ├── concepts/
|
||
│ ├── flows/
|
||
│ └── threat-model/
|
||
├── api/
|
||
│ ├── openapi/
|
||
│ └── schemas/
|
||
├── domain/
|
||
│ ├── identity/
|
||
│ ├── authority/
|
||
│ ├── delegation/
|
||
│ ├── mandate/
|
||
│ ├── posture/
|
||
│ └── grant/
|
||
├── policy/
|
||
│ ├── invariants/
|
||
│ ├── bundles/
|
||
│ ├── engine/
|
||
│ └── tests/
|
||
├── grants/
|
||
│ ├── issuance/
|
||
│ ├── revocation/
|
||
│ └── introspection/
|
||
├── approvals/
|
||
├── limits/
|
||
│ ├── quota/
|
||
│ ├── budget/
|
||
│ └── concurrency/
|
||
├── integrations/
|
||
│ ├── user-engine/
|
||
│ ├── tenant-engine/
|
||
│ ├── key-cape/
|
||
│ ├── secrets-engine/
|
||
│ ├── openbao/
|
||
│ ├── kings-guard/
|
||
│ ├── ops-warden/
|
||
│ └── mcp/
|
||
├── audit/
|
||
├── cmd/
|
||
├── internal/
|
||
├── test/
|
||
│ ├── unit/
|
||
│ ├── integration/
|
||
│ ├── adversarial/
|
||
│ └── scenarios/
|
||
└── deploy/
|
||
├── kubernetes/
|
||
└── helm/
|
||
```
|
||
|
||
This is a reference layout, not yet a constraint.
|
||
|
||
---
|
||
|
||
# 33. Initial End-to-End Scenarios
|
||
|
||
## Scenario 1 — Human-Assisted Kubernetes Read
|
||
|
||
Goal:
|
||
|
||
- prove principal/actor separation;
|
||
- prove assistant-mode session binding;
|
||
- prove read-only grant.
|
||
|
||
Flow:
|
||
|
||
```text
|
||
human SSO
|
||
→ assistant agent
|
||
→ Gate House
|
||
→ read-only grant
|
||
→ Ops Warden
|
||
→ Kubernetes logs
|
||
```
|
||
|
||
Success criteria:
|
||
|
||
- no production write;
|
||
- grant expires with session;
|
||
- audit reconstructs human + agent.
|
||
|
||
## Scenario 2 — Autonomous Release
|
||
|
||
Goal:
|
||
|
||
- prove workload identity;
|
||
- prove mandate;
|
||
- prove production deployment scope.
|
||
|
||
Flow:
|
||
|
||
```text
|
||
scheduler
|
||
→ release agent
|
||
→ workload identity
|
||
→ Gate House
|
||
→ production.deploy grant
|
||
→ Ops Warden
|
||
→ Kubernetes
|
||
```
|
||
|
||
Success criteria:
|
||
|
||
- no IAM modification;
|
||
- one deployment only;
|
||
- short TTL;
|
||
- independent revocation.
|
||
|
||
## Scenario 3 — Dynamic DB Credential
|
||
|
||
Goal:
|
||
|
||
- prove authority-to-credential separation.
|
||
|
||
Flow:
|
||
|
||
```text
|
||
agent
|
||
→ Gate House
|
||
→ GRANT database.select
|
||
→ Secrets Engine
|
||
→ OpenBao
|
||
→ dynamic DB credential
|
||
→ execution gateway
|
||
```
|
||
|
||
Success criteria:
|
||
|
||
- credential not exposed to model;
|
||
- credential TTL <= grant TTL;
|
||
- credential revoked with grant.
|
||
|
||
## Scenario 4 — King's Guard Restriction
|
||
|
||
Goal:
|
||
|
||
- prove adaptive input cannot grant privilege.
|
||
|
||
Flow:
|
||
|
||
```text
|
||
King's Guard posture = DEGRADED
|
||
→ Gate House
|
||
→ deny production.write
|
||
→ allow read
|
||
```
|
||
|
||
Success criteria:
|
||
|
||
- deterministic restriction;
|
||
- no model reasoning in authorization path.
|
||
|
||
## Scenario 5 — Self-Escalation Attempt
|
||
|
||
Goal:
|
||
|
||
- prove control-plane protection.
|
||
|
||
Flow:
|
||
|
||
```text
|
||
agent
|
||
→ request policy change
|
||
→ attempt to expand own authority
|
||
→ Gate House
|
||
→ DENY / independent governance required
|
||
```
|
||
|
||
---
|
||
|
||
# 34. Security Test Program
|
||
|
||
The reference implementation should include adversarial tests from the beginning.
|
||
|
||
## 34.1 Malicious Model Test
|
||
|
||
Assume agent intentionally requests maximum destructive access.
|
||
|
||
Expected:
|
||
|
||
```text
|
||
authority ceiling holds
|
||
```
|
||
|
||
## 34.2 Prompt Injection Test
|
||
|
||
Assume tool description tells agent to dump credentials.
|
||
|
||
Expected:
|
||
|
||
```text
|
||
no reusable credentials available in model context
|
||
```
|
||
|
||
## 34.3 Human Disconnect Test
|
||
|
||
Terminate Assistant session.
|
||
|
||
Expected:
|
||
|
||
```text
|
||
associated privileged grants expire or are revoked
|
||
```
|
||
|
||
## 34.4 Policy Self-Modification Test
|
||
|
||
Agent attempts own privilege expansion.
|
||
|
||
Expected:
|
||
|
||
```text
|
||
DENY
|
||
```
|
||
|
||
## 34.5 Approval Replay Test
|
||
|
||
Reuse approval for different parameters.
|
||
|
||
Expected:
|
||
|
||
```text
|
||
DENY
|
||
```
|
||
|
||
## 34.6 Cross-Tenant Test
|
||
|
||
Attempt resource access in another tenant.
|
||
|
||
Expected:
|
||
|
||
```text
|
||
DENY
|
||
```
|
||
|
||
## 34.7 MCP Token Passthrough Test
|
||
|
||
Attempt reuse of inbound token against downstream resource.
|
||
|
||
Expected:
|
||
|
||
```text
|
||
DENY / separate credential required
|
||
```
|
||
|
||
## 34.8 Audit Loss Test
|
||
|
||
Disable audit sink.
|
||
|
||
Expected:
|
||
|
||
```text
|
||
privileged mutation fails closed
|
||
```
|
||
|
||
## 34.9 Circuit Breaker Test
|
||
|
||
Suspend actor while task is active.
|
||
|
||
Expected:
|
||
|
||
```text
|
||
new actions denied
|
||
active grants revoked where possible
|
||
```
|
||
|
||
---
|
||
|
||
# 35. Performance Targets
|
||
|
||
Security correctness is primary, but authorization cannot become an operational bottleneck.
|
||
|
||
Initial qualitative targets:
|
||
|
||
- local/cached authorization decision: low tens of milliseconds;
|
||
- external context lookups should be minimized;
|
||
- grants should be cacheable by execution gateways until expiry/revocation;
|
||
- revocation propagation should be near-real-time for privileged actors;
|
||
- audit should be asynchronous where safe but durable before returning success for critical actions.
|
||
|
||
Exact SLOs should be established after the first benchmark prototype.
|
||
|
||
---
|
||
|
||
# 36. Availability Model
|
||
|
||
Gate House is a security-critical dependency.
|
||
|
||
Production architecture should eventually target:
|
||
|
||
- multiple replicas;
|
||
- redundant policy engine;
|
||
- redundant audit path;
|
||
- durable revocation store;
|
||
- clear fail-closed semantics.
|
||
|
||
Availability must not be improved by silently bypassing authorization.
|
||
|
||
A preferred degradation model is:
|
||
|
||
```text
|
||
full authority
|
||
↓
|
||
cached read-only
|
||
↓
|
||
diagnostic-only
|
||
↓
|
||
deny privileged action
|
||
```
|
||
|
||
---
|
||
|
||
# 37. Observability
|
||
|
||
Gate House should expose:
|
||
|
||
## Metrics
|
||
|
||
- authorization requests;
|
||
- grants;
|
||
- denials;
|
||
- approval-required decisions;
|
||
- decision latency;
|
||
- context lookup latency;
|
||
- policy errors;
|
||
- active grants;
|
||
- revoked grants;
|
||
- actor suspensions;
|
||
- mandate suspensions;
|
||
- circuit-breaker activations;
|
||
- cache hit rate;
|
||
- audit failures;
|
||
- cross-tenant denial count.
|
||
|
||
## Traces
|
||
|
||
Trace:
|
||
|
||
```text
|
||
request
|
||
→ normalization
|
||
→ context resolution
|
||
→ policy
|
||
→ grant
|
||
→ credential binding
|
||
→ execution
|
||
```
|
||
|
||
## Logs
|
||
|
||
Logs must avoid:
|
||
|
||
- raw credentials;
|
||
- sensitive approval payloads;
|
||
- unnecessary customer data.
|
||
|
||
---
|
||
|
||
# 38. Administrative Interfaces
|
||
|
||
The admin/control path is itself a privileged security surface.
|
||
|
||
Initial administrative functions:
|
||
|
||
- register/update mandate;
|
||
- suspend actor;
|
||
- suspend mandate;
|
||
- revoke grant;
|
||
- set emergency environment restriction;
|
||
- inspect decision;
|
||
- inspect policy version.
|
||
|
||
Administrative access should:
|
||
|
||
- require strong authentication;
|
||
- be separately authorized;
|
||
- be audited;
|
||
- never be available to ordinary agent workload identities.
|
||
|
||
---
|
||
|
||
# 39. Governance Integration
|
||
|
||
Gate House should make governance machine-readable where practical.
|
||
|
||
A mandate record may include:
|
||
|
||
```yaml
|
||
id: mandate:release-automation
|
||
owner: team:platform-release
|
||
purpose: deploy approved releases
|
||
operating_mode: autonomous
|
||
|
||
authority_ceiling:
|
||
actions:
|
||
- production.deploy
|
||
resources:
|
||
- k8s://cluster-a/ns/payments/*
|
||
denied_actions:
|
||
- cloud.iam.*
|
||
- kubernetes.rbac.modify
|
||
|
||
constraints:
|
||
max_runtime: 30m
|
||
max_concurrency: 1
|
||
max_mutations_per_task: 1
|
||
```
|
||
|
||
This becomes a bridge between organizational governance and runtime enforcement.
|
||
|
||
---
|
||
|
||
# 40. Architecture Decision Records to Create Early
|
||
|
||
Recommended ADRs:
|
||
|
||
```text
|
||
ADR-001 Canonical Authority Request Schema
|
||
ADR-002 Principal / Actor / Runtime Identity Model
|
||
ADR-003 Policy Engine Selection
|
||
ADR-004 Grant Representation and Signing
|
||
ADR-005 Revocation Semantics
|
||
ADR-006 Posture Input Contract with King's Guard
|
||
ADR-007 Credential Binding Contract with Secrets Engine
|
||
ADR-008 Audit Evidence Model
|
||
ADR-009 Assistant Session Binding
|
||
ADR-010 Autonomous Mandate Model
|
||
ADR-011 Multi-Tenant Isolation Rules
|
||
ADR-012 Failure / Fail-Closed Semantics
|
||
ADR-013 MCP Authorization Integration
|
||
ADR-014 Policy Self-Modification Protection
|
||
```
|
||
|
||
---
|
||
|
||
# 41. Prototype Milestones
|
||
|
||
## M0 — Executable Skeleton
|
||
|
||
Deliver:
|
||
|
||
- service skeleton;
|
||
- `/authorize`;
|
||
- canonical request schema;
|
||
- canonical decision schema;
|
||
- static policy;
|
||
- structured audit.
|
||
|
||
Success:
|
||
|
||
```text
|
||
request → deterministic GRANT/DENY
|
||
```
|
||
|
||
## M1 — Identity and Tenant Context
|
||
|
||
Deliver:
|
||
|
||
- principal;
|
||
- actor;
|
||
- runtime identity;
|
||
- tenant;
|
||
- assistant/autonomous mode.
|
||
|
||
Success:
|
||
|
||
```text
|
||
same actor receives different decisions depending on principal / tenant / mode
|
||
```
|
||
|
||
## M2 — Mandates and Authority Ceilings
|
||
|
||
Deliver:
|
||
|
||
- autonomous mandate model;
|
||
- authority ceiling;
|
||
- delegation attenuation.
|
||
|
||
Success:
|
||
|
||
```text
|
||
agent cannot exceed mandate
|
||
```
|
||
|
||
## M3 — Grant Lifecycle
|
||
|
||
Deliver:
|
||
|
||
- grant issuance;
|
||
- TTL;
|
||
- introspection;
|
||
- revocation;
|
||
- actor suspension.
|
||
|
||
Success:
|
||
|
||
```text
|
||
granted authority can be independently revoked
|
||
```
|
||
|
||
## M4 — Secrets Binding
|
||
|
||
Deliver:
|
||
|
||
- Secrets Engine integration;
|
||
- OpenBao dynamic database credential scenario.
|
||
|
||
Success:
|
||
|
||
```text
|
||
authority → ephemeral credential → expiry/revocation
|
||
```
|
||
|
||
## M5 — Agent Assistant Scenario
|
||
|
||
Deliver:
|
||
|
||
- human principal;
|
||
- agent actor;
|
||
- session binding;
|
||
- disconnect revocation.
|
||
|
||
Success:
|
||
|
||
```text
|
||
human-supervised authority stops with supervision
|
||
```
|
||
|
||
## M6 — Autonomous Release Scenario
|
||
|
||
Deliver:
|
||
|
||
- workload identity;
|
||
- autonomous mandate;
|
||
- deployment grant;
|
||
- quota;
|
||
- runtime budget.
|
||
|
||
Success:
|
||
|
||
```text
|
||
scheduled agent deploys but cannot alter IAM/policy
|
||
```
|
||
|
||
## M7 — King's Guard Posture
|
||
|
||
Deliver:
|
||
|
||
- posture API;
|
||
- deterministic posture restrictions;
|
||
- circuit breaker.
|
||
|
||
Success:
|
||
|
||
```text
|
||
adaptive risk signal reduces authority without granting privilege
|
||
```
|
||
|
||
## M8 — Adversarial Security Suite
|
||
|
||
Deliver:
|
||
|
||
- self-escalation;
|
||
- cross-tenant;
|
||
- token misuse;
|
||
- approval replay;
|
||
- audit outage;
|
||
- circuit breaker tests.
|
||
|
||
Success:
|
||
|
||
```text
|
||
incorrect/malicious agent behavior does not cross configured authority boundaries
|
||
```
|
||
|
||
---
|
||
|
||
# 42. Longer-Term Evolution
|
||
|
||
Possible later capabilities:
|
||
|
||
- signed portable grants;
|
||
- token exchange;
|
||
- cross-domain delegation;
|
||
- policy simulation;
|
||
- policy impact analysis;
|
||
- temporal authorization;
|
||
- graph-based delegation chains;
|
||
- distributed revocation;
|
||
- tenant-local policy extensions;
|
||
- confidential-computing attestation;
|
||
- agent reputation/posture inputs;
|
||
- capability-based authorization;
|
||
- formal verification of hard invariants;
|
||
- high-assurance decision replay;
|
||
- multi-region authority plane.
|
||
|
||
These should only be introduced if they preserve the small and explicit responsibility boundary.
|
||
|
||
---
|
||
|
||
# 43. Architectural Invariants
|
||
|
||
Gate House should preserve the following invariants throughout implementation.
|
||
|
||
### A-01
|
||
|
||
No LLM or statistical component is the final source of privilege.
|
||
|
||
### A-02
|
||
|
||
Every privileged action resolves to an explicit actor.
|
||
|
||
### A-03
|
||
|
||
Autonomous actions resolve to an explicit mandate.
|
||
|
||
### A-04
|
||
|
||
Delegated authority cannot silently exceed parent authority.
|
||
|
||
### A-05
|
||
|
||
Tenant context is explicit for protected actions.
|
||
|
||
### A-06
|
||
|
||
Production mutations require deterministic policy evaluation.
|
||
|
||
### A-07
|
||
|
||
A grant cannot outlive its configured TTL.
|
||
|
||
### A-08
|
||
|
||
Revocation does not depend on the affected agent cooperating.
|
||
|
||
### A-09
|
||
|
||
Adaptive posture may restrict authority but cannot probabilistically create new authority.
|
||
|
||
### A-10
|
||
|
||
Credentials are not treated as the source of authority.
|
||
|
||
### A-11
|
||
|
||
Agents cannot normally change the controls that define their own authority ceiling.
|
||
|
||
### A-12
|
||
|
||
Audit evidence is independent of the actor being audited.
|
||
|
||
### A-13
|
||
|
||
Failure of security-critical dependencies does not silently expand authority.
|
||
|
||
### A-14
|
||
|
||
Assistant sessions do not silently become autonomous sessions.
|
||
|
||
### A-15
|
||
|
||
If every agent behaves incorrectly, deterministic authority boundaries still hold.
|
||
|
||
---
|
||
|
||
# 44. Blueprint Summary
|
||
|
||
Gate House should be implemented as a small, composable, deterministic authority control plane.
|
||
|
||
Its core path is:
|
||
|
||
```text
|
||
authenticated context
|
||
↓
|
||
principal + actor + runtime
|
||
↓
|
||
tenant + environment
|
||
↓
|
||
mandate / delegation
|
||
↓
|
||
action + resource + parameters
|
||
↓
|
||
authority ceiling
|
||
↓
|
||
deterministic policy
|
||
↓
|
||
posture restrictions
|
||
↓
|
||
approval
|
||
↓
|
||
change-dynamics limits
|
||
↓
|
||
GRANT / DENY
|
||
↓
|
||
credential binding
|
||
↓
|
||
execution
|
||
↓
|
||
audit / evidence
|
||
```
|
||
|
||
The architecture should make one property easy to demonstrate:
|
||
|
||
> **An intelligent system may request anything. It can only cause the protected system to do what deterministic authority policy permits.**
|
||
|
||
That is the architectural essence of Gate House.
|