Databricksサービスプリンシパル向けPAT生成の必要性と基本概念を解説
Databricksのサービスプリンシパルを使って何かを自動化したり、外部サービスとつなげたりする機会が出てくることがある。特にGitHubとかCI/CDみたいな外部ツールとの連携だと、セキュリティ面でもそういう仕組みはよく話題になる。けど実際、サービスプリンシパル用のPAT(Personal Access Token)を作ろうとすると、普通のユーザー用とはやり方が違っていて混乱しやすい気がする。
そういえば、以前Vendorさんとの打ち合わせでOAuth担当のエンジニアと話していた時、その人から「サービスプリンシパルのPAT作成方法知ってる?」みたいな質問を受けたことがあった。あれも急に聞かれて戸惑った記憶がある。正直言うと、その時は手順がかなり曖昧で…なんとなく調べながら進めた感じだったと思う。
一応最近だと、OAuth2.0とかREST API、それにPostmanなんかを組み合わせればできなくはないらしい。でも具体的な流れとか細かい部分は、人によって解釈や手順が微妙に違う場合もあるようだ。実際には、「こんな流れでやる」みたいな情報を断片的につまみ食いしながら進めている人も多いんじゃないかな、と少し思ったりする。
まとめると、自分の場合は本当に公式ドキュメント全部読んだわけでもないし、大まかなイメージとして「アカウントレベルのサービスプリンシパル」向けにPAT発行する必要が出てきた場面だった。画像なんかも半分くらい自作したものだった気がするけど…まあ細かいところは置いておいて、とりあえずここでは「どうやってそれっぽいやり方にたどり着いたか」をざっくり伝えようと思う。
そういえば、以前Vendorさんとの打ち合わせでOAuth担当のエンジニアと話していた時、その人から「サービスプリンシパルのPAT作成方法知ってる?」みたいな質問を受けたことがあった。あれも急に聞かれて戸惑った記憶がある。正直言うと、その時は手順がかなり曖昧で…なんとなく調べながら進めた感じだったと思う。
一応最近だと、OAuth2.0とかREST API、それにPostmanなんかを組み合わせればできなくはないらしい。でも具体的な流れとか細かい部分は、人によって解釈や手順が微妙に違う場合もあるようだ。実際には、「こんな流れでやる」みたいな情報を断片的につまみ食いしながら進めている人も多いんじゃないかな、と少し思ったりする。
まとめると、自分の場合は本当に公式ドキュメント全部読んだわけでもないし、大まかなイメージとして「アカウントレベルのサービスプリンシパル」向けにPAT発行する必要が出てきた場面だった。画像なんかも半分くらい自作したものだった気がするけど…まあ細かいところは置いておいて、とりあえずここでは「どうやってそれっぽいやり方にたどり着いたか」をざっくり伝えようと思う。
ベンダー連携時の実例から学ぶPAT生成の課題と解決アプローチ
顧客の会社から来る技術者がね、あの話を持ちかけてくることがわりとあるらしい。詳しくは覚えていないけど、「これってどうやるんだっけ?」みたいな質問だったような気もする。で、自分が「できるよ」と答えたら、その人、手順を説明してほしいと言ってきた。なんとなく流れでPostman経由でREST API使ってトークン作成する方法を見せつつ、Databricks CLIでもできるよって伝えたんだ。CLIならローカル環境でもノートブックのシェルモードからでも一応動くはず……まあ、多少違いはあると思うけど。
彼はどうもノートブックのシェルモードから発行するやり方しか知らなかったみたいで、新しくPostman経由も試すつもりだと話していた。ただ、その前にサービスプリンシパルって何なのか、一度整理したほうがいいかもしれない。Databricksの場合、「ユーザープリンシパル」という呼び方をしていて、それには大きく分けて人間(実際にメールアドレス使ってログインする人)とサービスプリンシパル(自動化用途とかで使われる非人間アカウント)の二種類が存在するとされている。まあ細かい部分はいろいろありそうだけど、大まかな雰囲気としてそんな感じだった気がする。
あと、話している途中で他の細かい情報も出てきたりして、本当はもう少し複雑な背景や例外ケースもあったような。でも全部把握し切れていたわけじゃないから、多分抜け漏れもあると思う。
彼はどうもノートブックのシェルモードから発行するやり方しか知らなかったみたいで、新しくPostman経由も試すつもりだと話していた。ただ、その前にサービスプリンシパルって何なのか、一度整理したほうがいいかもしれない。Databricksの場合、「ユーザープリンシパル」という呼び方をしていて、それには大きく分けて人間(実際にメールアドレス使ってログインする人)とサービスプリンシパル(自動化用途とかで使われる非人間アカウント)の二種類が存在するとされている。まあ細かい部分はいろいろありそうだけど、大まかな雰囲気としてそんな感じだった気がする。
あと、話している途中で他の細かい情報も出てきたりして、本当はもう少し複雑な背景や例外ケースもあったような。でも全部把握し切れていたわけじゃないから、多分抜け漏れもあると思う。
Comparison Table:
手順 | 説明 |
---|---|
PAT作成 | Databricksのユーザーアカウント用のPATは画面から直接作成可能。 |
サービスプリンシパルの設定 | UIから操作できないため、CLIまたはプログラム経由で進める必要がある。 |
OAuth for service principals | アカウント全体を跨ぐ運用にはOAuth M2Mが推奨される。 |
APIリクエスト試行 | Postmanを使用してAPIリクエストを試すことが一般的。特にAccount SCIM APIsが有効。 |
権限要件 | サービスプリンシパル発行にはアカウント管理者権限が必要であり、多くのユーザーはこの権限を持たない可能性あり。 |

