Databricks: Databricks Secret Management & Secret Scopes


Introduction

Hard-coding credentials (DB passwords, API tokens, SAS keys, hosts) in notebooks or jobs is risky. In Databricks you store them as secrets inside a secret scope, then read them safely at runtime (not printed in plain text). Databricks supports two scope types: Azure Key Vault-backed and Databricks-backed. (Microsoft Learn)


What is a Secret Scope in Databricks?

Secret scope = a named container for secrets.
Types:

  • Azure Key Vault–backed: the scope references an AKV; secrets live in AKV and are read-only from Databricks (you manage them in Azure).
  • Databricks-backed: secrets are stored in an encrypted store managed by Databricks.
    You create scopes, set permissions (ACLs), add secrets, and reference them in notebooks/jobs. (Microsoft Learn)

01:04 — Azure Key Vault–backed Secret Scope (AKV)

A) Prepare Azure Key Vault (one-time)

  1. Create an AKV in your subscription (any resource group/region reachable by your workspace).
  2. In Access configuration, set Permission model = Vault access policy (RBAC isn’t supported for AKV-backed secret scopes). (Microsoft Learn)
  3. In Networking, allow access from your required VNets/IPs and check Allow trusted Microsoft services to bypass this firewall if appropriate. (Microsoft Learn)
  4. Ensure your user has Key Vault Contributor / Owner (as documented) to create the scope binding. (Microsoft Learn)

Tip: AKV-backed scopes grant Databricks Get/List permissions to the workspace’s service app so it can read secrets; you still manage the secrets in AKV. (Microsoft Learn)

B) Add a secret to AKV (example)

Azure Portal → your Key Vault → Objects > SecretsGenerate/Import

  • Name: db-password
  • Value: S0m3Str0ngP@ss
  • Enabled: Yes

(You can also use Azure’s SetSecret REST/CLI.) (Microsoft Learn)


Create the AKV-backed scope (Databricks UI)

  1. Open: https://<your-workspace-url>#secrets/createScope (case-sensitive: createScope with capital S). (Microsoft Learn)
  2. Scope name: akv (any name; case-insensitive).
  3. Manage principal: choose Creator (Premium plan) or All workspace users. (Microsoft Learn)
  4. Paste DNS Name (Vault URI, e.g., https://mykv.vault.azure.net/) and Resource ID (from KV Properties). (Microsoft Learn)
  5. Create. Verify: databricks secrets list-scopes # expect to see: akv (Microsoft Learn)

Use dbutils.secrets (help, list, get)

In a Databricks notebook:

# What can I do?
dbutils.secrets.help()

# List all scopes
dbutils.secrets.listScopes()

# List secrets (metadata only) in a scope
dbutils.secrets.list("akv")

# Read a secret (value is redacted in outputs)
password = dbutils.secrets.get(scope="akv", key="db-password")

Databricks redacts secret values printed to outputs as [REDACTED]. Use them directly in code instead of printing. (Databricks Documentation, Microsoft Learn)


Databricks-backed Secret Scopes

Use these when you don’t need AKV, want quick setup, or are multi-cloud. Scopes & secrets are managed in the workspace via CLI / API, and you can control access via secret scope ACLs. (Microsoft Learn)

Set up the Databricks CLI

Install the current CLI (0.205+). Verify:

databricks --version

Docs: CLI commands overview. (Microsoft Learn)

Authenticate the CLI with your workspace

# Creates/updates a profile interactively (opens browser):
databricks auth login

# Or set env creds / profiles as needed.

(You can also auth with a service principal for automation.) (Microsoft Learn)

Manage Secret Scopes using the CLI

1) Create a Databricks-backed scope

databricks secrets create-scope my-db-scope

List/verify:

databricks secrets list-scopes

(Microsoft Learn)

2) Put a secret into the scope

CLI 0.205+ (‘put-secret’):

# Option A: JSON (string_value)
databricks secrets put-secret --json '{
  "scope": "my-db-scope",
  "key": "db-host",
  "string_value": "xyz.example.com"
}'

# Option B: via stdin (multi-line)
( cat << 'EOF'
very
secret
value
EOF
) | databricks secrets put-secret my-db-scope db-password

List secrets (metadata only):

databricks secrets list-secrets my-db-scope

Read (CLI returns base64; decode if you must read via CLI):

databricks secrets get-secret my-db-scope db-password | jq -r .value | base64 --decode

(Usually you read secrets in notebooks with dbutils.secrets.get.) (Microsoft Learn)

Compatibility: older CLI used databricks secrets put --scope ... --key ... --string-value .... Prefer put-secret on new CLI. (Databricks Documentation)


Use secrets in notebooks & jobs (examples)

A) JDBC with Python

