Managed OpenBao hosting

Engineering and securityOn-prem or sovereign site

Secrets, certificates and encryption keys for your applications, run on your own hardware or in a Pilae region, with the unseal keys held by you rather than by us. Pilae runs it on your own servers, or in Zurich, Switzerland, and eleven other Pilae Cloud regions.

Talk to us about OpenBao

Licence
MPL-2.0
Runs on
Your own hardware, or any of twelve Pilae regions — six of them in Switzerland and the EU
Upgrades
Pinned, tested against your configuration, applied in your window
Upstream
openbao.org

Running OpenBao in production: what it takes

  1. Decide how it unseals

    Auto-unseal against your HSM over PKCS#11 or a KMS you control, so a restarted node rejoins by itself. With Shamir shares instead, every restart waits for your key holders, and upgrade windows are planned around them.

  2. Initialise with your key holders

    Three or five nodes on a pinned version we have run. At initialisation the key shares are encrypted to the PGP keys of people you name, so nobody at Pilae sees them in the clear, and the initial root token is revoked once setup is done.

  3. Wire sign-on, policies and TTLs

    People sign in through OIDC against Keycloak or your IdP; applications use AppRole, Kubernetes or certificates. Policies live in your repository, and lease TTLs come down from the 32-day default to what each mount needs.

  4. Snapshot daily, restore against the seal

    A Raft snapshot goes offsite daily, encrypted, to a location in your chosen country. Once a month we restore it into a scratch cluster with no outbound network, unseal it against the same key and read a known test secret. A snapshot restores nothing without the seal, so the drill tests both.

  5. Upgrade standbys first, in your window

    The Pilae Agent tests the upgrade on a copy with no outbound network, so its leases cannot revoke real credentials, then waits for your approval. Standbys go first and the active node last. OpenBao promises no downgrade, so the rollback is the previous binary plus the snapshot taken just before.

What OpenBao is, and who runs it

Self-hosted OpenBao for secrets, keys and certificates

OpenBao stores and hands out the credentials your systems run on: static secrets in a key-value store, database passwords issued per application and revoked when their lease ends, internal TLS certificates from its PKI engine, and encryption as a service through transit. Every request can be written to an audit log, and in our deployments it is. It is the fork of HashiCorp Vault made after Vault moved to the Business Source License, and it keeps the Vault API, so the client libraries teams already use with Vault mostly keep working.

It suits platform and security teams who want one place for credentials and a record of who read each one, without handing the lot to a cloud provider’s secrets service. We run it on three or five dedicated machines, on your own hardware next to your HSM or in the Pilae Cloud region you choose. It answers only on your private network, and people sign in through Keycloak or your own IdP.

OpenBao in production: seals, Raft and audit

The decision that shapes everything else is who can unseal it. OpenBao encrypts everything it stores with a key that is itself locked by the seal. We configure auto-unseal against an HSM or KMS you control, or Shamir key shares held by people you name, and Pilae holds neither. Auto-unseal has a cost we write into the runbook: if the key in your HSM or KMS is lost, the data is lost with it, and recovery keys will not bring it back.

Storage is integrated Raft on three or five nodes. Losing one node of three is routine; losing two stops the cluster until one returns. OpenBao refuses requests when no audit device can record them, so a full audit disk is an outage: we ship the log off the node and alert on disk space well before that. Probes hit the health endpoint every 60 seconds and tell active, standby and sealed apart, and a sealed node alerts an engineer. Snapshots go offsite daily, encrypted, to your chosen country, and are restored into a scratch cluster once a month. Upgrades go through the Pilae Agent, rehearsed on an isolated copy and applied standbys first in your window.

OpenBao licence: one edition, no enterprise tier

There is no per-client fee. Namespaces, OIDC sign-on, standby nodes that serve reads and HSM auto-unseal are all in the open-source release. What you pay Pilae for is the operation: the cluster, the seal design, the snapshots and restore drills, and upgrades in your window. Pricing is on request. Talk to us about the Vault you want to move.

OpenBao is MPL-2.0 throughout. There is no enterprise edition, no enterprise directory and no feature held back for a paid tier. The plugins that moved out of the main binary, such as LDAP sign-in and the PKCS#11 seal, live in the project's own openbao-plugins repository, also under MPL-2.0. It was forked in 2023 from the MPL-2.0 code of HashiCorp Vault, after HashiCorp moved Vault to the Business Source License, and it is hosted by the OpenSSF, part of the Linux Foundation. Nothing here needs a licence in your name.

