Skip to main content

Secrets Manager Secrets Reference

Define AWS Secrets Manager secret names and map them in global.remoteSecrets before your first Helm deploy of chart bighammer 1.0.12+.

Secret names are not secret values

This page lists Secrets Manager secret names (identifiers). These are not passwords. Store actual values only in Secrets Manager; never commit them to Git or Helm values files.

The chart maps Secrets Manager names → Kubernetes Secret keys via External Secrets Operator (ExternalSecret per service). Defaults / samples live in the chart overlays (values-release.yaml, values-dev.yaml). Override names in your values-<env>.yaml.

Related: v1.0.12 Release · Platform Deployment · POC Setup (K3s) · Azure Key Vault equivalent: Key Vault Secrets

Flow​

  1. Platform prerequisites — DB passwords (and optional SSL material) exist in Secrets Manager.
  2. One-time application secrets — create the secrets listed below (console, IaC, or CLI).
  3. SecretStore (aws-secret-store) authenticates with IRSA (or static credentials only if you deliberately configure them).
  4. ExternalSecret per service syncs into K8s Secrets.
  5. Pods consume env vars or mounted files.
ESO fails the entire secret on the first missing key

If any remoteRef.key does not exist in Secrets Manager, the ExternalSecret stays in SecretSyncedError and the pod often hits CreateContainerConfigError (secret "…" not found).


Initial secrets checklist (create these first)​

