Credential architecture

Gateman vs HashiCorp Vault: Beyond Secrets Management

Compare Vault’s broad secrets and identity platform with Gateman’s environment-aware retrieval, selected provider operations, account relays, and automated setup.

Managing a provider credential and completing the work it enables are different jobs. A secrets platform can help a workload authenticate and retrieve values, while the application team still builds provider integrations and administers service accounts.

HashiCorp Vault is a broad platform for secrets, identity, and credential lifecycle. Gateman overlaps in authorized secret retrieval, then adds environment-aware application secrets, selected mediated provider operations, AWS and Cloudflare administration relays, and automated setup for supported infrastructure. That can reduce not only credential handling, but also the integration and provider-configuration work developers would otherwise build and repeat.

Three separate Gateman workflows: an application retrieves an authorized environment-specific secret; Gateman executes a supported provider operation using its configured credential; and an authorized app or agent calls a supported AWS or Cloudflare administration API through Gateman.
Gateman has three distinct models: return an authorized value, execute a supported operation, or relay an authorized provider administration request.

Shared ground: retrieving authorized secrets

Both products can make stored values available to authorized applications. Vault supports secret engines such as versioned key/value storage, workload authentication, and path-based policies. Teams can organize development and production values through their Vault paths, mounts, namespaces, and application configuration. Vault also supports dynamic credentials and leases; its AWS secrets engine, for example, can issue time-limited credentials that Vault revokes when the lease expires.

Gateman's secrets:read capability provides app-scoped retrieval through authenticated POST /secrets/get. A custom secret has one logical name and independently configured production and test values: production selects the production value, while staging and development share the test value. There is no fallback if the selected value is missing. The application requests the same logical name and receives the authorized plaintext, which it then uses itself. This is centralized retrieval, not credential isolation from the application.

Database passwords have a separate path. With db:read, an app requests one named password through POST /db/get; the endpoint has no environment selector. If an application needs separate database passwords, it uses different names and maps them locally. Gateman does not store the database host, user, database name, or connection string. Both retrieval routes are app-scoped and require their distinct application capabilities.

This gives developers a consistent place to configure relevant values and a repeatable retrieval pattern without scattering each value across deployment settings. Vault remains a strong fit when a team needs its broader workload identity, policy, dynamic-secret, leasing, and lifecycle features. For static values, both can support environment-specific organization; Vault's path and policy model is more general, while Gateman exposes a defined environment selector for custom application secrets.

When Gateman performs the provider operation

With a retrieved credential, the application calls the provider. With a mediated Gateman capability, the app authenticates to Gateman and asks it to perform a supported operation using the provider credential configured for that app. The provider key is not returned to the application for that operation.

Transactional email is a practical example. With Vault-backed SES access, a workload authenticates to Vault, obtains the authorized AWS credential, and uses AWS request handling in its application. The team also arranges a safe nonproduction transport or testing setup. With Gateman, the developer enables email.send, configures the provider, and uses an official Gateman client with Gateman's documented message shape. Gateman applies its configured provider credential: development and staging messages are captured in Gateman's mailbox, while production messages are sent through the configured provider.

The same production-intended send implementation works across those environments. The developer avoids adding AWS credential delivery, SES authentication and request handling, and a separate mock transport just for nonproduction email. The message contract is Gateman's (to, subject, and text or html), not an unchanged AWS SES SDK payload. The app still decides when to send and who should receive the message.

Other mediated capabilities preserve provider-specific contracts. stripe:use accepts native Stripe methods, paths, and bodies through /stripe/request and selects the configured credential for the declared environment. s3:use creates presigned operations; the application or browser transfers object bytes directly to S3. These are selected operations with their own capability boundaries, not a universal proxy for every request to every provider.

When Gateman helps administer provider accounts

Gateman also has distinct API relays for AWS and Cloudflare administration. An application with aws:use can send a native AWS HTTP request to /aws/request; Gateman signs it with SigV4 using the app's protected relay credential. For example, an authorized app can call IAM's native ListRoles operation to inspect roles. The caller still constructs the provider request and interprets AWS's response. AWS IAM decides whether the configured identity may perform that action.

