Databricks Unity Catalog と Azure Data Factory 利用時における INSUFFICIENT_PERMISSIONS エラーへの対応方法

## 概要

Azure Data Factory (ADF)から Azure Databricks ノートブックの実行時に発生する INSUFFICIENT_PERMISSIONS エラーへの対応方法を共有します。ADF から Databricks への認証を実施する際には、Databricks アクセストークンを利用するのではなく、ADF の`Managed service identity`（マネージド ID ）により認証することが多いです。その場合には、ADF がユーザーとして処理を実行するため、 Unity Catalog への権限付与が必要となります。初期開発時にはアクセスクラスターで動作させ、その後に ADF のマネージド ID による認証に切り替えた際などに次のようなエラーに遭遇することがあるようです。

```text
AnalysisException: [INSUFFICIENT_PERMISSIONS] Insufficient privileges:
User does not have USE CATALOG on Catalog 'uc_migration_01'.
```

```text
AnalysisException: [INSUFFICIENT_PERMISSIONS] Insufficient privileges:
User does not have SELECT on Table 'uc_migration_01.schema_01.test2'.
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c695e301-883e-bbf8-6ce4-7b173f96e97d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/8918a79e-6982-3109-ddb3-bdf78466fbff.png)

対応方法としては、Databricks 上で Service principals 扱われている ADF に対して Unity Catalog のオブジェクトへの権限付与を実施する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/0aacd260-539b-1db2-96fc-b5a5ce4fc0c4.png)

本記事ではエラーの再現方法と対応方法を共有します。

## エラーの再現方法と対応方法

### 事前準備

#### 1. ADF のマネージド ID に対して Databricks Workspace の 共同作成者権限付与を付与後、ADF にてリンクドサービスを作成

下記の記事が参考になります。

- [Azure Databricks activities now support Managed Identity authentication - Microsoft Community Hub](https://techcommunity.microsoft.com/t5/azure-data-factory-blog/azure-databricks-activities-now-support-managed-identity/ba-p/1922818)

#### 2. Databricks にて Unity Catalog を利用したノートブックを作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/b4e113e4-9947-e44e-d842-b58826f638e9.png)

#### 3. ADF にてDatabricks ノートブックアクティビティのパイプラインを作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/338daed0-f91c-b950-81a7-56d0e66366c7.png)

### エラーの再現

#### 1. ADF にてパイプラインを実行

権限が不足している場合には、次のようなエラーが発生します。

```text
AnalysisException: [INSUFFICIENT_PERMISSIONS] Insufficient privileges:
User does not have USE CATALOG on Catalog 'uc_migration_01'.
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c695e301-883e-bbf8-6ce4-7b173f96e97d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/8918a79e-6982-3109-ddb3-bdf78466fbff.png)

### エラーへの対応方法

#### 1. Databricks にて Unity Catalog に対する権限を ADF のマネージド ID に付与

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/0aacd260-539b-1db2-96fc-b5a5ce4fc0c4.png)

#### 2. ADF にてパイプラインが正常実行できることを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/b09b6553-6d54-d890-80e6-073ecd42dd37.png)

### まとめ

本記事では、Azure Data Factory (ADF)から Azure Databricks ノートブックの実行時に発生する INSUFFICIENT_PERMISSIONS エラーへの対応方法を詳細に解説しました。このエラーは、ADF のマネージド ID による認証を使用して Databricks への認証を行う際に、Unity Catalog への適切な権限が付与されていない場合に発生します。

対応策としては、Service principals に対して Unity Catalog のオブジェクトに対する権限を付与することが必要です。これにより、ADF が Databricks 上でユーザーとして処理を実行することが可能になります。

本記事の手順に従って、事前準備、エラーの再現、そしてエラーへの対応方法を順に実施することで、この問題を解決することができます。これにより、ADF と Databricks を連携して効率的にデータ処理を行うことが可能となります。

以上が、Databricks Unity Catalog と Azure Data Factory 利用時における INSUFFICIENT_PERMISSIONS エラーへの対応方法についてのまとめです。この情報が皆様の問題解決に役立つことを願っています。