OpenBao system requirements

Before anything is deployed, this is what has to exist. We size it with you in the first session, and we say so when your own hardware is already enough.

Cluster
3 or 5 nodesIntegrated Raft storage works only while a majority of nodes is up. Three nodes survive the loss of one, five survive two, and five is what upstream recommends. Where you already run a replicated PostgreSQL cluster, OpenBao can store its data there instead.
CPU, memory and disk
2 vCPU · 4 GB · SSD per nodeUpstream publishes no minimum, so this is where we start. Request rate and the number of live leases decide the size, not the number of secrets. Upstream does ask for SSDs and no burstable CPU or disk, because every write waits on a majority of nodes.
Seal
PKCS#11 HSM, KMS or ShamirDecides who can start OpenBao. Auto-unseal against an HSM or KMS you control, or unseal key shares held by people in your organisation. Pilae holds neither.
Sign-in
OIDC · AppRole · TLS certificatesThe built-in JWT/OIDC auth method federates people with Keycloak or Microsoft Entra ID. Applications authenticate with AppRole, Kubernetes service accounts or TLS certificates. LDAP sign-in now ships as a separate plugin.
Access
Private network · TLS · 8200Applications reach OpenBao over your private network with TLS to every node. It goes behind the gate on port 443 only if something outside must reach it, and the web UI stays on the private network.

Migrating from HashiCorp Vault to OpenBao

OpenBao keeps the Vault API, down to the X-Vault-Token header, so applications and their client libraries mostly need a new address rather than new code. The data is another matter. Upstream documents an in-place swap only for a Vault Community cluster on 1.14.1, the release it tested, with Raft storage and Shamir unseal. A current Vault, or any Vault Enterprise cluster, moves by copy into a new OpenBao cluster: the configuration is rebuilt as code and the static secrets are copied by script. Tokens and leases do not come across, so clients log in again and dynamic credentials are issued fresh. Replication and Sentinel policies have no equivalent. Most of the work is in the inventory: which mounts are live, and which clients call them.

  1. Inventory mounts and callers

    The secrets engines, auth methods and policies in use, read from Vault itself, and the clients that call them, read from its audit log. Mounts that depend on a plugin OpenBao does not ship are flagged here, before anything moves.

  2. Rebuild the configuration as code

    Policies, auth roles and mount settings are written as code in your repository and applied to a new OpenBao cluster beside Vault. Vault Enterprise namespaces become OpenBao namespaces.

  3. Copy the static secrets

    KV secrets are read from Vault, written to OpenBao and compared path by path. An internal CA gets a new intermediate signed by your root rather than a copied key.

  4. Move clients, then retire Vault

    Applications switch address one team at a time and log in again for OpenBao tokens. Anything that parses the old token prefix is found in testing. Vault stays up, unchanged, until the last client has moved and its leases have run out.

An OpenBao node that unseals against your HSM

# /etc/openbao/bao.hcl on bao-1, one node of three
ui           = true
cluster_name = "acme-bao"
api_addr     = "https://bao-1.acme.internal:8200"
cluster_addr = "https://bao-1.acme.internal:8201"

default_lease_ttl = "24h"
max_lease_ttl     = "168h"

listener "tcp" {
  address       = "10.40.0.11:8200"
  tls_cert_file = "/etc/openbao/tls/bao-1.crt"
  tls_key_file  = "/etc/openbao/tls/bao-1.key"
}

storage "raft" {
  path    = "/var/lib/openbao/raft"
  node_id = "bao-1"
  retry_join {
    leader_api_addr     = "https://bao-2.acme.internal:8200"
    leader_ca_cert_file = "/etc/openbao/tls/acme-ca.pem"
  }
  retry_join {
    leader_api_addr     = "https://bao-3.acme.internal:8200"
    leader_ca_cert_file = "/etc/openbao/tls/acme-ca.pem"
  }
}

