Azure DatabricksにおけるUnity Catalogへのオンボーディング

こちらでは、すでにAzure Databricksを利用しているお客様が新たにUnity Catalogを使い始める際に注意すべき事柄を交えながら、セットアップ手順をウォークスルーします。

以下の記事の続編です。

https://qiita.com/taka_yayoi/items/9b56995b979fa4e32b4e

# 前提

- すでにAzure Databricksのワークスペース(Premium)を作成している。
- [SCIMプロビジョニング](https://learn.microsoft.com/ja-jp/azure/databricks/administration-guide/users-groups/scim/)を使用して、Azure ADとワークスペースのユーザーを同期している。

:::note
**注意**
- Azure Databricksではデフォルトでシングルサインオン(SSO)が有効化されています。
- Azure Databricksのユーザーは、Azure ADのディレクトリに登録されている必要があります。
:::

Unity Catalogにオンボーディングする際には、Databricksの**アカウント**と**ワークスペース**の概念を理解しておくことが重要です。

- **Databricksアカウント**: お客様ごとに通常1つのDatabricksアカウントが割り当てられます。このアカウントを管理するのが**Databricksアカウント管理者**です。1つのアカウントで複数のAzure Databricksワークスペースを作成することができます。
- **Databricksワークスペース**: データサイエンティスト、データエンジニア、データアナリストの方々が実際に分析を行う環境です。Unity Catalog以前はワークスペース単位でユーザー、グループを管理していました。 

Unity Catalogにオンボーディングすることで、アカウントレベルでユーザーやグループを管理できるようになるので、管理工数の削減が期待できます。
![Screenshot 2023-03-24 at 9.33.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8e7fcfa6-b1bf-555b-16f7-32c14f8fc88f.png)

この機能を**アイデンティティ(ID)フェデレーション**と呼びます。
![Screenshot 2023-03-24 at 9.38.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6b65063a-f3ae-4086-88ba-30fd92b7c050.png)

# ゴール

- Unity Catalogをセットアップする。
- IDフェデレーションを有効化し、ワークスペースレベルではなくアカウントレベルでユーザーとグループを管理するようにする。

# 既存のAzure Databricksワークスペース

Azure Portalで最初にAzure Databricksワークスペースを作成した際、Databricksユーザーでログインできるのは、ワークスペースを作成した**Azure共同作成者または所有者**のみです。

ここから手動でワークスペースにユーザーを追加することは可能ですが、管理を容易にするためにAzure ADと同期を行えるのが[SCIMプロビジョニング](https://learn.microsoft.com/ja-jp/azure/databricks/administration-guide/users-groups/scim/)です。

ここでは、以下の手順に従って、ワークスペースレベルでのSCIMプロビジョニングが行われているものとします。

https://learn.microsoft.com/ja-jp/azure/databricks/administration-guide/users-groups/scim/aad#provision-identities-to-your-azure-databricks-workspace-using-azure-active-directory-azure-ad

上記の設定を行い、SCIM Provisioning Connectorにユーザーを割り当てることで、Databricksユーザーとして同期されるようになります。
![Screenshot 2023-03-24 at 9.46.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7e18cfc5-d365-3bc4-91f5-2c616054e4cb.png)

赤枠内のユーザーが追加されたものです。
![Screenshot 2023-03-24 at 9.56.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f491865b-0d16-dcd0-4798-18caca7a94ed.png)

そして、2022年8月以降、ワークスペースレベルのユーザーはアカウントレベルのユーザーに自動で同期されるようになっています。また、Azure Databricksでもアカウントコンソールが導入されています(これまではAWSのみでした)。アカウントコンソールからは、Unity Catalogのセットアップ、アカウントレベルユーザーの管理などが行えます。

アカウントコンソールにアクセスするには、ワークスペース画面右上のユーザー名をクリックして、**アカウントを管理**を選択します。
![Screenshot 2023-03-24 at 10.02.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/191218ed-7791-7184-b736-600a536071e1.png)

こちらの**ユーザー管理**で、ワークスペースに同期されたユーザーがこちらにも同期されていることを確認できます。これらのユーザーはアカウントレベルのユーザーです。
![Screenshot 2023-03-24 at 10.04.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e89e2edf-7cee-48e3-2843-8d8ee399ba7e.png)

# Unity Catalogへのオンボーディング

この状態からUnity Catalogにオンボードするには以下の手順を踏みます。アカウントレベルでユーザーを管理し、Azure ADとアカウントレベルのユーザーを同期する形に移行するので、上述のワークスペースレベルでのSCIMプロビジョニングは不要となります。

1. [Unity Catalogのセットアップ](https://learn.microsoft.com/ja-jp/azure/databricks/data-governance/unity-catalog/get-started)
1. ワークスペースレベルのSCIMプロビジョニングの無効化
1. アカウントレベルのSCIMプロビジョニングの有効化
1. ワークスペースローカルのグループをアカウントレベルのグループに変換

SCIMプロビジョニングの移行の詳細に関してはこちらを参照ください。

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

## ワークスペースレベルのSCIMプロビジョニングの無効化

ワークスペースにプロビジョニングを行っていたSCIMプロビジョニングコネクターを停止します。
![Screenshot 2023-03-24 at 10.08.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3556b550-23e1-943c-056b-3b3ab384b286.png)

## アカウントレベルのSCIMプロビジョニングの有効化

1. [こちらの手順](https://learn.microsoft.com/ja-jp/azure/databricks/administration-guide/users-groups/scim/)に従ってアカウントレベルのSCIMプロビジョニングを行うSCIMコネクターを作成します。
1. 既存のワークスペースでIDフェデレーションが行われるように、アカウントコンソールでUnity Catalogのメタストアをワークスペースにアタッチします。
![Screenshot 2023-03-24 at 10.19.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/87b1c4e8-c7d3-0a0a-86a0-d6f7f89ce648.png)
![Screenshot 2023-03-24 at 10.19.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/9d038b33-5e0f-cc7d-d2db-82425378b4ec.png)
![Screenshot 2023-03-24 at 10.19.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7308a38f-3200-8a9e-a9f1-a73ea6f0bbff.png)
![Screenshot 2023-03-24 at 10.20.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f51dd444-513e-3067-70f4-39b720113027.png)

## ワークスペースローカルのグループをアカウントレベルのグループに変換

[こちら](https://learn.microsoft.com/ja-jp/azure/databricks/administration-guide/users-groups/groups#--difference-between-account-groups-and-workspace-local-groups)にあるように、Unity Catalogが有効化されている環境では、アカウントレベルのグループに移行することを推奨しています。ワークスペースローカルで作成しているグループを参照しつつ、アカウントレベルのグループを作成し、これらアカウントレベルのグループでアクセス権を管理するようにします。

# 動作確認

:::note warn
**重要**
以下の手順を実行する前に、[こちらの手順](https://learn.microsoft.com/ja-jp/azure/databricks/administration-guide/users-groups/scim/aad#step-3-assign-users-and-groups-to-the-application)にあるように、プロビジョニングの**設定**で、**スコープ**が**割り当てられたユーザーとグループのみを同期する**になっていることを確認してください。
:::

アカウントレベルのSCIMプロビジョニングを行うSCIMコネクターにユーザーを割り当てます。ここでは、新たなユーザー`ユーザー4`と`ユーザー5`を割り当てます。
![Screenshot 2023-03-24 at 10.26.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3c99bbcc-bce7-d5c2-15a1-fe485a1f877a.png)

プロビジョニングされたことを確認します。
![Screenshot 2023-03-24 at 11.44.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/acb01b7c-a816-f2a7-6bc1-5614e24aa10f.png)

Databricksアカウントコンソールに2人のユーザーが同期されます。
![Screenshot 2023-03-24 at 11.44.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ec42691d-ed80-46d7-2e6d-0e8afb5dafaa.png)

ただ、この時点ではワークスペースにこれらのユーザーは追加されません。アカウントコンソールの**ワークスペース**、**権限**にアクセスし、**権限を追加**をクリックします。
![Screenshot 2023-03-24 at 11.51.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2fbf176b-5cbe-c80a-d8c8-bee69613e332.png)

`ユーザー4`、`ユーザー5`を`User`としてワークスペースに割り当てます。
![Screenshot 2023-03-24 at 11.52.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6868bf82-e009-df9d-0649-6133a0ec501a.png)

これでワークスペースにもユーザーが追加されました。
![Screenshot 2023-03-24 at 11.53.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/5f0c888f-46a4-2868-7587-7a48eeb0791c.png)

# まとめ

:::note
**注意**
ユーザーを追加した際の同期処理は**追加とマージ**のみです。

明示的に削除の操作を行わない限り、アカウントレベルのユーザーもワークスペースレベルのユーザーも削除されません。SCIMプロビジョニングコネクターに少数のユーザーを割り当てたとしても、同期先のアカウントレベルのユーザーは削除されません。割り当てられたユーザーが同期先になければ、これらのユーザーが追加されるだけです。

注意しなくてはならないのは、以下の2点です。
1. IDフェデレーションが有効化されているかどうか(ワークスペースがUnity Catalogメタストアに関連づけられているかどうか)に関係なく、アカウントレベルでユーザーを削除すると、すべてのワークスペースから当該ユーザーが削除されます。
1. 同様に、アカウントレベルのSCIMプロビジョニングコネクターに割り当てられているユーザーの割り当てを解除すると、Databricksアカウントユーザーからも削除され、ワークスペースユーザーからも削除されるのでワークスペースにログインできなくなります。以下の例では、割り当てが解除されたユーザー1とユーザー4がDatabricksアカウントユーザーからも削除されています。
![Screenshot 2023-03-24 at 17.23.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ec4c1240-f0df-8111-ecf2-fdebcc53f39f.png)

:::

ここで説明したように、既存のワークスペースがある場合、Unity Catalogへのオンボーディングには追加の手順が発生し、いくつかの留意点があります。
![Screenshot 2023-03-24 at 11.59.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ad5230d0-4245-b10f-4e7c-9971d0ddd4b3.png)

1. Unity Catalogの有効化がアイデンティティフェデレーションの前提です。
1. Unity Catalogメタストアを、既存/新規ワークスペースにアタッチすることでアイデンティティフェデレーションを有効化します。
1. 新規ワークスペースにおいては、アカウントレベルに追加されたプリンシパルのみをワークスペースに割り当てることができます。ユーザーとグループはSCIMでアカウントレベルに同期されるので、ワークスペースではSCIMを使わないことをお勧めします。
1. 既存ワークスペースにおいては、アカウントレベルから新規プリンシパルを追加することができます。すでに存在しているワークスペースグループを使い続けることができます。ユーザーとグループはSCIMでアカウントレベルに同期されるべきであり、ワークスペースでSCIMを使わないことをお勧めします。
1. メタストアがアタッチされていないワークスペースでは、当面ローカルのプリンシパルとワークスペースレベルSCIMを利用することができます。

しかし、これらの手順を踏むことで、Unity Catalogが提供する[様々な機能](https://learn.microsoft.com/ja-jp/azure/databricks/data-governance/unity-catalog/)を活用できるようになります。ぜひご活用ください！

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)