Unity Catalogの有効化・無効化におけるアクセスコントロールの違い

整理します。

# Unity Catalogとは

https://www.databricks.com/jp/product/unity-catalog

Unity Catalog(UC)は、DatabricksレイクハウスにおけるデータとAIに対するきめ細かいガバナンスを提供するソリューションです。

Unity Catalogは以下のキーとなる機能によって、お使いのデータに対するセキュリティとガバナンスをシンプルなものにします。

- **一度定義すれば、どこでもセキュアに**: Unity Catalogは全てのワークスペース、ペルソナに対して適用されるデータアクセスポリシーを管理する唯一の場所を提供します。
- **標準準拠のセキュリティモデル**: Unity Catalogのセキュリティモデルは標準的なANSI SQLをベースとしており、管理者は馴染みのある文法を用いて、既存データレイクに存在するカタログ、データベース、テーブル、ビューのレベルでアクセス権を設定することができます。
- **ビルトインの監査機能**: Unity Catalogは自動でユーザーレベルの監査ログを捕捉し、データへのアクセスを記録します。

このように、Unity Catalogを活用することで高いセキュリティ、ガバナンスを実現することができます。しかし、Unity Catalog以前とは考え方が色々と異なっているので、以前ある機能との違いを認識することも重要となります。

以下では、ファイル、テーブル、MLflowアーティファクト、モデルレジストリを対象に、Unity Catalogを有効化している場合とそうでない場合のアクセスコントロールをまとめます。

なお、DBFS(Databricks File System)へのアクセスとMLflowアーティファクトのアクセスに関しては違いはありません。

