Skip to main content
Version: 8.6

Managing secrets in Helm charts

This guide provides an overview for configuring and managing secrets when using the official Helm chart.

Internal secrets

These secrets are used by Camunda applications. They are created and managed by the Helm chart unless explicitly configured.

SecretChart values keyPurposeDefault behavior
Keycloak Admin Passwordidentity.keycloak.auth.existingSecret, identity.keycloak.auth.adminPasswordAdmin password for Keycloak (Camunda Identity)Generated by default if not set
Keycloak Management Passwordidentity.keycloak.auth.existingSecret, identity.keycloak.auth.managementPasswordInternal password for Identity service communicationGenerated by default if not set
Identity First User Passwordidentity.firstUser.password, identity.firstUser.existingSecretDefault user password (demo/demo)demo unless overridden
OAuth Client Secret (Operate)global.identity.auth.operate.existingSecret.nameOAuth client secret for OperateGenerated by default if not set
OAuth Client Secret (Tasklist)global.identity.auth.tasklist.existingSecret.nameOAuth client secret for TasklistGenerated by default if not set
OAuth Client Secret (Optimize)global.identity.auth.optimize.existingSecret.nameOAuth client secret for OptimizeGenerated by default if not set
OAuth Client Secret (Connectors)global.identity.auth.connectors.existingSecret.nameOAuth client secret for ConnectorsGenerated by default if not set
OAuth Client Secret (Console)global.identity.auth.console.existingSecret.nameOAuth client secret for ConsoleGenerated by default if not set
OAuth Client Secret (Zeebe)global.identity.auth.zeebe.existingSecret.nameOAuth client secret for ZeebeGenerated by default if not set
Enterprise License Keyglobal.license.existingSecret,global.license.existingSecretKeyCamunda Enterprise License KeyNot set unless provided
Identity PostgreSQL PasswordidentityPostgresql.auth.existingSecretPassword for embedded PostgreSQL used by IdentityGenerated by default if not set
Keycloak PostgreSQL PasswordidentityKeycloak.auth.existingSecretPassword for embedded PostgreSQL used by KeycloakGenerated by default if not set
Web Modeler PostgreSQL Passwordpostgresql.auth.existingSecret, postgresql.auth.secretKeys.adminPasswordKey, postgresql.auth.secretKeys.userPasswordKeyPasswords for Web Modeler's embedded PostgreSQL via Bitnami chartGenerated by default if not set
Enterprise License Keyglobal.license.existingSecret, global.license.existingSecretKeyCamunda Enterprise License KeyNot set unless provided

External secrets

These secrets are necessary when integrating Camunda with third-party services.

SecretChart values keyPurposeDefault behavior
External Database PasswordwebModeler.restapi.externalDatabase.existingSecret.namePassword for external PostgreSQL if using an external DBNot set unless provided
SMTP PasswordwebModeler.restapi.mail.existingSecret.nameSMTP credentials for sending email notificationsNot set unless provided
Connectors Inbound Auth Passwordconnectors.inbound.auth.existingSecret, connectors.inbound.auth.existingSecretKeyBasic auth password for Connectors polling OperateNot set unless provided
External Elasticsearch Authglobal.elasticsearch.auth.existingSecretPassword for external Elasticsearch authentication (basic auth)Not set unless provided
External Elasticsearch TLS Certglobal.elasticsearch.tls.existingSecretTLS certificate for external Elasticsearch over SSLNot set unless provided
External OpenSearch Authglobal.opensearch.auth.existingSecretPassword for external OpenSearch authentication (basic auth)Not set unless provided
External OpenSearch TLS Certglobal.opensearch.tls.existingSecretTLS certificate for external OpenSearch over SSLNot set unless provided

Creating Kubernetes secrets

Secrets may be created manually using the kubectl CLI or defined in Kubernetes manifests.

To create a secret via kubectl::

kubectl create secret generic camunda-secret \
--from-literal=operate-secret-key=camundapassword\
--namespace camunda

Or using YAML:

apiVersion: v1
kind: Secret
metadata:
name: operate-secret
namespace: camunda
type: Opaque
stringData:
operate-secret-key: "camundapassword"

Apply it with:

kubectl apply -f my-secret.yaml

Referencing secrets in values.yaml

Depending on the structure of the secret key, there are two ways to reference a secret in the values.yaml file:

Option 1: Using existingSecret.name

Use this approach when the chart expects the secret to be split into a name and key.

global:
identity:
auth:
operate:
existingSecret:
name: operate-secret
existingSecretKey: operate-secret-key

Option 2: Using existingSecret

In some cases, the chart expects the secret name directly and a reference to the specific key as a separate field.

global:
identity:
keycloak:
auth:
existingSecret: keycloak-secret
adminPassword: admin-password-key

TLS secrets

When Camunda services are exposed via Ingress with TLS, a Kubernetes secret containing the TLS certificate and private key is typically required. This is especially important when using tools like cert-manager or securing public-facing services.

Chart values

The TLS secret can be configured as shown below:

global:
ingress:
tls:
enabled: true
secretName: camunda-tls-secret

TLS secret example

apiVersion: v1
kind: Secret
metadata:
name: camunda-tls-secret
namespace: camunda
annotations:
cert-manager.io/issuer: "letsencrypt-prod"
type: kubernetes.io/tls
data:
tls.crt: <base64 encoded cert>
tls.key: <base64 encoded key>

Ensure the secret name is configured in values.yaml under global.ingress.tls.secretName.