Databricks

Databricks Secret Scopesで実現する認証情報の安全な管理

2026-03-26
更新: 2026-03-27
NicheeLab編集部

データベースのパスワード、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の仕組み

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名だけ切り替えれば環境を切り替えられます。

2種類のバックエンド比較表

比較項目Databricks-backed ScopeKey Vault / Secrets Manager-backed Scope
シークレットの保存先Databricksの内部暗号化ストレージAzure Key Vault / AWS Secrets Manager
作成方法Databricks CLI / Secrets APIDatabricks 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のみで完結する環境全社的なシークレット管理基盤がある環境

CLI/APIによる作成・管理

Databricks CLIを使ったSecret Scopeとシークレットの管理コマンドを示します。

Databricks-backed 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

Key Vault-backed Scopeの作成(Azure)

# 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のみ可能

Secrets REST APIの利用

# 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"
  }'

PythonコードでのSecret利用例

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/")

Secret Redaction の挙動

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にアクセスできるか」を制御することが重要です。

ACL(アクセス制御リスト)

Secret ScopeにはScope単位でACLを設定できます(Premiumプラン以上)。 権限レベルは3種類です。

権限レベルできること付与対象の例
MANAGEACLの変更、シークレットの追加/削除/読み取り、Scopeの設定変更管理者、Scope作成者
WRITEシークレットの追加/更新(読み取りも可能)CI/CDパイプラインのService Principal
READdbutils.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-engineers

試験で問われるポイント

Secret ScopesはData Engineer Associate / Professionalの両方で出題されます。 以下の頻出パターンを押さえてください。

  • 「Notebookでシークレットをprint()した際の表示」→ [REDACTED]と表示される(Secret Redaction)
  • 「シークレットを安全に取得するAPI」→ dbutils.secrets.get(scope=..., key=...)
  • 「Databricks-backed ScopeとKey Vault-backed Scopeの違い」→ 管理場所・シークレット操作の主体が異なる
  • 「Secret ScopeのACL権限の種類」→ MANAGE / READ / WRITE の3種類
  • 「パスワードをコードにハードコードする代わりに使うべき機能」→ Secret Scope
  • 「dbutils.secrets.list()の返り値」→ キー名のリスト(値は返さない。メタデータのみ)

問題で確認

Data Engineer / Security

問題 1

データエンジニアがNotebookでdbutils.secrets.get(scope='prod', key='db-pass')を呼び出し、取得した値をprint()で出力した。Notebookの出力セルに表示される内容として正しいものはどれか。

  1. データベースのパスワードがプレーンテキストで表示される
  2. [REDACTED]と表示され、実際の値はマスキングされる
  3. エラーが発生し、Notebookの出力にはスタックトレースが表示される
  4. ハッシュ化されたパスワード値(SHA-256)が表示される

正解: 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にアクセスできます。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Databricks

Databricks資格一覧|全7試験・難易度・勉強法

Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...

Databricks

Databricks試験の難易度ランキング|全7資格を徹底比較

Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...

Databricks

Databricks資格の勉強方法|最短合格ルートと学習時間の目安

Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...

Databricks

Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略

Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...

Databricks

Databricks Data Engineer Professional完全解説|上級試験の攻略法

Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...

Databricksの記事一覧 (105件)
© 2026 NicheeLab All rights reserved.