With cloudflare:use, an app sends a bounded native request to /cloudflare/request; Gateman adds the protected bearer token and forwards it to Cloudflare API v4. Cloudflare's token permissions remain authoritative for the account, zone, and operation.

The relays keep provider credentials out of application and coding-agent configuration. The developer manages each provider connection in Gateman and can grant or withdraw the application's relay capability in the console. Gateman does not split cloudflare:use into read and write scopes: it is one application-level permission to invoke the relay. Cloudflare token permissions still decide which API actions can succeed. The application authenticates each request to Gateman, and the current capability scope is checked on every request.

From read-first investigation to an authorized Cloudflare change

During security hardening of an existing web application, a developer needed to change a Cloudflare setting related to JavaScript functionality. Cloudflare's documentation did not make clear whether the setting was available on a Free-plan zone, and the developer could not find an equivalent control in the dashboard.

The developer let Codex investigate the relevant zone through Gateman's Cloudflare relay, starting with read access. Codex identified the relevant API operation. After reviewing the proposed change, the developer explicitly authorized a write, and Codex changed the setting successfully. The coding agent never received the underlying Cloudflare API token.

The developer controlled when Codex could proceed, while Gateman's app capability controlled access to the relay and the stored Cloudflare token's permissions determined which API requests Cloudflare would authorize. Once the work was complete, the developer could disable the Cloudflare relay in Gateman without changing the provider token.

For coding-agent setup, the console-generated bootstrap prompt points the agent to an official PHP, Node.js, Python, or Go client. Authenticated /client/get requires its own client:read scope and returns current capability context; bootstrap alone does not grant relay access. The app credentials used to call Gateman are also separate from the Cloudflare token stored there.

Provision infrastructure, not just integrations

For SES, Gateman Premium can automate a complete supported setup after the customer supplies temporary AWS setup access, a restricted Cloudflare DNS token, a region, and a domain. Gateman configures permission-bounded IAM control and runtime identities, the SES domain identity and DKIM, DNS records, an SES configuration set, SNS event tracking, and the related suppression integration. Completed provisioning has taken as little as three minutes, compared with roughly 20–30 minutes for comparable manual AWS and DNS configuration. AWS production-sending approval is a separate AWS process.

This provisioning workflow is separate from both secret retrieval and runtime email sending. Vault can manage credentials and identities used by infrastructure workflows, but it does not provide this Gateman-specific SES setup workflow out of the box.

Choose the workflow that matches the work

Developer needHashiCorp VaultGateman
Retrieve application secretsAuthenticated secret engines and policies; values can be organized by paths and namespacesApp-scoped secrets:read; custom values select production or shared staging/development slots
Retrieve database passwordsDatabase secrets engines can issue credentials and leases for supported databasesdb:read retrieves one named stored password; connection details remain application-owned
Dynamic credentials and leasesBroad secrets-engine and lease lifecycle, including supported dynamic AWS credentialsNot a Vault-style dynamic secrets and lease system
Workload identity and access policyBroad authentication methods, identity, and path-based policy controlsApp identity with explicit per-capability scopes
Execute provider operations without returning provider keysA team can build an operation broker around VaultSelected built-in operations, including email, Stripe requests, and S3 presigning
Administer provider configuration through APIsPossible through Vault-issued credentials and team-built integrationsAWS and Cloudflare request relays with app scopes and provider-side permissions
Provision supported provider infrastructurePossible with team automation and authorized credentialsAutomated Premium SES and related DNS, identity, and tracking setup
Application clients and agent workflowVault clients and integrations across its platformOfficial PHP, Node.js, Python, and Go clients; app-specific capability discovery through /client/get

Vault is the better fit when the central need is broad secrets and identity management, dynamic credential generation, and lifecycle controls across heterogeneous systems. Gateman fits teams that also want implemented provider workflows and administration relays that reduce integration plumbing. A team can use both: Vault for broad workload identity and secret lifecycle, and Gateman for selected operations it would otherwise build and maintain itself.

Start with the work that repeats most often. Browse the Gateman documentation, then review its coding-agent workflow, AWS relay, Cloudflare relay, and SES provisioning guide. Choose the specific app capabilities and provider permissions that match that work.

Further reading

← All articles