データベースのパスワード、API キー、ストレージアカウントの接続文字列——これらの認証情報を Notebook のセルやジョブ設定にハードコードしていませんか?Secret Scopeは、Databricksが提供するシークレット管理機能で、 認証情報をコードから分離し、dbutils.secrets.getで安全に取得する仕組みです。 Notebook上では取得した値が自動的に[REDACTED]に置換されるため、 画面共有やNotebookエクスポート時の漏洩リスクを低減します。
この記事では、Secret Scopeの2種類のバックエンド(Databricks-backed / Key Vault-backed)の比較、 CLI/APIによる作成・管理、Pythonコードでの利用例、ACL設計、 そしてData Engineer Associate / Professional試験で出題されるポイントを整理します。
Secret Scopeは「シークレットの論理的なコンテナ」です。1つのScopeに複数のキー(シークレット)を格納でき、 Scopeごとにアクセス制御(ACL)を設定します。構造は以下のようになります。
Secret Scope: "production-secrets"
├── key: "db-password" → value: "P@ssw0rd123"
├── key: "api-key" → value: "sk-abc123..."
└── key: "storage-account" → value: "DefaultEndpoints..."
Secret Scope: "development-secrets"
├── key: "db-password" → value: "dev-password"
└── key: "api-key" → value: "sk-dev..."
# Notebookからの利用
password = dbutils.secrets.get(scope="production-secrets", key="db-password")
# → 変数passwordに値が入るが、print(password)すると [REDACTED] と表示シークレットはScope名とKey名の組み合わせで一意に特定されるため、 環境(production / development / staging)ごとにScopeを分け、同じKey名でシークレットを管理するのが一般的です。 コードを変えずにScope名だけ切り替えれば環境を切り替えられます。
| 比較項目 | Databricks-backed Scope | Key Vault / Secrets Manager-backed Scope |
|---|---|---|
| シークレットの保存先 | Databricksの内部暗号化ストレージ | Azure Key Vault / AWS Secrets Manager |
| 作成方法 | Databricks CLI / Secrets API | Databricks CLI + Key Vault/SM設定 |
| シークレットの管理 | Databricks側で追加・更新・削除 | Key Vault / Secrets Manager側で管理 |
| ACL制御 | Databricks ACL(MANAGE/READ/WRITE) | Key Vault/SMのアクセスポリシー + Databricks ACL |
| クラウド依存性 | なし(マルチクラウド対応) | 特定のクラウドに依存 |
| 監査ログ | Databricksの監査ログのみ | Databricks + Key Vault/SMの両方で記録 |
| ローテーション | Secrets APIで手動更新 | Key Vault/SMの自動ローテーション機能を活用可能 |
| 推奨ユースケース | Databricksのみで完結する環境 | 全社的なシークレット管理基盤がある環境 |
Databricks CLIを使ったSecret Scopeとシークレットの管理コマンドを示します。
# Scopeの作成
databricks secrets create-scope --scope production-secrets
# シークレットの追加(値はプロンプトで入力)
databricks secrets put-secret --scope production-secrets --key db-password
# シークレットの追加(文字列を直接指定)
databricks secrets put-secret --scope production-secrets \
--key api-key --string-value "sk-abc123..."
# Scope一覧の表示
databricks secrets list-scopes
# Scope内のキー一覧(値は表示されない)
databricks secrets list-secrets --scope production-secrets
# シークレットの削除
databricks secrets delete-secret --scope production-secrets --key api-key
# Scopeの削除(配下の全シークレットも削除)
databricks secrets delete-scope --scope production-secrets# Azure Key Vault-backed Scopeの作成
databricks secrets create-scope --scope kv-production \
--scope-backend-type AZURE_KEYVAULT \
--resource-id "/subscriptions/<sub_id>/resourceGroups/<rg>/providers/Microsoft.KeyVault/vaults/<vault_name>" \
--dns-name "https://<vault_name>.vault.azure.net/"
# Key Vault-backed Scopeではシークレットの追加/更新/削除はKey Vault側で実施
# Databricksからはdbutils.secrets.getでREADのみ可能# REST APIでScope一覧を取得
curl -X GET "https://<workspace_url>/api/2.0/secrets/scopes/list" \
-H "Authorization: Bearer <token>"
# REST APIでシークレットを追加
curl -X POST "https://<workspace_url>/api/2.0/secrets/put" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"scope": "production-secrets",
"key": "db-password",
"string_value": "P@ssw0rd123"
}'Notebookやジョブ内でシークレットを利用する実装パターンを示します。
# パターン1: JDBCデータベース接続
jdbc_url = "jdbc:postgresql://prod-db.example.com:5432/analytics"
username = dbutils.secrets.get(scope="production-secrets", key="db-username")
password = dbutils.secrets.get(scope="production-secrets", key="db-password")
df = (spark.read
.format("jdbc")
.option("url", jdbc_url)
.option("dbtable", "public.orders")
.option("user", username)
.option("password", password)
.load())
# パターン2: 外部APIへのリクエスト
import requests
api_key = dbutils.secrets.get(scope="production-secrets", key="api-key")
response = requests.get(
"https://api.example.com/data",
headers={"Authorization": f"Bearer {api_key}"}
)
# パターン3: Azure Storage接続(Spark Config経由)
storage_key = dbutils.secrets.get(scope="production-secrets", key="storage-key")
spark.conf.set(
"fs.azure.account.key.mystorageaccount.dfs.core.windows.net",
storage_key
)
df = spark.read.parquet("abfss://[email protected]/data/")Databricksは、dbutils.secrets.getで取得した値がNotebookの出力セルに表示されるとき、 自動的に[REDACTED]に置換します。これはNotebook UIだけでなく、 ジョブの出力ログ、display()関数の結果にも適用されます。
# 以下のコードを実行すると...
password = dbutils.secrets.get(scope="production-secrets", key="db-password")
print(password)
# → Notebook出力: [REDACTED]
print(f"Password is: {password}")
# → Notebook出力: Password is: [REDACTED]
# ただし、変数としての値は正常に使える
# JDBC接続やAPI呼び出しには問題なく利用可能Secret Redactionは表示上のマスキングであり、シークレット値がメモリ上から消えるわけではありません。 悪意あるコード(シークレット値を1文字ずつ出力するなど)に対しては完全な防御にはなりません。 そのため、Secret ScopeのACLを併用して「誰がどのScopeにアクセスできるか」を制御することが重要です。
Secret ScopeにはScope単位でACLを設定できます(Premiumプラン以上)。 権限レベルは3種類です。
| 権限レベル | できること | 付与対象の例 |
|---|---|---|
| MANAGE | ACLの変更、シークレットの追加/削除/読み取り、Scopeの設定変更 | 管理者、Scope作成者 |
| WRITE | シークレットの追加/更新(読み取りも可能) | CI/CDパイプラインのService Principal |
| READ | dbutils.secrets.getでシークレットを読み取り | ジョブ実行用のService Principal、開発者 |
# ACLの設定(Databricks CLI)
databricks secrets put-acl --scope production-secrets \
--principal data-engineers --permission READ
databricks secrets put-acl --scope production-secrets \
--principal cicd-sp --permission WRITE
# ACLの一覧表示
databricks secrets list-acls --scope production-secrets
# ACLの削除
databricks secrets delete-acl --scope production-secrets \
--principal data-engineersSecret ScopesはData Engineer Associate / Professionalの両方で出題されます。 以下の頻出パターンを押さえてください。
[REDACTED]と表示される(Secret Redaction)dbutils.secrets.get(scope=..., key=...)Data Engineer / Security
問題 1
データエンジニアがNotebookでdbutils.secrets.get(scope='prod', key='db-pass')を呼び出し、取得した値をprint()で出力した。Notebookの出力セルに表示される内容として正しいものはどれか。
正解: B
Databricksのdbutils.secrets.getで取得した値は、Notebookの出力セルに表示される際にSecret Redactionにより自動的に[REDACTED]に置換されます。これはprint()、display()、f-string内での展開いずれにも適用されます。プレーンテキストやハッシュ値が表示されることはありません。エラーにもなりません。ただし、変数としての値はメモリ上で正常に保持されるため、JDBC接続やAPI呼び出しには問題なく使用できます。
Databricks-backed ScopeとKey Vault-backed Scopeはどちらを選ぶべきですか?
組織がAzure Key VaultやAWS Secrets Managerで既にシークレットを一元管理している場合は、Key Vault-backed Scope(またはSecrets Manager-backed Scope)を選択し、既存の管理体系に統合するのが推奨です。Databricksのみでシークレットを管理する場合や、マルチクラウド環境でクラウド非依存にしたい場合はDatabricks-backed Scopeが適しています。Key Vault-backedの場合、Scope内のシークレット管理(作成・更新・削除)はKey Vault側で行い、DatabricksからはREADのみのアクセスになります。
Secret Redactionとは何ですか?Notebook上でシークレットの値を確認できますか?
Secret Redactionは、dbutils.secrets.getで取得したシークレット値がNotebookの出力セルに表示される際、自動的に[REDACTED]に置換されるセキュリティ機能です。print()やdisplay()でシークレット値を出力しても、画面上では[REDACTED]と表示されます。これにより、Notebookの共有時にシークレットが意図せず漏洩するのを防ぎます。ただし、シークレット値はコード内の変数としては正常に利用できるため、API呼び出しやDB接続には問題なく使えます。
Secret ScopeのACL(MANAGE/READ/WRITE)は誰が設定できますか?
Secret ScopeのACLはMANAGE権限を持つユーザーが設定できます。Scopeの作成者は自動的にMANAGE権限を取得します。MANAGE権限を持つユーザーはACLの変更・シークレットの追加/削除/一覧表示が可能です。READ権限はdbutils.secrets.getでシークレットを読み取る権限、WRITE権限はシークレットの追加/更新の権限です。Premium以上のプランでは、ACLを有効化してきめ細かい制御が可能です。Standard以下ではACLが利用できず、全ユーザーが全Scopeにアクセスできます。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Databricks資格一覧|全7試験・難易度・勉強法
Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...
Databricks試験の難易度ランキング|全7資格を徹底比較
Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...
Databricks資格の勉強方法|最短合格ルートと学習時間の目安
Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...
Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略
Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...
Databricks Data Engineer Professional完全解説|上級試験の攻略法
Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...