Rivano · Security
Security
Last updated: April 27, 2026
## Compliance status
| Framework | Rivano AI status |
|---|---|
| SOC 2 Type II | In progress. Update this page when an auditor is engaged. |
| HIPAA | HIPAA-ready architecture. BAA available on Enterprise tier. |
| GDPR | Sub-processor list and DPA published. EU SCCs incorporated. |
| CCPA | Privacy rights honored per [Privacy Policy](/legal/privacy). |
| ISO 27001 | Not pursued at this writing. |
For full processor obligations, see [/legal/dpa](/legal/dpa). For the current sub-processor list, see [/legal/sub-processors](/legal/sub-processors).
## Agent-protocol governance
Rivano governs both **MCP** and **A2A** agent traffic. The same gateway process enforces:
| Surface | What it enforces |
|---|---|
| `POST /mcp/:server` | Tool allowlist + RBAC, tool input schema pin, rate limits, PII + injection detection on request |
| `POST /a2a/:agent` | Skill allowlist + RBAC, skill schema + agent-card pin, rate limits, PII + injection detection on request |
| Dashboard overlay | Approval state (`pending` / `approved` / `rejected`) and per-skill role assignments — fetched on a 60s policy pull, applied at gateway request time |
| Audit feed | Every allow/deny lands in `mcp_decisions` or `a2a_decisions` and surfaces in the dashboard within 5 seconds |
Bulk approval is capped at 100 ids per call to prevent accidental cross-tenant approvals. The control plane refuses bulk DELETE without at least one filter parameter.
For the full deny-code reference, see [/docs/gateway/mcp](/docs/gateway/mcp#deny-responses) and [/docs/gateway/a2a](/docs/gateway/a2a#deny-responses).
## Encryption
| At rest | In transit |
|---|---|
| AES-256 in Cloud SQL (Google-managed keys; Customer-Managed Encryption Keys available on Enterprise tier) | TLS 1.2+ enforced gateway-side |
| Customer-supplied tokens stored under a separate `PROVIDER_ENCRYPTION_KEY` (HKDF, never JWT_SECRET reuse) | mTLS optional for the self-hosted gateway — see [/docs/gateway/mtls](/docs/gateway/mtls) |
| Backups in `us-east1`, same encryption posture | ACME-managed certificate auto-renewal — see [/docs/gateway/https](/docs/gateway/https) |
## Multi-tenant isolation
All multi-tenant tables enforce `FORCE ROW LEVEL SECURITY`. The `app.current_tenant_id` GUC is set per database connection and every read or write is filtered against it. The control plane refuses to run a write outside a `withTenant(pool, tenantId, fn)` boundary.
## Authentication
- **Dashboard sign-in:** OIDC via Zitadel. Sessions are httpOnly + SameSite=Strict cookies. CSRF tokens validated on mutating requests.
- **Programmatic access:** API keys generated in the dashboard, scoped per project. Keys can be rotated at any time.
- **Self-hosted gateway:** API keys for upstream LLM providers stored in `rivano.yaml` or as `${ENV_VAR}` references. Optional mTLS to require client certificates from agent callers.
## Vulnerability disclosure
Please email **[email protected]** with vulnerabilities. We acknowledge within 24 hours and aim to publish a fix within 90 days, depending on severity. Coordinated disclosure encouraged.
## Incident response
For BAA-relevant incidents under HIPAA §164.308(a)(6), Rivano maintains an internal incident response runbook covering identification, containment, notification, recovery, and post-incident review. The runbook is available to Enterprise customers under NDA — request via [email protected]. Customer-impacting incidents are notified within 72 hours of confirmation.
## Contact
**Security disclosures:** [email protected]
**Sales / compliance docs request:** [email protected]