Convoship is built for teams whose security review never gets skipped. Every workspace ships with the controls auditors expect — no add-on tier, no add-on price. This page summarises the controls, the implementation, and where to find them in the studio.
Identity & access
- Workspace roles: owner, admin, developer, editor, viewer. Capability checks are enforced server-side, not just hidden in the UI.
- MFA is supported per-user via TOTP. Owners can require MFA for sensitive actions.
- Refresh tokens rotate on every use and are revoked on logout; the access cookie is HttpOnly, Secure, SameSite=Lax.
- Brute-force protection: configurable failed-login window + lockout duration.
- A workspace-wide "revoke all sessions" action signs every member out of every device, useful after a credential leak or departing employee.
Encryption & secrets
Tool nodes reference secrets by name; the raw value never enters prompts, exports, or logs. Today secrets are encrypted at rest with Fernet (workspace-scoped key); a KMS-backed envelope is the upgrade path and is enabled by setting CONVOSHIP_KMS_KEY_ID.
- TLS terminates at the load balancer using an ACM certificate; in-VPC traffic to ECS and RDS remains private.
- Database connections use SSL (sslmode=require) from the application container.
- Backups are encrypted at rest by RDS; final snapshots are taken before any infrastructure destroy.
Workspace isolation
Postgres Row-Level Security enforces workspace_id scoping on every workspace-scoped table. The application role (convoship_app) is created with NOBYPASSRLS, so a SQL bug or LLM-generated query cannot leak rows across workspaces — the isolation is structural, not just policy-enforced.
Defense in depth
The same workspace boundary is enforced in three places — the route's auth dependency, the session-scoped Postgres GUC, and the RLS policy itself. A failure in any one layer cannot cause a leak.
Audit trail
Every mutation lands in an append-only audit log: agent edits, deployments, secret reads, member role changes, workflow publishes, and channel changes. Filter by actor, action, target, and time range. The log is exposed both in the studio (Workspace → Audit log) and via the API for SOC 2 evidence collection.
Usage metering & budgets
- Per-AI-agent daily LLM spend cap, enforced at request time. The agent halts before exceeding the limit.
- Per-workspace conversation counter (30-day rolling) surfaced on the dashboard and via /v1/workspaces/usage.
- Prometheus metrics: sessions_started_total, turns_total, llm_tokens_total, tool_invocations_total — scraped by /metrics behind a bearer token.
- Rate limits on all auth and public-runtime endpoints (slowapi backed by Redis).
Code execution sandbox
Python nodes run with PYTHON_NODE_TIMEOUT_SECONDS (default 2s) and session-scoped variables only. No filesystem, no outbound network unless explicitly proxied through a tool node. The sandbox is the same isolation primitive used to run extraction's auto-repair pass — battle-tested.
Responsible disclosure
Found a vulnerability? Email security@convoship.org with a description and reproduction steps. We acknowledge reports within one business day and credit reporters in release notes when permitted.