人間ユーザーとサービスプリンシパルの根本的な違いとは?
サービスプリンシパルって、人間の利用者とほぼ同じ権限をつけることができる、なんて話をよく聞く。でも、何となくだけど、それだけじゃ使う意味が薄いようにも思えてくる。実際のところ、人間のユーザーだと急に休暇に入ったり、体調崩してしばらく戻ってこなかったり、ごくたまにだが会社そのものを離れることもある。そうなると、その人名義で動いていたジョブとかプロセスは、うまくいかなくなる時もあるみたい。
例えばダタブリックスのワークフロー(まあジョブみたいなもの)のオーナーが誰か一人だった場合、その人が会社からいなくなると、そのジョブ自体も無効になっちゃうケースが出てきたりするんだろうか。あと、他のツール――Power BIとか?――に接続するために発行した個人トークンも、人によっては数ヶ月で期限切れになることもあるらしい。その間オーナー本人が不在なら、新しく発行し直す手段すらないという話も聞いたことがある。
こういうゴタゴタを防ぐ方法として、「サービスプリンシパル」の活用例が少なくない気がする。機械的な処理や自動化されたアクセス向けのアイデンティティとして割り当てれば、誰か社員さんが抜けても大体の場合は止まらず動いているという印象。CI/CDパイプラインなんかでも、サービスプリンシパルを使えば安定して動作しやすいという声もちらほら耳に入ってきた。
もちろん全部うまくいくとは限らないけど、大部分の日常的な運用ではこうした仕組みのおかげで業務継続性は上げやすいように感じる。ただ、細かい点や管理コストについてはまだ試行錯誤中っぽい現場もありそう…
例えばダタブリックスのワークフロー(まあジョブみたいなもの)のオーナーが誰か一人だった場合、その人が会社からいなくなると、そのジョブ自体も無効になっちゃうケースが出てきたりするんだろうか。あと、他のツール――Power BIとか?――に接続するために発行した個人トークンも、人によっては数ヶ月で期限切れになることもあるらしい。その間オーナー本人が不在なら、新しく発行し直す手段すらないという話も聞いたことがある。
こういうゴタゴタを防ぐ方法として、「サービスプリンシパル」の活用例が少なくない気がする。機械的な処理や自動化されたアクセス向けのアイデンティティとして割り当てれば、誰か社員さんが抜けても大体の場合は止まらず動いているという印象。CI/CDパイプラインなんかでも、サービスプリンシパルを使えば安定して動作しやすいという声もちらほら耳に入ってきた。
もちろん全部うまくいくとは限らないけど、大部分の日常的な運用ではこうした仕組みのおかげで業務継続性は上げやすいように感じる。ただ、細かい点や管理コストについてはまだ試行錯誤中っぽい現場もありそう…
自動化プロセスでサービスプリンシパルが必須となる3つの理由
サービスプリンシパルって、人間のユーザーよりも、まあ大体の場合は安全だと言われているみたいです。人が使うアカウントだと、どこかで情報が漏れたりとか、何かしらの理由で無理やりパスワードを渡さなきゃいけなくなることもあると聞きますね。そう考えると、自動化用に個人とは切り離して管理できるサービスプリンシパルは、リスクをちょっと減らせる可能性があると言えるでしょう。ただ、このへんは状況によって違うかもしれません。
API経由じゃないと触れない設定や機能もわりと多くて、その場合はサービスプリンシパル経由の方が楽になることもあるっぽいです。Databricksの公式ドキュメントには、「誰が作れるか」「どうやって管理するのか」みたいな説明も一応載っています。
ただ実際に作成した後、自分自身が自動的にそのサービスプリンシパルの管理者になるものの――あれ?と思う人もいるようですが――実際にそれを使いたいなら、「ユーザー」として自分を追加しないとダメなんですよね。最初はちょっと戸惑うポイントかもしれません。
あと細かい話ですが、サービスプリンシパルの管理者だったり、それから「ユーザー」でありつつワークスペースの管理権限も持っている場合、他人(というよりサービスプリンシパル)になりかわってトークンを発行できるっぽいです。この辺り、全部把握してる人はあまり多くない気もします。
API経由じゃないと触れない設定や機能もわりと多くて、その場合はサービスプリンシパル経由の方が楽になることもあるっぽいです。Databricksの公式ドキュメントには、「誰が作れるか」「どうやって管理するのか」みたいな説明も一応載っています。
ただ実際に作成した後、自分自身が自動的にそのサービスプリンシパルの管理者になるものの――あれ?と思う人もいるようですが――実際にそれを使いたいなら、「ユーザー」として自分を追加しないとダメなんですよね。最初はちょっと戸惑うポイントかもしれません。
あと細かい話ですが、サービスプリンシパルの管理者だったり、それから「ユーザー」でありつつワークスペースの管理権限も持っている場合、他人(というよりサービスプリンシパル)になりかわってトークンを発行できるっぽいです。この辺り、全部把握してる人はあまり多くない気もします。

