Skip to content

Shared responsibility & capability maturity

This is the single most important page for an architecture- or security-review board. For every capability it states two things plainly: who is responsible for it (Opsta vs. you), and its maturity today — so you can size the work and the risk before you sign off. We would rather tell you a control is opt-in or on the roadmap than imply a posture the product doesn't have yet.

Who this is for

Platform, security, and architecture-review teams evaluating Opsta AI Gateway for production. Read this with the Production-readiness checklist — every "you provide" item here has a verifiable counterpart there.

How to read the maturity column

MaturityMeaning
ShippedOn by default and working.
Shipped (toggle)Built and supported; you turn it on for your topology (e.g. HA).
Opt-inBuilt, but OFF by default — you must enable it (and accept any stated trade-off).
RoadmapNot built yet. A documented interim control and/or recipe may exist; the native capability is planned.
You provideThe product relies on a control your platform supplies (the cluster, storage, KMS, IdP, paging).

The product is delivered as a full appliance: the whole bundled stack — Higress, PostgreSQL (CloudNativePG), Redis, Keycloak, the LGTM observability stack, cert-manager, and our control-plane/console — is installed and versioned as one tested unit. You bring a conformant Kubernetes cluster, storage, and DNS; optionally an external identity provider and an object store.

The matrix

CapabilityMaturityOpsta providesYou provide
Multi-LLM routing, per-org/project budgets, guardrails, audit log, RBACShippedthe productconfiguration + policy
Per-org observability tenant isolation (metrics/logs)Shippedtenant-scoped LGTM + enforcing proxy
High availability — in-cluster replication, PodDisruptionBudgets, anti-affinity, clustered DB/RedisShipped (toggle)the chart (global.highAvailability: true)a ≥3-node cluster
TLS at ingress (Let's Encrypt or your own wildcard cert)Shipped (toggle)cert-manager + issuersDNS + a reachable ACME path, or a cert+key
Database backup & restoreOpt-in — OFF by defaultCloudNativePG backup hooks + a documented recipean object store, enable it, and run a restore drill
Point-in-time recovery (continuous WAL archiving)Roadmapa CNPG WAL recipe (interim)
Secrets encrypted at restYou providesecrets are kept out of git and the database; written as standard Kubernetes Secretsetcd encryption, sealed-secrets, or an external-secrets/KMS integration
PII masking on prompts/completionsOpt-in — OFF by defaultthe masking pluginenable it and accept the current streaming trade-off (below)
Guardrail-block content retentionOpt-in postureguardrail blockingdecide retention / redaction of the stored offending-content excerpt (below)
Cross-site / region DR failoverRoadmapsingle-site, restore-based DRa DR site is out of scope today
Image signing / SBOM / provenanceRoadmapimage digest pinning (interim)scan-on-pull / verify in your pipeline (interim)
Identity de-provisioning (SCIM)RoadmapJIT provisioning + manual de-provision in Keycloakan offboarding runbook
Paging / alerting on the golden signalsYou provideGrafana + recommended alert ruleswire alerts to your pager (PagerDuty/Opsgenie/etc.)
The Kubernetes platform, storage classes, network CNIYou providetested against a conformant matrixa conformant cluster + RWO storage (+ object store for HA)

The honesty notes (verified against the shipped code)

These are the items a review board will probe. Each states the reality, why, and what you do about it.

Backups are OFF by default

Database backups (postgres.backup.enabled) ship off so the product installs without forcing you to provision an object store first. For production you must turn them on, point them at an S3-compatible bucket, and perform a restore drill — see Backup & DR. The production-readiness checklist gates on this. The HA profile is moving to default backups on, but it still requires you to supply the bucket.

Point-in-time recovery is not wired yet

Backups today are periodic snapshots, not continuous WAL archiving — so the recovery point is your backup interval, not "to the second." Continuous PITR is on the roadmap; a CNPG WAL-archive recipe is provided as an interim path if you need a tighter RPO.

Secrets are at rest as Kubernetes Secrets

Provider API keys and IdP/MCP client secrets are never stored in the database or in git — they live only as Kubernetes Secrets. Those are base64-encoded, not encrypted at rest unless your platform enables it. You must enable a secret-at-rest control: etcd encryption, sealed-secrets, or an external-secrets/KMS integration. Native external-secrets/Vault support is on the roadmap.

PII masking is opt-in

The masking plugin is off by default because, with the current upstream, it can truncate streaming tool-call responses. Enable it when your data-handling policy requires masking and you've accepted the streaming trade-off. See Data sovereignty.

Guardrail blocks store an excerpt of the offending content

When a guardrail blocks a request, a short excerpt of the offending content is recorded for audit — which can include the very PII or secret-like text the guardrail caught. Treat this as sensitive in your data inventory; you can set its retention and disable/redact the excerpt.

DR is single-site, restore-based

global.highAvailability replicates components within one cluster — it survives node loss, not site loss. There is no second-site standby or cross-region failover. The honest headline: survives node loss within the cluster (HA replicas); survives cluster/site loss only by restore-from-backup onto new infrastructure. Multi-cluster DR is out of scope today.

The supply chain is not signed yet

Images are built and promoted by retag (dev → uat → vX.Y.Z); there are no cosign signatures, no published SBOM, and no SLSA provenance yet. The interim control is image digest pinning plus your own scan-on-pull. Signing, SBOM, and provenance are on the roadmap.

Identity is JIT-provisioned; de-provisioning is manual

Users are created on their first brokered login (just-in-time). There is no SCIM auto-de-provision on HR offboard yet — de-provisioning is a manual step in Keycloak today. Own an offboarding runbook; SCIM is on the roadmap.

Upgrade reversibility

Control-plane database migrations are forward-only at runtime. Down-migrations exist for manual rollback but are not applied automatically, so rolling the control-plane image back across a schema change is not automatic. Always back up before an upgrade; see Upgrades for the rollback procedure.

Enterprise AI governance, on infrastructure you own.