Azure DatabricksにおけるUnity CatalogとIDフェデレーションの有効化

タイトルの通り、Azure DatabrikcsでUnity CatalogとIDフェデレーションを有効化してみます。

# 要件

- Premiumプラン以上のAzure Databricksアカウント
- Azure Databricksのアカウント管理者権限(Azure AD Global admin)
- Azure Databricksワークスペース

# Unity Catalogとは

Azure Databricksにおけるガバナンスソリューションです。デフォルトでは有効化されていないので、有効化する必要があります。

https://learn.microsoft.com/ja-jp/azure/databricks/data-governance/unity-catalog/

# Unity Catalogの有効化

## ストレージアカウントとコンテナの作成

https://learn.microsoft.com/ja-jp/azure/databricks/data-governance/unity-catalog/create-metastore

Unity Catalogには**メタストア**が必要で、これを作成するにはデータを格納するための専用のコンテナが必要となります。Azure Portalでこれらを作成します。

作成したストレージアカウント、コンテナ、パスを`<コンテナ名>@<ストレージアカウント名>.blob.core.windows.net/<パス>`の形式でメモしておきます。

## AzureマネージドIDの作成および設定

上のステップで作成したコンテナにアクセスするAzureマネージドIDをAzure Portalで作成します。

https://learn.microsoft.com/ja-jp/azure/databricks/data-governance/unity-catalog/azure-managed-identities#config-managed-id

以下の形式のリソースIDをメモしておきます。

```
/subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource_group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
```

## メタストアの作成およびAzure Databricksワークスペースの関連づけ

1. アカウントコンソールに移動します。Databricksワークスペースで右上のユーザー名をクリックし、**アカウントを管理**を選択します。この際、ユーザーがAADのGlobal admin権限を持っていないと、アカウントコンソールにログインできません。
![Screenshot 2023-03-17 at 15.22.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/90ea027c-a965-b195-ce5e-a924af22077e.png)
1. メタストア名、リージョンを指定し、**ADLS Gen 2パス**には[上のステップ](#ストレージアカウントとコンテナの作成)でメモしたコンテナのパスを指定します。
1. **アクセスコネクターID**には[上のステップ](#azureマネージドidの作成および設定)でメモしたリソースIDを指定します。
![Screenshot 2023-03-17 at 15.23.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/95e4d789-d065-dd91-147e-1641b15192c0.png)
1. **作成**をクリックし、メタストアの作成に成功したらDatabricksワークスペースを関連づけます。

# IDフェデレーションの有効化

IDフェデレーションとはDatabricksレベルでユーザー・グループを管理し、配下のすべてのAzure Databricksワークスペースのユーザー・グループを集中管理できる機能です。アカウントレベルで設定したユーザー・グループをワークスペースに割り当てることが可能となります。

https://learn.microsoft.com/ja-jp/azure/databricks/administration-guide/users-groups/#enable-identity-federation

:::note
**注意**
IDフェデレーションを有効化する際には、アカウントレベルのSCIMプロビジョニングを有効化します。この際、ワークスペースレベルでSCIMプロビジョニングが有効化されている場合にはオフにするようにしてください。
:::

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

こちらの手順に従って、アカウントレベルのSCIMプロビジョニングを有効化します。

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

# 動作確認

これでIDフェデレーションが有効化されましたが、挙動については悩むところがあるかと思います。例えば、新規にアカウントレベルのユーザーを追加すると、ワークスペースレベルのユーザーが削除されたりしないかなど。

まず、前提として[こちら](https://learn.microsoft.com/ja-jp/azure/databricks/administration-guide/users-groups/#--how-does-databricks-sync-identities-between-workspaces-and-the-account)にありますように、2022年8月時点で、ワークスペースレベルのユーザーはアカウントレベルに同期されるようになっています。ワークスペースにユーザーを追加するたびに、アカウントレベルに同期されます。そして、**明示的に削除の操作を行わない限り、アカウントレベルのユーザーもワークスペースレベルのユーザーも削除されません**。

注意しなくてはならないのは、IDフェデレーションが有効化されているかどうか(ワークスペースがUnity Catalogメタストアに関連づけられているかどうか)に関係なく、アカウントレベルでユーザーを削除すると、すべてのワークスペースから当該ユーザーが削除されるということです。

> アカウント管理者がアカウント レベルでユーザーまたはサービス プリンシパルを削除した場合、ID フェデレーションが有効になっているかどうかに関係なく、そのユーザーはワークスペースからも削除されます。 アカウント レベルのユーザーまたはサービス プリンシパルの削除は、それらによるアカウント内のすべてのワークスペースへのアクセスを禁止する場合を除き、行わないようにする必要があります。

## Azure ADにユーザーを追加

Azure Databricks SCIM Provisioning Connectorにユーザーを追加すると、Databricksアカウントレベルでユーザーが同期されます。
![Screenshot 2023-03-17 at 15.35.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ee5b5b1d-fcf8-1232-0bc2-f15770453cbe.png)

マスキングしていますが、赤いところが同期されたユーザーです。この時点ではワークスペースには変化がありません。
![Screenshot 2023-03-17 at 15.36.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6da648af-dedb-0e72-693a-bba273283a66.png)

## Databricksワークスペースにユーザーを追加

1. アカウントコンソールの**ワークスペース**に移動し、追加したいワークスペースを開きます。
1. 右上の**権限を追加**をクリックします。
1. 追加したいユーザーと権限を選択して、**保存**をクリックします。
![Screenshot 2023-03-17 at 15.39.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/89977e2b-b69f-a4a7-3825-4cf32829b8c3.png)
1. 当該ワークスペースにアクセスし、**管理者設定**でユーザー一覧にアクセスすると、上のステップで追加したユーザーが表示されていることがわかります。ここでもマスキングしていますが、赤い部分が追加されたユーザーです。
![Screenshot 2023-03-17 at 15.41.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/87e57768-1c53-cb5f-0cf3-fb2d41fbca2a.png)

### Databricks 無料トライアル

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