管理者が知っておくべきSP管理の落とし穴とユーザー追加手順
Databricksを他のアプリとつなげて使う話、例えばGitHubだったりSigmaみたいなサービスだと、普通に個人のアカウントじゃなくてサービスプリンシパルで動かしたい場面がけっこうあるらしい。PAT(個人用トークン)もそのために必要になることが多いとか。CI/CDのパイプラインをGitHub Actions経由で回す場合なんかも、それ専用のID使うほうがよさそうって聞いたことがあるし。あと、Databricks上でワークフロー動かしてコードをGitから引っぱる時、自分のユーザーじゃなくてサービスプリンシパル経由で処理したいって話も耳にしたような。Sigmaの場合はちょっと違って、書き込み機能を有効化する時とかに、そのスキーマへテーブル作成や変更できる権限持ったサービスアカウント的なのが必要になるケースが出てくる、とどこかで読んだ気がする。それぞれ事情はまちまちだけど、大体こんな流れ。ちなみに普通のユーザー向けPAT発行方法については、公式ドキュメント探せば説明はいくつか見つかったと思う。ただ、自分では全部試してないので微妙な差異はあるかもしれない。
GitHub連携やSigma書き戻しでSPのPATが活躍する具体例
なんとなく覚えている人もいるかもしれないけど、Databricksのユーザーアカウント用のPATは、画面から直接作成できるんだよね。だけどサービスプリンシパル向けになると、どうもUIから操作する選択肢が見当たらない。いろんなドキュメントを眺めてみた限りでは、その辺はやっぱりプログラム経由で進めるしかなさそう。
CLIをローカル端末に入れて使う方法があったり、あるいはノートブック内でシェルコマンドとして試してみることもできそう。もちろん、それには全般的に使えるクラスタにつながっている必要があって、その環境によって細かい動き方が異なることも多いみたい。
認証方式も何種類か用意されていた気がするけど、とくにサービスプリンシパルの場合は、アカウント全体を跨ぐような運用になるケースが目立つ。その場合、「OAuth for service principals(OAuth M2M)」という呼び方で紹介されている手法を採用する流れになりやすい。まあ大雑把に言えばそんな感じかな。他にも細かいやり方はいくつか話題に上ることがあるけど、全部を把握している人は多くない印象だった。
CLIをローカル端末に入れて使う方法があったり、あるいはノートブック内でシェルコマンドとして試してみることもできそう。もちろん、それには全般的に使えるクラスタにつながっている必要があって、その環境によって細かい動き方が異なることも多いみたい。
認証方式も何種類か用意されていた気がするけど、とくにサービスプリンシパルの場合は、アカウント全体を跨ぐような運用になるケースが目立つ。その場合、「OAuth for service principals(OAuth M2M)」という呼び方で紹介されている手法を採用する流れになりやすい。まあ大雑把に言えばそんな感じかな。他にも細かいやり方はいくつか話題に上ることがあるけど、全部を把握している人は多くない印象だった。