Derived from all ExternalSecret templates under charts/*/templates/secret.yaml and global.remoteSecrets in the AWS chart overlays.

A. Platform / database (required)​

Secrets Manager name (recommended)Chart path (global.remoteSecrets…)Used as (K8s key)Purpose
bh-dev-user-passwordpostgres.passwordPOSTGRES_PASSWORDPostgreSQL role bh_dev_user (migrations / Alembic)
bh-app-user-passwordapp.userPasswordBH_APP_USER_PASSWORDPostgreSQL role bh_app_user (runtime DML)
bh-kcdbpwdkeycloak.dbPasswordKC_DB_PASSWORDKeycloak server DB user keycloak_db_user
bh-rdsssl (or placeholder PEM)postgres.clientCertPOSTGRES_SSL_CERTRDS SSL material when postgresSSLMode requires it; may be a dummy PEM if SSL files unused

Sample chart overlays may still use legacy names such as rds/master/password or bh/rdsssl — override to your naming standard in values-<env>.yaml.

B. One-time application secrets (required)​

Secrets Manager name (recommended)Chart pathUsed as (K8s key)Purpose
bh-kcadminpwdkeycloak.adminPasswordKEYCLOAK_ADMIN_PASSWORDKeycloak admin UI password
bh-keycloak-grant-typekeycloak.grantTypeKEYCLOAK_GRANT_TYPEOAuth grant type (often password)
bh-temp-tenant-user-passwordkeycloak.tempTenantPasswordTEMPERORY_TENANT_USER_PASSWORDTemporary tenant user (Keycloak API)
bh-rabbitmq-passwordrabbitmq.passwordRABBITMQ_PASSWORDMust match the bhrabbitmq broker password
bh-redis-passwordaiagent.redisPasswordREDIS_PASSWORDRedis / Celery result backend
bh-langchain-api-keyaiagent.langchainApiKeyLANGCHAIN_API_KEYLangChain / LLM observability
bh-catalog-decryption-keycatalog.decryptionKeyDECRYPTION_KEY / VITE_DECRYPTION_KEY / NEXT_PUBLIC_DECRYPTION_KEYCatalog / UI decryption
license-catalogcatalog.licenseLICENSECatalog license string
license-catalog-pub-keycatalog.licensePubKeyPUBLIC_KEYCatalog license public key
bh-oauth-tokenaudit.oauthTokenOAUTH_TOKEN_SECRETAudit API OAuth token

C. AWS credentials injected into pods (required by current images)​

Several services require static env keys (they do not rely on IRSA alone):

Secrets Manager nameChart pathUsed as (K8s key)Purpose
AWS_ACCESS_KEYapp.awsAccessKeyAWS_ACCESS_KEY / AWS_ACCESS_KEY_IDApp AWS API access
AWS_SECRET_ACCESS_KEYapp.awsSecretAccessKeyAWS_SECRET_ACCESS_KEYApp AWS API secret

Store as plaintext Secrets Manager secrets (raw key strings). Prefer least-privilege IAM users; rotate regularly.

D. TLS PEMs for Ingress (when ingress.tlsEnabled: true)​

Secrets Manager name (example)Chart pathUsed asPurpose
<env>-aws-bighammer-tls-crt or wildcard-<env>-bighammer-crttls.certtls.crtIngress / UI TLS certificate PEM
<env>-aws-bighammer-tls-key or wildcard-<env>-bighammer-keytls.keytls.keyMatching private key PEM

If TLS terminates only on the ALB (ACM) and you set tlsEnabled: false, remove TLS entries from the UI ExternalSecret or keep dummy PEMs so ESO can still sync other keys in the same secret. ACM cannot export a private key into Secrets Manager.

E. Optional​

Secrets Manager nameChart pathPurpose
aws-ecr-docker-configecrImagePullSecret.keyDockerconfig JSON for private ECR pull (often replaced by a CronJob-refreshed K8s secret)

Chart defaults vs sample overlays​

Values pathRecommended SM namevalues-release.yaml samplevalues-dev.yaml sample
postgres.passwordbh-dev-user-passwordrds/master/passwordrds/master/password
postgres.clientCertbh-rdssslbh/rdssslbh/rdsssl
app.userPasswordbh-app-user-passwordbh/appuserpwdbh/appuserpwd
rabbitmq.passwordbh-rabbitmq-passwordbh/rabbitmqpwdbh/rabbitmqpwd
catalog.decryptionKeybh-catalog-decryption-keybh/catalogdecryptionbh/catalogdecryption
catalog.licenselicense-cataloglicense-cataloglicense-catalog
catalog.licensePubKeylicense-catalog-pub-keybh-eks-prodbh-eks-dev
audit.oauthTokenbh-oauth-tokenbh-oauth-tokenbh-oauth-token
aiagent.redisPasswordbh-redis-passwordbh/redispwdbh/redispwd
aiagent.langchainApiKeybh-langchain-api-keybh/langchainapikeybh/langchainapikey
keycloak.grantTypebh-keycloak-grant-typebh/keycloakgranttypebh/keycloakgranttype
keycloak.adminPasswordbh-kcadminpwdbh/kcadminpwdbh/kcadminpwd
keycloak.dbPasswordbh-kcdbpwdbh/kcdbpwdbh/kcdbpwd
keycloak.tempTenantPasswordbh-temp-tenant-user-passwordbh/temptenantuserpwdbh/temptenantuserpwd
app.awsAccessKeyAWS_ACCESS_KEYAWS_ACCESS_KEYAWS_ACCESS_KEY
app.awsSecretAccessKeyAWS_SECRET_ACCESS_KEYAWS_SECRET_ACCESS_KEYAWS_SECRET_ACCESS_KEY
tls.cert<env>-aws-bighammer-tls-crtwildcard-prod-bighammer-crtwildcard-dev-bighammer-crt
tls.key<env>-aws-bighammer-tls-keywildcard-prod-bighammer-keywildcard-dev-bighammer-key

Copy values-release.yaml → values-<env>.yaml and set remoteSecrets to the exact names you create in Secrets Manager.

Example overlay fragment:

global:
remoteSecrets:
postgres:
password: bh-dev-user-password
clientCert: bh-rdsssl
rabbitmq:
password: bh-rabbitmq-password
catalog:
decryptionKey: bh-catalog-decryption-key
license: license-catalog
licensePubKey: license-catalog-pub-key
audit:
oauthToken: bh-oauth-token
aiagent:
redisPassword: bh-redis-password
langchainApiKey: bh-langchain-api-key
keycloak:
grantType: bh-keycloak-grant-type
adminPassword: bh-kcadminpwd
dbPassword: bh-kcdbpwd
tempTenantPassword: bh-temp-tenant-user-password
app:
userPassword: bh-app-user-password
awsAccessKey: AWS_ACCESS_KEY
awsSecretAccessKey: AWS_SECRET_ACCESS_KEY
tls:
cert: myenv-aws-bighammer-tls-crt
key: myenv-aws-bighammer-tls-key

Application database dual-role​

Env varDB roleSecrets Manager secretUsed for
POSTGRES_USER + POSTGRES_PASSWORDbh_dev_userbh-dev-user-passwordAlembic / migrations — DDL
BH_APP_USER + BH_APP_USER_PASSWORDbh_app_userbh-app-user-passwordRuntime SQLAlchemy — DML

Mismatch between Secrets Manager values and PostgreSQL role passwords is the most common cause of password authentication failed.

Keycloak server database​

ResourceNameChart mapping
Databasekeycloak_db_<env>global.bhkeycloak.env.KC_DB_URL
Userkeycloak_db_userglobal.bhkeycloak.env.KC_DB_USERNAME
Passwordbh-kcdbpwdglobal.remoteSecrets.keycloak.dbPassword

bhkeycloakapi uses the application database (schema keycloakapi_db), not the Keycloak server database.

Which services pull which secrets​

ServiceSecrets pulled (via ExternalSecret)
bhcatalogapiPostgres, SSL cert, decryption, RabbitMQ, license, pub key, app user, AWS keys
bhcatalogworkerPostgres, SSL cert, decryption, RabbitMQ, app user, AWS keys
bhauditapi / bhauditworkerPostgres, SSL cert, OAuth token, RabbitMQ, app user, AWS keys
bhaiagent / bhaiagentworkerPostgres, SSL cert, LangChain, Redis, decryption, RabbitMQ, app user, AWS keys
bhmigrateapi / bhmigrateworkerPostgres, Redis, decryption, RabbitMQ, app user, AWS keys
bhcelerybeatPostgres, SSL cert, decryption, RabbitMQ, app user, AWS keys
bhkeycloakPostgres password, Keycloak admin, Keycloak DB password
bhkeycloakapiGrant type, admin pwd, decryption, Postgres, SSL, temp tenant, app user, AWS keys
bhuiDecryption key, tls.crt, tls.key
bhadminuiDecryption key
bhtransformationutilsAWS access key id + secret

Create secrets (CLI examples)​

Plaintext string secrets (typical):

REGION=us-east-1

aws secretsmanager create-secret --region "$REGION" \
--name bh-dev-user-password \
--secret-string '<password>'

aws secretsmanager create-secret --region "$REGION" \
--name bh-app-user-password \
--secret-string '<password>'

aws secretsmanager create-secret --region "$REGION" \
--name bh-kcdbpwd \
--secret-string '<password>'

aws secretsmanager create-secret --region "$REGION" \
--name bh-kcadminpwd \
--secret-string '<password>'

aws secretsmanager create-secret --region "$REGION" \
--name bh-keycloak-grant-type \
--secret-string 'password'

aws secretsmanager create-secret --region "$REGION" \
--name bh-temp-tenant-user-password \
--secret-string '<password>'

aws secretsmanager create-secret --region "$REGION" \
--name bh-rabbitmq-password \
--secret-string '<same-as-bhrabbitmq-chart>'

aws secretsmanager create-secret --region "$REGION" \
--name bh-redis-password \
--secret-string '<password>'

aws secretsmanager create-secret --region "$REGION" \
--name bh-langchain-api-key \
--secret-string '<api-key>'

aws secretsmanager create-secret --region "$REGION" \
--name bh-catalog-decryption-key \
--secret-string '<key>'

aws secretsmanager create-secret --region "$REGION" \
--name license-catalog \
--secret-string '<license-string>'

aws secretsmanager create-secret --region "$REGION" \
--name license-catalog-pub-key \
--secret-string '<public-key-pem-or-material>'

aws secretsmanager create-secret --region "$REGION" \
--name bh-oauth-token \
--secret-string '<token>'

aws secretsmanager create-secret --region "$REGION" \
--name AWS_ACCESS_KEY \
--secret-string '<AKIA…>'

aws secretsmanager create-secret --region "$REGION" \
--name AWS_SECRET_ACCESS_KEY \
--secret-string '<secret>'

# TLS PEMs (raw file contents)
aws secretsmanager create-secret --region "$REGION" \
--name myenv-aws-bighammer-tls-crt \
--secret-string file://tls.crt

aws secretsmanager create-secret --region "$REGION" \
--name myenv-aws-bighammer-tls-key \
--secret-string file://tls.key

Use put-secret-value to update an existing secret.


Verify after create​

kubectl -n bh-control-plane get externalsecret
kubectl -n bh-control-plane describe externalsecret bhcatalogapi
# Ready=True, Reason=SecretSynced

kubectl -n bh-control-plane get secret bhcatalogapi

Force a refresh after adding a missing SM secret:

kubectl -n bh-control-plane annotate externalsecret bhcatalogapi \
force-sync="$(date +%s)" --overwrite

Azure / GCP parity​

CloudSecrets storeDoc
AWSSecrets ManagerThis page
AzureKey VaultKey Vault Secrets
GCPSecret ManagerSecret Manager Secrets

Naming differs per cloud; the logical set (DB dual-role, Keycloak, RabbitMQ, Redis, licenses, OAuth, TLS) is the same.