Authentication
Google Workspace OAuth with domain restrictions. Users sign in with their corporate accounts.
Rack Gateway is an open-source authentication and authorization proxy for self-hosted Convox racks. It adds enterprise-grade security controls to your infrastructure without changing how you use Convox.
When you self-host Convox racks without Convox Console, your rack has a primary API token that grants unrestricted access to everything. This token is typically stored in your Terraform state file.
While Convox does support creating individual user credentials with limited permissions, the primary token remains the main security concern:
Rack Gateway sits between your users and the Convox rack, providing:
Authentication
Google Workspace OAuth with domain restrictions. Users sign in with their corporate accounts.
Authorization
Role-based access control with four levels: viewer, ops, deployer, and admin.
Audit Logging
Every request recorded before it acts, with user attribution, env value redaction, and hourly S3 WORM anchors.
Multi-Factor Auth
TOTP, WebAuthn (security keys), and YubiKey support with step-up authentication.
Rack Gateway is a proxy for the Convox API:
rack-gateway apps (or convox apps with RACK_URL pointing at the gateway)The real rack token never leaves the gateway. Users only have session tokens that the gateway validates.
Users interact with Rack Gateway through the rack-gateway CLI:
# Login (opens browser for OAuth)rack-gateway login staging https://gateway.example.com
# Run Convox commands through the gatewayrack-gateway appsrack-gateway deployrack-gateway logs -a myapp
# Set up a convenient aliasalias cg="rack-gateway"cg appscg deployThe CLI:
convox CLI)This design provides:
Production Environment├── Convox Rack (port 5443)└── Rack Gateway (port 8447) ──▶ proxies to Rack
Staging Environment├── Convox Rack (port 5443)└── Rack Gateway (port 8447) ──▶ proxies to RackDevelopers use the rack-gateway CLI to switch between gateways, or configure separate RACK_URL values for each environment.
Built-in roles provide granular control:
| Role | Capabilities |
|---|---|
| Viewer | Read-only: list apps, view logs, view builds, rack status |
| Ops | Viewer + restart apps, manage processes, view env |
| Deployer | Ops + create builds, promote releases, update env |
| Admin | Full access including user management |
| CI/CD | Automation tokens only (not assignable to human users) |
Every action is logged with:
[REDACTED] unless an admin lists them as visibleEvents are stored in Postgres in an append-only, hash-chained table, anchored hourly to S3 Object Lock (WORM) storage, and also written to stdout as JSON for CloudWatch or your SIEM.
Protect sensitive operations with MFA:
Require manual approval for CI/CD deployments:
rack-gateway deploy-approval; Slack posts each request with a linkRack Gateway was designed with SOC 2 compliance in mind:
See SOC 2 Compliance for detailed mapping.
Rack Gateway focuses on authentication and authorization. It doesn’t provide:
For more advanced features, consider Convox Console.