Skip to main content

Infrastructure credentials

The default configuration ships with weak, well-known passwords for PostgreSQL, MinIO, and Redis. Replace them with strong, unique values before exposing Tracecat to production traffic.
For Redis, you also need to pass the password to the container. Add a command override in your docker-compose.yml:
In production, consider replacing self-hosted PostgreSQL and Redis with managed services (e.g., Amazon RDS, ElastiCache) that handle encryption at rest, automated backups, and credential rotation.

Platform secrets

Tracecat requires four cryptographic secrets, plus an optional keyring if you enable Temporal payload encryption.

Where to store them

Keep these out of your application configuration and out of version control. Use the mechanism your platform already provides. On Kubernetes, prefer External Secrets Operator over a hand-created Secret. Your secret manager stays the source of truth, values are re-synced rather than copied, and no plaintext passes through a shell history or a manifest. Reserve chart-managed secret templates for pipelines that encrypt values at rest with Sealed Secrets or SOPS.

Rotation

Rotation support differs by secret, and the differences matter before you plan a rotation window.
TRACECAT__DB_ENCRYPTION_KEY cannot be rotatedTracecat encrypts under a single Fernet key with no re-encryption path. Changing it makes every stored credential unrecoverable, and there is no migration to re-key existing rows. Treat this key as permanent for the life of the deployment: back it up, and control access to it at least as tightly as the credentials it encrypts.

Isolation

Tracecat executes user-defined Python scripts, custom actions, and agents inside the executor service. You choose between nsjail isolation and no isolation. Defaults differ by deployment target. For production, enable nsjail — a process isolation tool from Google that enforces:
  • Filesystem isolation — scripts can only access their job directory and explicitly mounted paths. The host filesystem is not visible.
  • Resource limits — CPU time, memory, file size, and process count are capped per execution. A runaway script cannot starve the host.
  • User namespace separation — scripts run as unprivileged users even when the container runs as root.
  • Network access — network is allowed (scripts need to reach databases, APIs, and S3) but constrained to the container’s network namespace.
To enable nsjail, set the following in your .env:
nsjail requires:
  • Linux with kernel 4.6+
  • Docker privileged mode or CAP_SYS_ADMIN capability on the executor container
  • The nsjail binary and sandbox rootfs (included in Tracecat images)
nsjail is not supported on macOS or Windows. Use the direct backend on those platforms.

No isolation

Without nsjail, scripts, custom actions, and agents run as regular subprocesses in the executor. This is a supported production configuration when you trust everything that runs. That means your own workflow and custom registry code, the third-party dependencies those actions install, and the agents, tools, and MCP servers you enable. Review that code and pin those dependencies as you would any code with direct access to your systems. Choose nsjail instead when you run code you have not reviewed, such as untrusted third-party packages or agents that generate and execute their own code.

Choosing a backend

Authentication

Docker Compose deployments default to basic email/password authentication. For production, configure OIDC or SAML SSO.

TLS

Never run production traffic over plain HTTP. See TLS and certificates for Caddy-based automatic TLS setup, custom certificates, and trusting internal CAs.
  • See Architecture for the platform and AI agent trust model.