Secrets, Secured: How Flomation Handles Your Credentials

Andy Esser
Apr 13, 2026

Secrets, Secured: How Flomation Handles Your Credentials

Part 6 of our Workflows Unleashed series. This week: encryption, environments, and why "it's probably fine" isn't a security policy.

Your automation platform stores your database passwords. Your API keys. Your cloud credentials. Your SMTP login. Your webhook signing secrets. It has access to everything your flows need to talk to — which means it has access to everything an attacker would want.

How seriously does your automation tool take that responsibility?

The Problem With Most Platforms

Most automation tools store secrets in one of three ways:

  1. Plain text in a database. The secret is "protected" by the application's access controls, but anyone with database access (or a SQL injection vulnerability) can read every credential in the system.
  2. Base64 encoded. Looks encrypted. Isn't. A single command decodes it.
  3. Encrypted with a shared key. Better, but the encryption key is often stored in the same database, the same config file, or the same environment variable set — which means compromising one component exposes everything.

How Flomation Does It

PGP Encryption at Rest

Every secret in Flomation is encrypted with PGP before it touches the database. The encryption key is configured separately from the database credentials, so compromising the database alone doesn't expose secrets.

Decryption Only in Memory

Secrets are decrypted at the moment of execution — in the runner's process memory, for the duration of a single action. The cleartext value exists for the milliseconds it takes to make the API call, then it's gone. It's never written to disk, never cached, and never held longer than necessary.

Never in Logs

The executor's variable substitution system resolves ${secrets.API_KEY} at the last possible moment and never logs the resolved value. Execution history shows that a secret was used — ${secrets.API_KEY} — but never what it contained.

The editor UI shows that a secret has been set, but not its value. Once saved, the only way to "see" a secret is to update it with a new value. There's no "reveal" button, no export, no "copy to clipboard."

Never in Execution History

When a flow completes, its execution record includes the inputs and outputs of every node. Secret values are redacted before storage. You can inspect exactly what happened during a run without ever seeing a credential.

Environments: The Right Credential for the Right Context

Secrets don't exist in isolation. They exist in environments — named collections of variables and secrets scoped to a context.

A typical setup:

  • Development — local database, test API keys, verbose logging
  • Staging — staging database, sandbox API keys, production-like config
  • Production — production database, live API keys, minimal logging

A flow that references ${secrets.DATABASE_PASSWORD} gets the right password for the environment it's running in. No conditionals. No feature flags. No "oops, that was the production key in the staging environment."

Environment Inheritance

Environments can inherit from a parent. Define shared settings once in a base environment, then override only what changes per context. The database host might differ between staging and production, but the application timeout and retry settings stay the same.

Environment-Scoped Execution

When you trigger a flow, you select the environment. The executor resolves all variable and secret references against that environment's values. The same flow binary, different configuration, different results — exactly like deploying the same application to different servers.

Access Control

Role-based access control determines who can do what:

  • View a flow's structure and execution history
  • Edit a flow's nodes and connections
  • Execute a flow in a specific environment
  • Manage secrets and variables within an environment

An operator who can trigger flows in production doesn't necessarily see the secrets those flows use. A developer who can edit flows in staging doesn't necessarily have access to production environments.

Audit

Every execution is recorded: who triggered it, which environment, which flow revision, what inputs, what outputs (with secrets redacted), and what the result was. When something goes wrong — or when a compliance audit asks "who accessed what and when" — the answer is in the audit trail.

Next Week

We cover deployment flexibility — SaaS, on-premise, hybrid — and why the architecture that enables it also enables horizontal scaling.

www.flomation.co — free to start, no credit card.