Security & trust

Governance is structural, not a checklist.

SkyForge inherits the platform's trust model rather than reinventing it. Tenancy, admission, the audit chain and secret custody are platform-wide guarantees every one of the 60 services shares — SkyForge is one of them.

Trust pillars

Four guarantees, inherited from the platform.

Secure admission by default

SS-04 · ADR-0060

No image serves without passing supply-chain admission inside the deploy saga: a Cosign signature, an SBOM, and a vulnerability scan. An unadmitted image halts the saga 403 with the build marked refused — and the refusal is recorded as evidence, not silently dropped. The quality-gate floor (signed-image requirement, critical/high vuln ceilings, test-pass floor) is evaluated on every run.

  • Signature + SBOM + scan required at the admit step
  • A failing image halts the saga with a reason
  • Refusals are first-class audit evidence
  • Gate defaults are strict: 100% test pass, 0 critical vulns, signed image

Structural tenancy

SS-01 · ADR-0019

tenant_id is a first-class, verified request concern resolved once at the edge. A verified SS-01 token carries the tenant; an in-mesh X-Tenant-Id header is trusted only over mTLS, and when both are present they must agree — a mismatch is a confused-deputy attempt, rejected 403. All persistence is tenant-scoped, so an id is unique only within a tenant and cross-tenant reads are structurally impossible, not merely filtered.

  • Verified token (strong path) or mTLS mesh header — never a forgeable client header
  • Token/header disagreement → 403 (confused-deputy closed)
  • Storage scoped per tenant: cross-tenant read returns zero rows
  • Automated cross-tenant pen test runs in CI

Tamper-evident audit chain

ADR-0014 · ADR-0031

Every audited action appends to a hash chain: each entry carries the previous entry's hash, so altering or dropping any earlier entry breaks the chain from that point on and is detectable by re-walking it. In production the digest is a Vault-Transit signature, so the chain is cryptographically attributable to the platform's signing key — held in SS-05, never in the service. Entries are tenant-scoped and retained for seven years.

  • Append-only hash chain; tampering breaks the links
  • Vault-Transit signed — signing key never leaves SS-05
  • Every deploy, rollback, promotion, cron and scale change is recorded
  • 7-year retention; compliance evidence is a byproduct of shipping

Sovereign runners & exit

ADR-0070 · ADR-0055

Run the build plane on hardware you control: register self-hosted linux runners and drain them on your terms, with an in-cluster fallback so a build never fails for lack of a runner. When you need to leave, GET /apps/{app}/export emits the app's complete portable desired state — definition, revisions, rollout, addon refs, crons, scale and pipeline — to re-target a BYOC or partner cluster. Never credentials, never operational history you can't take with you.

  • Self-hosted linux runners; hermetic policy follows the workload
  • In-cluster build fallback — no Linux fail-safe gap
  • Portable desired-state export (secret refs only, never material)
  • Dedicated / sovereign regions on Enterprise

Residency & isolation

Data residency & isolation

SkyForge runs on an mTLS service mesh with hierarchical tenancy. Enterprise tenants can pin workloads to dedicated or sovereign regions; secrets stay in SS-05 Vault and are referenced, never embedded; database addons are SS-02 claims whose credentials live only in Vault. The offline reference cores (HS256 tokens, SHA-256 audit) are swapped for production signers (Authentik JWKS, Vault Transit) behind the same interfaces without touching call sites.

SkyForge is one of 60 governed services on the StratoGroup sovereign platform. The tenancy, audit-chain, admission and secret-custody guarantees above are platform-wide — every service inherits them from platform/server rather than re-implementing (and mis-implementing) them.