本番ジョブやCI/CDパイプラインで「誰かの個人アカウント」の認証情報を使っていませんか? 担当者が退職するとトークンが無効化され、パイプラインが一斉に止まる——これは多くの組織で実際に起きるインシデントです。Service Principal(サービスプリンシパル)はこの問題を解決する「機械専用のID」です。 人間のユーザーではなく、アプリケーション・自動化プロセス・CI/CDツールが Databricks API を呼び出すために使用します。
この記事では、Service Principalの作成から OAuth M2M 認証、Unity Catalog権限の付与、CI/CD連携、 そしてPATとの比較まで、実務と資格試験(Data Engineer Associate / Professional)の両面で必要な知識を整理します。
Service Principalは、Databricksのアカウントレベルで管理される非人間用のセキュリティプリンシパルです。 人間のユーザーと同様に、Unity CatalogのGRANT/REVOKEで権限を付与でき、監査ログにも操作が記録されます。 以下が人間ユーザーとの主な違いです。
Service Principalは3つの方法で作成できます。環境規模と運用方針に応じて選択します。
Account Console → User Management → Service Principals → Add service principal で作成。 小規模な環境や初期検証に適しています。ワークスペースへの割り当てもUIから行えます。
# 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"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に残ります。
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のように長期間有効なトークンを持ち続けるリスクがなく、セキュリティ上の利点があります。
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`;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| 比較項目 | Personal Access Token(PAT) | OAuth M2M(Service Principal) |
|---|---|---|
| 紐づく主体 | 人間のユーザーアカウント | Service Principal(機械ID) |
| 有効期限 | 無期限に設定可能(リスク大) | トークンは短時間(デフォルト1時間)で失効 |
| 権限範囲 | ユーザーの全権限を継承 | GRANT/REVOKEで最小限に制限可能 |
| 退職・異動時 | ユーザー無効化でトークンも失効。依存する自動化が停止 | 人事異動の影響なし |
| 監査性 | 「ユーザーAのPAT」としか記録されない | Service Principalの名前で操作が記録される |
| 推奨用途 | 個人の開発時・一時的な手動作業 | CI/CD・ジョブ・自動化・本番運用 |
| 管理コスト | ユーザーごとにトークン管理が分散 | Terraform/SCIMで一元管理可能 |
Service Principalは Data Engineer Associate / Professional の両方で出題される重要トピックです。 以下のパターンを整理しておきましょう。
Data Engineer / Security
問題 1
本番ETLジョブがデータエンジニアAのPersonal Access Token(PAT)で認証されている。エンジニアAが退職した後もジョブを安定稼働させるために、管理者が行うべき対応として最も適切なものはどれか。
正解: 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レベルで付与するため、ワークスペースをまたいだデータアクセス制御も一元管理できます。
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の出題...