UIではできない!サービスプリンシパル用PAT生成の2大方法
Databricksのドキュメントに沿って、まあ必要な認証情報を準備することになる。実際、その手順は多少ややこしい部分もあるが、慣れてくるとそんなに難しくないらしい。全部揃った頃には、PostmanなんかでAPIリクエストを試す人も結構いる。
たしか「Account SCIM APIs for service principals」の中から何か方法を選んでみるのが良いとどこかで聞いた覚えがある。サービスプリンシパルの一覧取得あたりなら入り口として妥当かもしれない。でも、そのエンドポイント自体はアカウントレベルの話だし、ワークスペース単位のものとは微妙に違うらしいので、そこは注意したほうが良さそうだ。
ちなみに、こんな感じのURLだった気がする。
GET
/api/2.0/accounts/{account_id}/scim/v2/ServicePrincipals
一方でワークスペースごとのサービスプリンシパル取得の場合はURLもちょっと違っていたっぽい。
GET
/api/2.0/preview/scim/v2/ServicePrincipals
OAuth 2.0を認証方式として選ぶよう促されていた記憶があるけれど、細かい部分までは今ひとつ曖昧。ただ、この辺りはいくつか試している人たちからも似たような話を聞いたことがあった気もする。どちらにせよ、一度設定まで辿り着けば、大きな壁にはならないという声もあったりする。
たしか「Account SCIM APIs for service principals」の中から何か方法を選んでみるのが良いとどこかで聞いた覚えがある。サービスプリンシパルの一覧取得あたりなら入り口として妥当かもしれない。でも、そのエンドポイント自体はアカウントレベルの話だし、ワークスペース単位のものとは微妙に違うらしいので、そこは注意したほうが良さそうだ。
ちなみに、こんな感じのURLだった気がする。
GET
/api/2.0/accounts/{account_id}/scim/v2/ServicePrincipals
一方でワークスペースごとのサービスプリンシパル取得の場合はURLもちょっと違っていたっぽい。
GET
/api/2.0/preview/scim/v2/ServicePrincipals
OAuth 2.0を認証方式として選ぶよう促されていた記憶があるけれど、細かい部分までは今ひとつ曖昧。ただ、この辺りはいくつか試している人たちからも似たような話を聞いたことがあった気もする。どちらにせよ、一度設定まで辿り着けば、大きな壁にはならないという声もあったりする。
Postmanで実践するOAuth2.0認証フローの完全ガイド
なんだか右側のほうにある設定みたいな画面を、ゆっくり下へスクロールしていくと、「新しいトークンの構成」とか書かれてる部分が出てくることがある。そこで必要な情報を記入するんだけど、その内容はたしか、あのDatabricks OAuth M2Mに関する説明ページで見つけられそうだった気がする。
しばらくすると、一番下あたりに「新しいアクセストークンを生成」っていうボタンが見えてきて、それを押せば良い感じになる…はず。もし運よくトークンが作成できた場合、確認みたいな画面が現れるようで、「続行」っていうボタンもどこかに表示される印象だったかな。
それから少し時間をおいて、実際のトークン値そのものも表示されるタイミングがやって来ることも。すぐにリクエストへ使いたい時には「このトークンを使う」という選択肢もあったり、逆に手元でコピーして他で貼り付けたりとか、人によってやり方はいろいろみたいだね。全部が一瞬で終わるわけじゃなくて、ちょっと手順に迷う人もいるとか聞いたことある。
しばらくすると、一番下あたりに「新しいアクセストークンを生成」っていうボタンが見えてきて、それを押せば良い感じになる…はず。もし運よくトークンが作成できた場合、確認みたいな画面が現れるようで、「続行」っていうボタンもどこかに表示される印象だったかな。
それから少し時間をおいて、実際のトークン値そのものも表示されるタイミングがやって来ることも。すぐにリクエストへ使いたい時には「このトークンを使う」という選択肢もあったり、逆に手元でコピーして他で貼り付けたりとか、人によってやり方はいろいろみたいだね。全部が一瞬で終わるわけじゃなくて、ちょっと手順に迷う人もいるとか聞いたことある。