user = dbutils.secrets.get("my-db-scope", "db-user")
pwd  = dbutils.secrets.get("my-db-scope", "db-password")
jdbc_url = dbutils.secrets.get("my-db-scope", "jdbc-url")

df = (spark.read.format("jdbc")
      .option("url", jdbc_url)
      .option("dbtable", "public.orders")
      .option("user", user)
      .option("password", pwd)
      .load())

End-to-end JDBC + secrets example: official tutorial. (Microsoft Learn)

B) Reference secrets in Spark config (preview) or environment variables

Cluster config supports {{secrets/<scope>/<key>}} placeholders:

  • Spark conf: spark.password {{secrets/my-db-scope/db-password}} Use later: spark.conf.get("spark.password")
  • Env var: MY_DB_PWD={{secrets/my-db-scope/db-password}} Then use $MY_DB_PWD in an init script or code.
    (Mind the security considerations in that doc.) (Microsoft Learn)

Redaction: Databricks replaces printed secret literals with [REDACTED] in notebook output (and attempts to redact in SQL too), but follow permission best practices—redaction isn’t a substitute for access control. (Microsoft Learn)


Permissions (ACLs) for secret scopes

Secret permissions are at scope level (READ / WRITE / MANAGE). Use the CLI to manage ACLs:

# Grant
databricks secrets put-acl my-db-scope alice@example.com READ
databricks secrets put-acl my-db-scope data-engineers MANAGE

# View
databricks secrets list-acls my-db-scope
databricks secrets get-acl  my-db-scope alice@example.com

# Revoke
databricks secrets delete-acl my-db-scope alice@example.com

Notes:

  • The scope creator has MANAGE by default.
  • With AKV-backed scopes, anyone with access to the scope can access all secrets in that vault—use separate vaults to isolate. (Microsoft Learn)

Use-cases

  • Database credentials (JDBC/ODBC/SQL Warehouse apps).
  • API tokens (Salesforce, Stripe, Slack, ServiceNow, etc.).
  • Cloud keys (ADLS SAS, service principal client secrets).
  • Webhook endpoints / SMTP creds for alerting jobs.

Best practices & gotchas

  • Prefer AKV-backed scopes when your org standardizes on Azure-native secret lifecycle/rotation; manage secrets in AKV. (Microsoft Learn)
  • Use Databricks-backed scopes for quick start, PoCs, or multi-cloud teams without AKV.
  • Do not print secrets; rely on redaction only as a last line of defense. Lock down who can run notebooks on clusters that access secrets. (Microsoft Learn, Stack Overflow)
  • For Spark conf/env-var secret refs, review the security considerations (who can read configs/env vars, log visibility). (Microsoft Learn)
  • Name scopes by app/team (e.g., etl-prod, bi-prod) rather than individuals; rotate secrets regularly.

Quick “cheat sheet”

AKV-backed scope (UI):

  1. KV Permission model = Vault access policy; set Networking/Firewall as needed. (Microsoft Learn)
  2. https://<workspace>#secrets/createScope → name scope → DNS Name + Resource ID → Create. (Microsoft Learn)

Databricks-backed scope (CLI):

databricks auth login
databricks secrets create-scope my-db-scope
databricks secrets put-secret --json '{"scope":"my-db-scope","key":"db-user","string_value":"demo"}'
databricks secrets list-scopes
databricks secrets list-secrets my-db-scope

(Microsoft Learn)

Use in code:

pwd = dbutils.secrets.get("my-db-scope","db-password")

(Databricks Documentation)


References (key docs)

Related Posts

Strategic Cloud Financial Management With Certified FinOps Professional Training

Introduction The Certified FinOps Professional program is a transformative milestone for any engineer or manager looking to master the intersection of finance, technology, and business operations. This…

Read More

Professional Certified FinOps Engineer improves financial performance visibility systems

Introduction In the modern landscape of cloud infrastructure, technical expertise alone is no longer sufficient to drive enterprise success. The Certified FinOps Engineer program has emerged as…

Read More

Complete Cloud Financial Management Guide for Certified FinOps Manager

Introduction The Certified FinOps Manager program is designed to bridge the widening gap between cloud engineering and financial accountability. As cloud environments become more complex, organizations require…

Read More

Industry Ready FinOps Knowledge Through Certified FinOps Architect Program

Introduction The Certified FinOps Architect certification is designed to help professionals bridge the gap between cloud financial management and operational efficiency. This guide is tailored for working…

Read More

Advance Your Data Management Career with CDOM – Certified DataOps Manager

The CDOM – Certified DataOps Manager is a breakthrough certification designed for professionals who want to master the intersection of data engineering and operational agility. This guide…

Read More

Future focused learning with CDOA – Certified DataOps Architect certification

Introduction The CDOA – Certified DataOps Architect is a professional designed to bridge the gap between data engineering and operational excellence. This guide is written for engineers…

Read More