Azure Databricks SCIMを使用して組織内のAzure Databricks利用者をAzure ADから構成する

## はじめに

Databricks 上では、Azure AD認証が利用できますが、実はID管理は独自のものとなっており、ワークスペースにログインした際にワークスペース内にIDがプロビジョニングされています。

このときAzure AD セキュリティグループを利用しての運用は効かず、Databricks内でグループを作成するなどの運用になってしまいます。

今回は、SCIMの仕組みを利用して、Azure ADをIdPとてセキュリティグループやユーザーIDを自動でDatabricksアカウント全体に構成してみようと思います。


### 関連

毎度 困ったときの[＠taka_yayoi](https://qiita.com/taka_yayoi)　さんの記事がまとまっています。

- [Databricksにおけるユーザー、サービスプリンシパル、グループの管理](https://qiita.com/taka_yayoi/items/e386507be44aa3abd27e)
- [Databricksにおけるアイデンティティプロバイダーとのユーザー、グループの同期](https://qiita.com/taka_yayoi/items/6509db71832ae5df9295)
- [Databricksにおけるアイデンティティ管理のベストプラクティス](https://qiita.com/taka_yayoi/items/641b9c22e22071c7c17c)

### アカウントレベルのSCIM構成とワークスペースレベルのSCIM構成の考え方

[元の絵](https://learn.microsoft.com/ja-jp/azure/databricks/administration-guide/users-groups/scim/#--account-level-and-workspace-level-scim-provisioning)を少しかみ砕いて書いてみます。

SCIMを構成しない場合、Azure RBACで共同作成者などをもっていると、Databricks ワークスペースにログインした際に自動でワークスペースレベルのIDが構成されます。その後、自動的にアカウントレベルのユーザーとして同期が行われます。

参考：https://learn.microsoft.com/ja-jp/azure/databricks/administration-guide/users-groups/#--how-does-databricks-sync-identities-between-workspaces-and-the-account


![2022-12-20-20-30-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/fcf3a657-b72c-b245-88ce-6094270c7ca0.png)


ワークスペース管理者以外のユーザーを構成したい場合、Databricksのワークスペースかアカウントレベルでユーザーやグループを作成することになります。

![2022-12-20-20-31-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/9866694d-2feb-efb5-d6ba-eab1b5db79c0.png)



このとき、ユーザー管理は独立しているため、 **Azure ADのセキュリティグループを権限付与の対象にしたりはできません。** また、Databricks 側で削除したとしても、Azure ADに権限情報などが同期されることもありません。


![2022-12-20-20-33-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/554603a2-0574-0ee6-6dd7-206c7b11a6fc.png)


実際の運用で全ユーザーを管理者にしたり、一人ひとりをメールアドレス登録すること（以下のようなUI）は現実的ではないです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/1b1cb75c-d723-61a4-4ddf-ea631b68ed41.png)


したがって、中規模以上のDatabricks 活用では必須となるのがSCIMの構成です。
SCIMを構成した場合には、Azure AD上に存在するエンタープライズアプリケーションにユーザーやグループを割り当てると、自動的にDatabricksのワークスペースかアカウントレベルでのID管理に同期されます。
※ワークスペースレベルで構成するとワークスペースレベルでグループやユーザーが同期されます。


![2022-12-20-20-34-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/64519b2d-43b4-4eb8-4832-8f04622f9001.png)

注意：Azure AD -> Databricks アカウント管理 での一方向での同期となるため、Databricks 側で削除してもAzure AD側に変更がない点は引き続き存在することご注意ください

## 手順

以下を参考に実施します。

- https://learn.microsoft.com/ja-jp/azure/databricks/administration-guide/users-groups/scim/aad
- https://learn.microsoft.com/ja-jp/azure/databricks/administration-guide/users-groups/scim/

### 準備

前提を確認します。

>Azure Databricks アカウントに Premium プランが必要です。
>SCIM (SCIM REST API を含む) を使用して Azure Databricks アカウントにユーザーをプロビジョニングする場合は、Azure Databricks アカウント管理者であることが必要です。
>Azure Active Directory アカウントの全体管理者である必要があります。
>グループをプロビジョニングするには、Azure Active Directory アカウントが Premium Edition アカウントである必要があります。 ユーザーのプロビジョニングは、任意の Azure Active Directory Edition で利用できます。

アカウントコンソール(https://accounts.azuredatabricks.net/)とAzure ADを確認して、作業ができるアカウントを確認しましょう。相当の強権限です。

![2022-12-20-20-41-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/13f27f8c-6020-f495-2925-6c033b2cf025.png)



### Azure Databricks ユーザープロビジョニングを構成する

1.アカウントコンソールの設定画面で、「Set up user provisioning」をクリックします。

![2022-12-20-20-48-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/d52a6c27-aaac-6966-c687-432e00968f68.png)


2.tokenとurlが表示されるのでこれをメモします。

![2022-12-20-20-52-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/065f591f-44f0-4e02-92f5-a3ff19e296c4.png)



### Azure AD エンタープライズ アプリケーションを構成する

1.Azure Portal のAzure AD管理画面から、エンタープライズアプリケーションの管理画面に移動し、「新しいアプリケーション」をクリックします。

![2022-12-20-20-56-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/2b20bcca-e794-06a8-0eb9-fe87988fdec1.png)


2.ギャラリーから、Azure Databricks SCIMプロビジョニングコネクタを検索して、選択します。

![2022-12-20-20-57-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/cd1e3b99-064d-df31-fcc3-3496a48f06cb.png)


3.名前を設定して「作成」をクリック


![2022-12-20-20-57-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/39203dd9-2f86-379d-6d61-1186cb8e2dc1.png)


4.作成完了後、アプリケーションの管理画面に遷移するので、「プロビジョニング」を選択します。 

![2022-12-20-20-59-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/1d95c162-a18f-3021-28c4-0860334d2eed.png)


5.「作業の開始」をクリックします。

![2022-12-20-20-59-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b60dc656-83b3-58c7-f128-7b726b8eb7ac.png)


6.プロビジョニングモードを自動に設定して、先ほどコピーしたurlとtokenを貼り付けてテスト接続が成功することを確認できたら「保存」をクリックします。

![2022-12-20-21-02-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b57e47b6-7a00-9dd6-c9e9-988f3068bad4.png)


※保存後の他のメニューはこんな感じ

![2022-12-20-21-03-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/8234a63f-8e96-89a6-b91e-82dd12e4f1cd.png)


7.最後に、プロビジョニングを開始して自動同期を有効にしましょう。

![2022-12-20-21-08-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/4e2ef6bf-566d-20f5-f438-d8b70b84f58e.png)


### ユーザーとグループを割当てる

1.グループを用意します。

![2022-12-20-21-05-45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/01947718-91b3-b5d7-9268-0cfe85706285.png)


2.エンタープライズアプリケーション管理画面で、「ユーザーまたはグループの追加」をクリックします。

![2022-12-20-21-06-37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/a52f972c-fbcc-b1b2-36ba-328872a40ee5.png)


3.用意したグループを割り当ててみます。この画面ではロールは変更できませんでした。

![2022-12-20-21-07-53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/e3ddceb8-c69c-1c34-81ae-3b8e64bcc15f.png)


4.先ほど構成したプロビジョニング画面を見ると、間隔が40分と長いので「要求時にプロビジョニング」から、特定のグループのみをプロビジョニングすることもできそうです。

![2022-12-20-21-09-45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/90cb8e87-882a-8d1b-320a-17f3a3d79c16.png)


![2022-12-20-21-10-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/29a293f8-17b4-1089-f8a6-c94e659246f8.png)


5.プロビジョニングが完了するとこのように表示されます。

![2022-12-20-21-12-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/fac2a216-2fa4-35aa-4a9b-d9edc2c54a8b.png)


6.最後にアカウントコンソールからユーザー管理を確認して、完了です。

ユーザー一覧に追加が確認できました。

![2022-12-20-21-14-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/fa38ef5c-1c18-5c96-70f8-d729186af112.png)


グループにもsg_databricks_usersというAzure AD セキュリティグループが追加されています。

![2022-12-20-21-15-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/16dc71da-d25c-77d3-1ab2-b565bf6417e6.png)


ワークスペース一覧からへのワークスペースアクセスの権限を付与可能です。

![2022-12-20-21-16-54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/ab07c12a-e87f-2b91-e6ad-5a0042544f4e.png)