Databricks

Databricks Service Principals 実務と資格対策: 機械アカウント/自動化/権限委譲

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

本番ジョブやCI/CDパイプラインで「誰かの個人アカウント」の認証情報を使っていませんか? 担当者が退職するとトークンが無効化され、パイプラインが一斉に止まる——これは多くの組織で実際に起きるインシデントです。Service Principal(サービスプリンシパル)はこの問題を解決する「機械専用のID」です。 人間のユーザーではなく、アプリケーション・自動化プロセス・CI/CDツールが Databricks API を呼び出すために使用します。

この記事では、Service Principalの作成から OAuth M2M 認証、Unity Catalog権限の付与、CI/CD連携、 そしてPATとの比較まで、実務と資格試験(Data Engineer Associate / Professional)の両面で必要な知識を整理します。

Service Principalとは何か

Service Principalは、Databricksのアカウントレベルで管理される非人間用のセキュリティプリンシパルです。 人間のユーザーと同様に、Unity CatalogのGRANT/REVOKEで権限を付与でき、監査ログにも操作が記録されます。 以下が人間ユーザーとの主な違いです。

  • 対話的なログイン(UI/SSO)は行わない。API経由でのみ認証する
  • 個人のメールアドレスではなく、Application IDで識別される
  • 退職・異動の影響を受けない。チームの人事異動でパイプラインが止まるリスクを排除
  • 最小権限の原則を適用しやすい。必要なテーブル・ジョブだけに権限を絞れる

Service Principalの作成方法

Service Principalは3つの方法で作成できます。環境規模と運用方針に応じて選択します。

方法1: Databricks UI(Admin Console)

Account Console → User Management → Service Principals → Add service principal で作成。 小規模な環境や初期検証に適しています。ワークスペースへの割り当てもUIから行えます。

方法2: SCIM API(プログラマティック)

# SCIM APIでService Principalを作成
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": "cicd-pipeline-sp",
    "entitlements": [
      { "value": "workspace-access" }
    ]
  }'

# レスポンスからapplicationIdを取得
# → "applicationId": "12345678-abcd-efgh-ijkl-123456789012"

方法3: Terraform(IaCによる管理)

resource "databricks_service_principal" "cicd_sp" {
  display_name = "cicd-pipeline-sp"
}

resource "databricks_service_principal_role" "cicd_sp_role" {
  service_principal_id = databricks_service_principal.cicd_sp.id
  role                 = "roles/workspace.user"
}

# ワークスペースへの割り当て
resource "databricks_mws_permission_assignment" "cicd_ws" {
  workspace_id = var.workspace_id
  principal_id = databricks_service_principal.cicd_sp.id
  permissions  = ["USER"]
}

Terraformは本番環境でのService Principal管理に最も推奨される方法です。 作成・権限付与・ワークスペース割り当てをすべてコードで管理でき、変更履歴がGitに残ります。

OAuth M2Mトークン取得のフロー

Service PrincipalがDatabricks APIを呼び出す際の認証方式として、OAuth Machine-to-Machine(M2M)が推奨されます。 これはOAuth 2.0のClient Credentials Grantに基づくフローです。

# ステップ1: Service Principalにシークレットを生成(Account Console or API)
# → Client ID: <application_id>
# → Client Secret: <generated_secret>

# ステップ2: OAuthトークンエンドポイントにリクエスト
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=<application_id>" \
  -d "client_secret=<generated_secret>" \
  -d "scope=all-apis"

# ステップ3: レスポンスのaccess_tokenをAPI呼び出しに使用
# {
#   "access_token": "eyJhbGciOiJSUzI1NiIs...",
#   "token_type": "Bearer",
#   "expires_in": 3600
# }

# ステップ4: 取得したトークンでAPIを呼び出す
curl -X GET "https://<workspace_url>/api/2.0/clusters/list" \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIs..."

OAuth M2Mトークンは有効期限(デフォルト1時間)があり、期限切れ時は再取得が必要です。 PATのように長期間有効なトークンを持ち続けるリスクがなく、セキュリティ上の利点があります。

Unity Catalog権限の付与

Service PrincipalにUnity Catalogの権限を付与する方法は、人間のユーザーと同じくGRANT文を使います。 最小権限の原則に従い、ジョブが実際にアクセスするテーブルだけにSELECT/MODIFYを付与します。

-- ETLジョブ用SPに必要最小限の権限を付与
GRANT USAGE ON CATALOG production TO `cicd-pipeline-sp`;
GRANT USAGE ON SCHEMA production.sales TO `cicd-pipeline-sp`;
GRANT SELECT ON TABLE production.sales.raw_orders TO `cicd-pipeline-sp`;
GRANT MODIFY ON TABLE production.sales.cleaned_orders TO `cicd-pipeline-sp`;

-- Schema内にテーブルを新規作成する権限
GRANT CREATE TABLE ON SCHEMA production.sales TO `cicd-pipeline-sp`;

-- 権限の確認
SHOW GRANTS TO `cicd-pipeline-sp`;

CI/CD連携(GitHub Actions例)

GitHub ActionsからDatabricksジョブをトリガーする実装例です。 Service PrincipalのClient IDとClient SecretをGitHub Secretsに保存し、ワークフロー内でOAuthトークンを取得します。

