Skip to content

Secrets & the Fernet key

Cloudkeel-DD needs two secrets. One is routine; one is immutable and load-bearing.

secrets.fernetKey encrypts every cloud credential you connect, at rest in the database. It is a Fernet key (32-byte urlsafe base64).

Generate it once, before first install:

Terminal window
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"

Store it in your secret manager (Key Vault, Secrets Manager, Secret Manager, Sealed Secrets, …) and pass the same value on every helm upgrade.

secrets.jwtSecret signs user session tokens. It is not immutable — rotating it simply logs everyone out and is a safe way to invalidate all sessions. Generate any long random string:

Terminal window
openssl rand -base64 48

Never put real secret values in a committed values.yaml. Options, best first:

  1. External secret operator (External Secrets, Sealed Secrets) syncing from your secret manager into the release’s secret.
  2. --set-file / --set from a CI secret store at deploy time (the value never lands in git).
  3. A pre-created Kubernetes Secret the chart references.
  • Encrypted with the Fernet key: connected cloud credentials (access keys, SAS tokens, service-account keys, kubeconfig tokens).
  • Not secret: discovered resource inventory, drift findings, diffs. These describe your infrastructure’s shape, not its credentials.

Cloudkeel-DD never stores Kubernetes Secret contents in a diff — that resource kind is excluded from comparison entirely. See the security model.