Databricks

DatabricksにおけるOAuth Machine-to-Machine実装

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

Databricksへの自動化アクセス(CI/CDパイプライン、Airflowジョブ、外部アプリケーション)では、 人間のユーザーではなくプログラムが認証する必要があります。従来はPersonal Access Token(PAT)が広く使われていましたが、 2024年以降DatabricksはOAuth Machine-to-Machine(M2M)認証を推奨方式に位置づけています。

この記事では、OAuth M2Mの仕組み(Client Credentials Flow)、サービスプリンシパルの作成から OAuthアプリ登録・トークン取得までの具体的な手順、PATとの比較、そして試験で問われるポイントを解説します。

なぜOAuth M2Mが必要か

PATには以下の運用上の課題があります。

  • PATは個人ユーザーに紐づくため、退職・異動でトークンが孤立するリスクがある
  • 有効期限の管理が手動で、期限切れによるパイプライン障害が起きやすい
  • PATが漏洩した場合、そのユーザーの全権限でアクセスされる
  • PATの使用状況の監査が困難(どのPATがどのパイプラインで使われているか不明確)

OAuth M2Mは、サービスプリンシパル(人間でないIDエンティティ)とOAuth 2.0 Client Credentials Flowを組み合わせることで、 これらの課題を構造的に解決します。

OAuth 2.0 Client Credentials Flow

OAuth M2MはOAuth 2.0のClient Credentials Grantを使用します。 ユーザーの操作を一切介さず、クライアント(プログラム)がClient IDとClient Secretを使って直接トークンを取得するフローです。

  1. クライアントがトークンリクエストを送信: Client IDとClient Secretを含むPOSTリクエストをDatabricksのトークンエンドポイントに送信
  2. Databricksがクライアントを認証: Client IDとSecretを検証し、サービスプリンシパルの権限を確認
  3. アクセストークンを発行: 短寿命のBearer Token(デフォルト1時間)を返却
  4. トークンでAPIにアクセス: 取得したトークンをAuthorizationヘッダに付与してDatabricks APIを呼び出す

Authorization Code Flowと異なり、ブラウザリダイレクトやユーザーの同意画面はありません。 完全に機械同士のやり取りで完結するため「Machine-to-Machine」と呼ばれます。

セットアップ手順

OAuth M2M認証を構成するステップは以下の3つです。

ステップ1: サービスプリンシパルの作成

Account Consoleまたはdatabricks service-principals create CLIコマンドで サービスプリンシパルを作成します。

# Databricks CLIでサービスプリンシパルを作成
databricks service-principals create \
  --application-id "<application-id>" \
  --display-name "ci-cd-pipeline-sp"

# または Account SCIM API経由
curl -X POST \
  "https://accounts.cloud.databricks.com/api/2.0/accounts/<account-id>/scim/v2/ServicePrincipals" \
  -H "Authorization: Bearer <admin-token>" \
  -H "Content-Type: application/json" \
  -d '{
    "displayName": "ci-cd-pipeline-sp",
    "entitlements": [
      { "value": "workspace-access" }
    ]
  }'

ステップ2: OAuthアプリケーション(Client Secret)の登録

サービスプリンシパルに対してOAuth Secretを生成します。

# サービスプリンシパルのOAuth Secretを生成
curl -X POST \
  "https://accounts.cloud.databricks.com/api/2.0/accounts/<account-id>/servicePrincipals/<sp-id>/credentials/secrets" \
  -H "Authorization: Bearer <admin-token>"

# レスポンス例
{
  "id": "secret-id-xxxx",
  "secret": "dose...xxxx",   ← この値を安全に保管
  "status": "ACTIVE",
  "create_time": "2026-03-26T10:00:00.000Z"
}

注意: Client Secretは作成時のレスポンスでのみ返却されます。 後から取得することはできないため、必ずシークレットマネージャー(AWS Secrets Manager, Azure Key Vault等)に保管してください。

ステップ3: トークンの取得

Client IDとClient Secretを使ってアクセストークンを取得します。

# アクセストークンの取得
curl -X POST \
  "https://<workspace-url>/oidc/v1/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=<service-principal-client-id>" \
  -d "client_secret=<client-secret>" \
  -d "scope=all-apis"

# レスポンス例
{
  "access_token": "eyJhbGciOiJSUzI1NiI...",
  "token_type": "Bearer",
  "expires_in": 3600
}

取得したアクセストークンをAuthorizationヘッダに付与してDatabricks APIを呼び出します。

# トークンを使ってジョブ一覧を取得
curl -X GET \
  "https://<workspace-url>/api/2.1/jobs/list" \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiI..."

PAT vs OAuth M2M 比較表

観点Personal Access Token (PAT)OAuth M2M (Client Credentials)
紐づく主体個人ユーザーサービスプリンシパル
トークン寿命設定可能(無期限も可)短寿命(デフォルト1時間)
自動更新不可(手動で再発行)Client Credentialsで自動取得
権限スコープ発行ユーザーの全権限サービスプリンシパルに付与した権限のみ
退職・異動への耐性低(ユーザー削除でトークン無効化が必要)高(サービスプリンシパルは人に依存しない)
監査のしやすさ低(どのPATがどのシステムで使用されているか不明確)高(サービスプリンシパル名で特定可能)
Databricksの推奨度レガシー(新規利用は最小限に)推奨(2024年以降の標準方式)