# .github/workflows/deploy-databricks-job.yml
name: Deploy Databricks Job
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: Configure Databricks Auth
        env:
          DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }}
          DATABRICKS_CLIENT_ID: ${{ secrets.SP_CLIENT_ID }}
          DATABRICKS_CLIENT_SECRET: ${{ secrets.SP_CLIENT_SECRET }}
        run: |
          databricks configure --host $DATABRICKS_HOST \
            --client-id $DATABRICKS_CLIENT_ID \
            --client-secret $DATABRICKS_CLIENT_SECRET
      - name: Deploy Job
        run: databricks jobs create --json @job-definition.json

PAT vs OAuth M2M 比較表

比較項目Personal Access Token(PAT)OAuth M2M(Service Principal)
紐づく主体人間のユーザーアカウントService Principal(機械ID)
有効期限無期限に設定可能(リスク大)トークンは短時間(デフォルト1時間)で失効
権限範囲ユーザーの全権限を継承GRANT/REVOKEで最小限に制限可能
退職・異動時ユーザー無効化でトークンも失効。依存する自動化が停止人事異動の影響なし
監査性「ユーザーAのPAT」としか記録されないService Principalの名前で操作が記録される
推奨用途個人の開発時・一時的な手動作業CI/CD・ジョブ・自動化・本番運用
管理コストユーザーごとにトークン管理が分散Terraform/SCIMで一元管理可能

最小権限設計のベストプラクティス

  • 用途別にService Principalを分離: ETL用、モデルサービング用、CI/CD用など、 用途ごとにSPを作成し、それぞれに必要最小限の権限を付与する
  • ALL PRIVILEGESは使わない: 利便性のためにALL PRIVILEGESを付与すると、 将来そのSPの認証情報が漏洩した際の影響範囲が広がる
  • PATを本番自動化に使わない: PATは個人の開発・デバッグ用に限定し、 自動化にはOAuth M2Mを使用する
  • Client Secretはシークレットストアに保管: Databricks Secret Scopeや クラウドのシークレットマネージャー(AWS Secrets Manager / Azure Key Vault)に保管し、 コードやCI/CD設定にハードコードしない
  • 定期的な棚卸し: 不要になったService Principalやその権限を定期的にレビューし、 使われていないSPは無効化する

試験で問われるポイント

Service Principalは Data Engineer Associate / Professional の両方で出題される重要トピックです。 以下のパターンを整理しておきましょう。

  • 「CI/CDパイプラインから安全にDatabricks APIを呼び出すにはどうするか」→ Service Principal + OAuth M2M
  • 「担当者退職時にジョブが止まるリスクを防ぐには」→ PATではなくService Principalを使用
  • 「ジョブクラスタのSingle User Modeで指定するプリンシパルは」→ ジョブオーナーまたはService Principal
  • 「Service Principalにテーブルアクセスを許可するには」→ GRANT USAGE + GRANT SELECT

問題で確認

Data Engineer / Security

問題 1

本番ETLジョブがデータエンジニアAのPersonal Access Token(PAT)で認証されている。エンジニアAが退職した後もジョブを安定稼働させるために、管理者が行うべき対応として最も適切なものはどれか。

  1. エンジニアAのPATを別のチームメンバーに引き継ぎ、そのメンバーの名前でトークンを再発行する
  2. Service Principalを作成し、OAuth M2Mトークンでジョブの認証を切り替え、必要最小限のUnity Catalog権限をGRANTする
  3. エンジニアAのアカウントを退職後も残し、PATの有効期限を無期限に設定する
  4. ジョブの認証を削除し、クラスタのAccess ModeをNo Isolation Shared Modeに変更して認証なしで実行する

正解: B

Service Principalは人間のユーザーに依存しない機械専用IDであり、退職の影響を受けません。OAuth M2Mトークンは短期間で失効するためPATより安全で、GRANT/REVOKEで最小権限を設定できます。選択肢AはPATの引き継ぎ自体がセキュリティ上の問題(監査ログの主体が不正確になる)。選択肢Cは退職者のアカウント残存がコンプライアンス違反。選択肢DのNo Isolation Shared ModeはUnity Catalog非対応であり、認証なしの実行はセキュリティ上許容されません。

よくある質問

Service PrincipalとPersonal Access Token(PAT)の違いは何ですか?

PATは人間のユーザーアカウントに紐づく認証トークンで、そのユーザーのすべての権限を継承します。Service Principalはアプリケーション専用のIDで、GRANT/REVOKEで必要最小限の権限だけを付与できます。PATはユーザーの退職時に無効化が必要で、誰がトークンを使ったか追跡しにくい問題があります。CI/CDやジョブの自動化にはService Principal + OAuth M2Mトークンが推奨されます。

Service Principalの作成にはどの権限が必要ですか?

Databricksのアカウントレベルで Service Principalを作成するには、Account Admin権限が必要です。ワークスペースへの追加はWorkspace Admin権限で行えます。SCIM APIを使ったプログラマティックな作成でも同様のAdmin権限が必要です。Terraform databricks_service_principalリソースでの自動プロビジョニングも可能で、この場合はTerraform実行用のService PrincipalにAccount Admin権限を付与します。

1つのService Principalを複数のワークスペースで共有できますか?

はい。Service Principalはアカウントレベルで作成され、必要なワークスペースに割り当てて共有できます。例えば、CI/CDパイプライン用のService Principalを開発・ステージング・本番の3ワークスペースに追加し、各ワークスペースで異なる権限を付与する設計が可能です。Unity Catalogの権限はMetastoreレベルで付与するため、ワークスペースをまたいだデータアクセス制御も一元管理できます。

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

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.