# The key stays in acme's HSM. The PIN comes from BAO_HSM_PIN
# in the service environment, never from this file.
plugin_directory = "/opt/openbao/plugins"
plugin "kms" "pkcs11" {
  command = "openbao-plugin-kms-pkcs11"
}
seal "pkcs11" {
  lib         = "/opt/hsm/lib/libpkcs11.so"
  token_label = "acme-bao"
  key_label   = "bao-root-key-2026"
  mechanism   = "AES_GCM"
}

audit "file" "to-file" {
  description = "Requests and responses, secrets HMAC-hashed, shipped off the node"
  options {
    file_path = "/var/log/openbao/audit.log"
  }
}
An example configuration for one node of three. OpenBao's root key is wrapped by a key that never leaves acme's HSM, so a restarted node unseals itself, and a copy of the disk or a snapshot is ciphertext to anyone without that key. Audit is declared in the file rather than through the API, so it is reviewed as a commit like the rest.

What Pilae is responsible for

A pinned version

A version we have run, not whatever latest resolves to that day.

A runbook

What it depends on, how it fails, what to do about it. In your repository.

A restore drill

Backups restored on a schedule. A backup nobody has restored is a file.

A patch window

Security updates in a window you agreed, with a rollback ready.

Someone watching

Every endpoint probed on the minute. An alert reaches a person, not a dashboard nobody opens.

Where it runs
zur1, fra1, fal1, gra1, ams1, hel1, lon1, ash1, hil1, sin1, tok1, syd1, on-premZurich, Frankfurt, Falkenstein, Gravelines, Amsterdam, Helsinki, London, Ashburn, Hillsboro, Singapore, Tokyo, Sydney, Your own hardware
Who holds the credentials
You do. Ours are separate, named, logged and revocable with one command. We ask before anything changes outside an agreed window.
If you leave
The machine, the data, the compose files and the runbook are already yours. Nothing stops when our access does.

What drives the price of running OpenBao

Pricing is on request: a fixed price for onboarding, then a monthly price for OpenBao, quoted in writing within five business days. The plans set what every deployment includes; these are the inputs the quote is built from.

Instance size
The CPU, memory and, where a model runs, the GPUs the app needs for your users and your data.
High availability
One machine with tested restores, or a replicated setup that keeps serving when a node fails.
Storage and backups
How much data it holds, how long backups are kept, and point-in-time recovery for its database.
Plan and support
Essential, Business or Enterprise: support hours, response times in the contract and how often we review the service with you.
Region
Your own hardware, where the infrastructure is already yours, or a Pilae Cloud region, where it is passed through at cost plus a fixed margin.
Sign-on and integrations
Single sign-on, directory sync, mail relays and the other systems the app has to reach.

OpenBao: common questions

Is OpenBao open source?

Yes. OpenBao is MPL-2.0, an OSI-approved licence, and there is no paid edition holding features back. It forked from the MPL-2.0 code of HashiCorp Vault in 2023, when HashiCorp moved Vault to the Business Source License, and the project is hosted by the OpenSSF, part of the Linux Foundation.

Who holds the unseal keys?

You do. With auto-unseal, the key that wraps OpenBao's root key never leaves your HSM or KMS, and the recovery key shares are encrypted at initialisation to the PGP keys of people you name. With a Shamir seal, the unseal key shares go to them the same way. Pilae holds no share and no copy of the key, so a snapshot in our hands is ciphertext.

Will our Vault clients work with OpenBao?

Most will, without changes. OpenBao keeps the Vault API, and upstream aims for existing clients not to notice the difference. Two things need checking: anything that expects the Vault token format, because OpenBao issues shorter tokens, and anything that depends on a Vault Enterprise feature or a plugin OpenBao does not ship.

What does OpenBao lack compared with Vault Enterprise?

Mainly replication between clusters, for disaster recovery or performance, Sentinel policies, and Enterprise-only secrets engines such as Transform and KMIP. A second site is therefore a restored snapshot, not a live replica, and we agree the restore time with you. Namespaces, standby nodes that serve reads and HSM auto-unseal are in OpenBao without a licence fee.

Where do our secrets live?

On three or five dedicated machines: your own hardware next to your HSM, or a Pilae region you choose, in ISO 27001-certified datacentres. Every node holds the data encrypted, and snapshots go offsite to a location in the country you chose.

Also in engineering and security

Back to apps

Bring us your OpenBao. We will tell you what it takes.

Thirty minutes on the deployment you already have, or the one you are about to start.