ちょっとハマったのでメモ。
サービスプリンシパルとは
APIアクセスのみが可能なアイデンティティです。ユーザーと違って、GUIへのアクセスには使用できません。自動化ツールやジョブで使用することを推奨しています。
サービスプリンシパルの作成
-
Azure Portal > Azure Active Direcotry > アプリの登録に移動します。
-
サービスプリンシパルの名前を入力して、サポートされているアカウントの種類では、
この組織ディレクトリのみに含まれるアカウント (Default Directory のみ - シングル テナント)
を選択し、登録をクリックします。
-
以下の値をコピーしておきます。
- アプリケーション (クライアント) ID
- ディレクトリ (テナント) ID
-
サイドメニューの証明書とシークレットをクリックします。
-
新しいクライアントシークレットをクリックします。
-
重要!
運用設計に基づいて、適切に有効期限を管理するようにしてください。
Databricksアカウントにサービスプリンシパルを追加
- Databricksワークスペースの右上のユーザー名をクリックしManage Accountを選択して、Databricksアカウントコンソールにアクセスします。
- サイドメニューからUser managementを選択します。
-
Service principalsタブをクリックします。
- Add service principalをクリックします。
-
Nameにはわかりやすい名前、UUIDには、上でメモしたアプリケーション (クライアント) IDを入力します。Addをクリックします。
ワークスペースにサービスプリンシパルを割り当てる
- アカウントコンソールのサイドメニューでWorkspacesを選択します。
- REST APIを使用するワークスペースを選択します。
-
Permissionsタブを選択します。
- Add permissionsをクリックします。
- User, group or service principalで上で作成したサービスプリンシパルを選択し、必要な権限をPermissionで選択します。Saveをクリックします。
サービスプリンシパルのトークンを取得する
サービスプリンシパルからREST APIを使用するためには、トークンが必要となります。
トークンの取得にもREST APIの呼び出しが必要です。curl
などを使っても良いですが、ここではPostmanを使います。
- エンドポイント:
https://login.microsoftonline.com/<テナントID>/oauth2/v2.0/token
- テナントID: 作成したサービスプリンシパルのディレクトリ (テナント) ID
- メソッド: POST
- Body:
- x-www-form-urlencoded
- client_id: サービスプリンシパルのアプリケーション (クライアント) ID
- grant_type:
client_credentials
- scope:
2ff814a6-3304-4ab8-85cb-cd0e6f879c1d/.default
- client_secret: サービスプリンシパルのクライアントシークレットの値
- x-www-form-urlencoded
レスポンスのaccess_token
の値をコピーします。このトークンには1時間の有効期限があるので注意してください。
REST APIを呼び出す
これでREST APIを呼び出す準備ができました。
APIのリファレンスはこちらです。
ここでは、ワークスペースのクラスター一覧を取得します。
- エンドポイント:
https://<Databricksワークスペースのホスト名>/api/2.0/clusters/list
- メソッド: GET
- Authorization:
- Type: Bearer
- Token: 上で取得したサービスプリンシパルのトークン