CI/CDパイプラインでの活用パターン

OAuth M2MをCI/CDパイプラインに組み込む際の典型的なパターンを示します。

# GitHub Actions の例
name: Deploy Databricks Jobs
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install Databricks CLI
        run: pip install databricks-cli

      - name: Get OAuth Token
        id: token
        run: |
          TOKEN=$(curl -s -X POST \
            "${{ secrets.DATABRICKS_HOST }}/oidc/v1/token" \
            -d "grant_type=client_credentials" \
            -d "client_id=${{ secrets.DATABRICKS_CLIENT_ID }}" \
            -d "client_secret=${{ secrets.DATABRICKS_CLIENT_SECRET }}" \
            -d "scope=all-apis" | jq -r '.access_token')
          echo "::add-mask::$TOKEN"
          echo "token=$TOKEN" >> $GITHUB_OUTPUT

      - name: Deploy with Databricks CLI
        run: databricks bundle deploy --target production
        env:
          DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }}
          DATABRICKS_TOKEN: ${{ steps.token.outputs.token }}

Client IDとClient SecretはGitHub Secretsに格納し、コードにハードコードしない点が重要です。

セキュリティ上の注意点

  • Client Secretのローテーション: 定期的に新しいSecretを生成し、古いSecretを無効化する。 Secretの有効期間ポリシーを組織で定めておく
  • 最小権限の原則: サービスプリンシパルにはパイプラインに必要な最小限の権限のみ付与する。 CAN_MANAGE_RUNではなくCAN_VIEW等、可能な限り読み取り専用にする
  • Secretの保管: AWS Secrets Manager、Azure Key Vault、HashiCorp Vault等のシークレットマネージャーを使い、 環境変数やコード内にSecretを直接埋め込まない
  • 監査ログの確認: サービスプリンシパルの操作はDatabricksの監査ログに記録される。 不審なアクセスパターンを検知するアラートを設定する

試験で問われるポイント

  • 「CI/CDパイプラインで推奨される認証方式は」→ OAuth M2M(サービスプリンシパル + Client Credentials)
  • 「PATのセキュリティ上の問題点は」→ 長寿命・ユーザー依存・権限スコープの広さ
  • 「OAuth M2Mのトークン取得に使うOAuth 2.0フローは」→ Client Credentials Grant
  • 「サービスプリンシパルとは何か」→ 人間でないIDエンティティ(アプリケーションやパイプライン用)

問題で確認

Security & Governance

問題 1

データプラットフォームチームはAirflowからDatabricksジョブをトリガーするパイプラインを運用している。現在はチームリーダーのPATを使って認証しているが、チームリーダーの異動に伴い認証方式を見直すことになった。セキュリティ要件を満たしつつ運用負荷を最小化する方法はどれか。

  1. サービスプリンシパルを作成し、OAuth M2M(Client Credentials Flow)でトークンを取得する方式に移行する
  2. 別のチームメンバーのPATを新たに発行して差し替える
  3. Airflowの各タスクにDatabricksのユーザー名とパスワードを環境変数で設定する
  4. Databricksワークスペースのトークン認証を無効化し、SSOのみでアクセスさせる

正解: A

PATは個人に紐づくため異動・退職で認証が途切れるリスクがあります。サービスプリンシパル+OAuth M2Mに移行すれば、人的依存がなくなり、トークンも短寿命で自動更新されるため運用負荷も低くなります。別のメンバーのPATへの差し替えは同じ問題の先送りです。ユーザー名・パスワード認証はセキュリティ上不適切で、SSO限定では機械的なAPI呼び出しができません。

よくある質問

OAuth M2MトークンとPersonal Access Token(PAT)のどちらを使うべきですか?

自動化パイプライン(CI/CD・Airflow・Prefectなど)ではOAuth M2Mを推奨します。PATはユーザー個人に紐づくため、退職・異動時にトークンが放置されるリスクがあり、有効期限の管理も手動です。OAuth M2Mはサービスプリンシパルに紐づき、トークンは短寿命(デフォルト1時間)で自動更新されるため、セキュリティとライフサイクル管理の両面で優れています。Databricksも2024年以降、自動化用途にはOAuth M2Mを推奨し、PATの新規利用は最小限に抑える方針を示しています。

OAuth M2Mトークンの有効期限はどのくらいですか?

OAuth M2Mで発行されるアクセストークンのデフォルト有効期限は1時間(3600秒)です。トークンの更新はClient Credentials Flowを再度実行するだけで完了し、リフレッシュトークンは使用しません。CI/CDパイプラインでは、各ジョブ実行の開始時にトークンを取得し、そのジョブ内で使い回す設計が一般的です。長時間実行するバッチの場合は、トークン有効期限内にリクエストを完了するか、途中でトークンを再取得するロジックを組み込みます。

OAuth M2M認証はDatabricks認定試験でどう出題されますか?

Data Engineer Professional試験の「セキュリティとガバナンス」および「ワークロード管理」ドメインで出題されます。典型的な出題パターンは「CI/CDパイプラインからDatabricksに認証する最も安全な方法」「PATの代替として推奨される認証方式」「サービスプリンシパルの用途」です。OAuth 2.0のフロー名(Client Credentials Grant)を直接問う問題は少なく、PATとの比較やサービスプリンシパルの概念理解が重視されます。

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

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.