|  | Unity Catalogあり | Unity Catalogなし |
|:--|:--|:--|
| [ファイル(DBFS)](#dbfsdatabricks-file-system)  | Databricksユーザーなら誰でもアクセス可能  |  Databricksユーザーなら誰でもアクセス可能 |
| [ファイル(外部ストレージ)](#外部ストレージ)  | Unity Catalogで許可された操作が可能  |  接続で使用している権限情報に従った操作が可能 |
| [マネージドテーブル](#マネージドテーブル)  | Unity Catalogでテーブルに許可された操作が可能  |  [テーブルアクセスコントロール](https://qiita.com/taka_yayoi/items/f0b999e69b9fef5065d8)が有効化されている場合には、設定された権限での操作が可能。有効化されていない場合には、Databricksユーザーであれば誰でも操作可能 |
| [外部テーブル](#外部テーブル)  | Unity Catalogでテーブルとテーブルで使用している外部ロケーションで許可された操作が可能  | [テーブルアクセスコントロール](https://qiita.com/taka_yayoi/items/f0b999e69b9fef5065d8)が有効化されている場合には、テーブルで使用しているファイルに設定された権限での操作が可能。有効化されていない場合には、テーブルで使用しているファイルにアクセスできる限りDatabricksユーザーであれば誰でも操作可能  |
| [MLflowアーティファクト](#mlflowアーティファクトに対するアクセスコントロール)  | MLflowエクスペリメントのアクセス権に準拠  | MLflowエクスペリメントのアクセス権に準拠  |
| [モデルレジストリ](#mlflowモデルレジストリに対するアクセスコントロール)  | 設定可能なアクセス権は`ALL PRIVILEGES`と`EXECUTE`のみ  |   [ステージ遷移](https://docs.databricks.com/ja/security/auth-authz/access-control/workspace-acl.html#assign-mlflow-model-permissions)などの権限設定が可能|

# ファイルに対するアクセスコントロール

ファイルが以下のどちらに格納されているのかによって挙動が異なります。

- DBFS
- 外部ストレージ(S3など)

## DBFS(Databricks File System)

[DBFS](https://qiita.com/taka_yayoi/items/e16c7272a7feb5ec9a92)はDatabricksで利用できるファイルシステムです。一部の例外を除いて**アクセスコントロールはされていません。** このため、Unity Catalogを使っているかどうかに関係なく、Databricksのユーザーであれば誰でも読み書きできます。このため、[こちら](https://qiita.com/taka_yayoi/items/406b639a9dcd43dbcc54)でも説明しているようにプロダクションで使用するようなデータを格納することはお勧めしません。

- **Unity Catalogあり**: Databricksユーザーなら誰でもアクセス可能。
- **Unity Catalogなし**: 同上

## 外部ストレージ

まず、Unity Catalogがある場合とないと場合とでは、外部ストレージへの接続方法が異なります。

- **Unity Catalogあり**: [外部ロケーション](https://qiita.com/taka_yayoi/items/18fee92365eee58e0b94)、[ボリューム](https://qiita.com/taka_yayoi/items/f72b27df9d630235750c)を使用。
- **Unity Catalogなし**: [DBFSマウント](https://qiita.com/taka_yayoi/items/897264c486e179d72247#dbfs%E3%81%B8%E3%81%AE%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E3%81%B8%E3%81%AE%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88)や[インスタンスプロファイル](https://qiita.com/taka_yayoi/items/446c7971be354f88c679)を使用。

Unity Catalogを使用している際には、外部ロケーションやボリュームへのアクセスコントロールが可能です。DBFSマウントの場合にはマウントで使用している権限情報に沿ってストレージにアクセスします。インスタンスプロファイルの場合も同様です。

- **Unity Catalogあり**: Unity Catalogで許可された操作が可能。
- **Unity Catalogなし**: 接続で使用している権限情報に従った操作が可能。

# テーブルに対するアクセスコントロール

Unity Catalogが有効化されている場合には、Unity Catalogのメタストアにアクセスします。Unity Catalogが有効化されていない場合、テーブルには[Hiveメタストア](https://qiita.com/taka_yayoi/items/8a79a0329f5b4e6e35ab)経由でアクセスします。

## マネージドテーブル

マネージドテーブルは、テーブルのメタデータに加えてテーブルデータもメタストアが管理するテーブルとなります。`DROP TABLE`でテーブルを削除した際にはメタデータと共にテーブルデータも削除されます。

- **Unity Catalogあり**: Unity Catalogでテーブルに許可された操作が可能。
- **Unity Catalogなし**: [テーブルアクセスコントロール](https://qiita.com/taka_yayoi/items/f0b999e69b9fef5065d8)が有効化されている場合には、設定された権限での操作が可能。有効化されていない場合には、Databricksユーザーであれば誰でも操作可能。

## 外部テーブル

外部テーブルとはアンマネージドテーブルとも呼ばれ、テーブルデータの格納場所が外部ストレージとなっているテーブルを指します。`DROP TABLE`でテーブルを削除した際にはメタデータは削除されますが、テーブルデータは削除されません。

- **Unity Catalogあり**: Unity Catalogでテーブルとテーブルで使用している外部ロケーションで許可された操作が可能。
- **Unity Catalogなし**: [テーブルアクセスコントロール](https://qiita.com/taka_yayoi/items/f0b999e69b9fef5065d8)が有効化されている場合には、テーブルで使用しているファイルに設定された権限での操作が可能。有効化されていない場合には、テーブルで使用しているファイルにアクセスできる限りDatabricksユーザーであれば誰でも操作可能。

# MLflowアーティファクトに対するアクセスコントロール

[MLflowのアーティファクト](https://qiita.com/taka_yayoi/items/e265d48a3e3473edd1b6)は、Databricks上でモデルトレーニングをした際に記録される機械学習モデルやメタデータです。

アーティファクトは[DBFS](https://qiita.com/taka_yayoi/items/e16c7272a7feb5ec9a92)に格納されますが、これは特殊なDBFSであり上述したような直接のアクセスはできません。アーティファクトへのアクセスはUCありなしに関係なく、[MLflowエクスペリメントのアクセス権](https://qiita.com/taka_yayoi/items/2dd6711b7b254505e4a3#mlflow%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9A%E3%83%AA%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E6%A8%A9%E8%A8%AD%E5%AE%9A)によって制御されます。

- **Unity Catalogあり**: MLflowエクスペリメントのアクセス権に準拠。
- **Unity Catalogなし**: MLflowエクスペリメントのアクセス権に準拠。

# MLflowモデルレジストリに対するアクセスコントロール

[MLflowモデルレジストリ](https://qiita.com/taka_yayoi/items/e7a4bec6420eb7069995)は機械学習モデルのバージョンやステータスの管理を可能にします。最近Unity Catalogでも[モデルレジストリの機能](https://docs.databricks.com/ja/machine-learning/manage-model-lifecycle/index.html)を提供するようになりましたが、[従来のモデルレジストリ](https://docs.databricks.com/ja/machine-learning/manage-model-lifecycle/workspace-model-registry.html)とアクセス権の考え方が異なります。

- **Unity Catalogあり**: 設定可能な[アクセス権](https://docs.databricks.com/ja/data-governance/unity-catalog/manage-privileges/privileges.html)は`ALL PRIVILEGES`と`EXECUTE`のみ。ステージ遷移の機能は現時点ではサポートされていません。
- **Unity Catalogなし**: [ステージ遷移](https://docs.databricks.com/ja/security/auth-authz/access-control/workspace-acl.html#assign-mlflow-model-permissions)などの権限設定が可能。

:::note
**注意**
Unity Catalogを有効化していても、従来のモデルレジストリの機能を利用できます。
:::

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

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