Account Admin権限の付与方法とAPIリクエスト検証テクニック
なんだか全部がひとつにまとまったスクリーンショットがあった気がするけど、まあそれはさておき。アクセス・トークンがちゃんと使えるかどうか、GETリクエストを送って確かめてみることになりそう。ところで、そのトークンを発行したサービスプリンシパルにはアカウント管理者っぽい権限(多分一部の人しか持ってないやつ)が必要らしいんだよね。実際、この操作は大半のユーザーじゃできなさそう。
アカウント管理者になるにはUI上でAccount Adminの設定スイッチみたいなのを切り替えればいいみたいだけど、細かな手順…いや、画面イメージも用意されてたはず。でも探すのちょっと手間だった覚えもあるし、人によって場所違うこともあり得るし。
もし準備できたら、そのままリクエスト投げても良さそう。ただし全部うまくいくかは保証できないので、何度か試してみたほうが無難、と言っておくね。
アカウント管理者になるにはUI上でAccount Adminの設定スイッチみたいなのを切り替えればいいみたいだけど、細かな手順…いや、画面イメージも用意されてたはず。でも探すのちょっと手間だった覚えもあるし、人によって場所違うこともあり得るし。
もし準備できたら、そのままリクエスト投げても良さそう。ただし全部うまくいくかは保証できないので、何度か試してみたほうが無難、と言っておくね。
自動化環境を強化するSP活用のベストプラクティスまとめ
アカウントレベルのサービスプリンシパルを全部見たい時、なんとなくリストで返してくれるAPIがあるみたい。スクリーンショットを眺めていたら「demo_sp」って名前も中に入ってるようで、これがちゃんと認識されてるっぽい。
サービスプリンシパルを使った自動化は、セキュリティや信頼性の面でも役立つことが多いとも聞くけれど、PAT(パーソナルアクセストークン)の発行方法についてはUI経由だと直接できないらしい。とはいえ、APIとかCLIさえ準備できれば、そんなに手間かからず進められることもあるそう。
この流れで必要な手順がちょっとでも掴めたなら嬉しいし、不明点とか困った時は気軽に声かけても大丈夫かもしれない。たまに細かいところでつまずきやすいけど、自分だけじゃなく他の人にも同じような疑問が出ることも多そうなので…。
サービスプリンシパルを使った自動化は、セキュリティや信頼性の面でも役立つことが多いとも聞くけれど、PAT(パーソナルアクセストークン)の発行方法についてはUI経由だと直接できないらしい。とはいえ、APIとかCLIさえ準備できれば、そんなに手間かからず進められることもあるそう。
この流れで必要な手順がちょっとでも掴めたなら嬉しいし、不明点とか困った時は気軽に声かけても大丈夫かもしれない。たまに細かいところでつまずきやすいけど、自分だけじゃなく他の人にも同じような疑問が出ることも多そうなので…。