Safeguard
Security Guides•

Where does Helm store release values and who can read them?

Helm 3 keeps release records in Kubernetes Secrets in the release namespace by default. Anyone who can read them can read what Helm recorded.

Safeguard Security Team
3 min read

By default Helm keeps release information in Kubernetes Secrets in the namespace of the release. Because Helm can return a release's values on request, anyone who can read those Secrets, or who can run Helm against that namespace, may be able to see values you passed at install time, including any secrets you put in them.

What Helm records

Every install or upgrade creates a release record. The Helm documentation says release information is stored in Secrets in the release namespace by default, and that you can change the backend with the HELM_DRIVER environment variable to configmap, secret or sql. The command helm get values downloads the values for a given release, so values are part of what is stored and retrievable.

Who can read it

BackendWho can readNote
Secret (default)Anyone with get on Secrets in that namespaceCan be encrypted at rest if the cluster is configured for it
ConfigMapAnyone with get on ConfigMapsDocs warn this could expose sensitive data
SQL (beta)Anyone with database accessSuited to releases over 1 MB

The documentation makes the ConfigMap point directly: broader access is often granted to ConfigMaps than to Secrets. It notes, for example, that the default view role grants access to most resources but not Secrets. Switching to the ConfigMap backend could therefore expose your application's sensitive data.

What this means in practice

  • A password passed with a values file or the set option ends up in the release record.
  • A role that can read Secrets in the namespace can read every release there.
  • Shell history and CI logs may also hold the command line you used.

How to reduce the exposure

  1. Keep secret values out of Helm values. Have the chart reference an existing Secret by name, and create that Secret from an external secret store.
  2. Limit who can read Secrets in each namespace. Review roles with get, list or watch on Secrets.
  3. Enable encryption at rest for Secrets in the cluster. See Kubernetes Secrets encryption at rest.
  4. Avoid the ConfigMap driver unless you have thought through who can read ConfigMaps.
  5. Keep CI logs clean. Use dry runs with the flag that hides Secrets in output.
  6. Rotate any secret that has been passed in values in the past.

For a role audit, see who can read Kubernetes Secrets.

Quick check

Does Helm encrypt release records itself?

The documentation says release information is stored in Secrets by default and that Secret data can be configured for encrypted storage in the cluster. Encryption at rest is a cluster setting.

Is it safe to put a database password in values.yaml?

It is better not to. The value becomes part of the release record. Reference an existing Secret instead.

Safeguard runs policies and gates on pull requests, so a failed rule can hold a merge, and its dependency and SBOM scanning covers the packages your infrastructure code pulls in. You can try a free scan at gold.safeguard.sh/scan.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.