Microsoft Fabric OneLake ショートカットに対するエンジン間の承認方式の違いについて

## はじめに

モチベーション

[内部 OneLake のショートカット](https://learn.microsoft.com/ja-jp/fabric/onelake/onelake-shortcuts#types-of-shortcuts)に記載の

>ユーザーが別の OneLake の場所へのショートカット経由でデータにアクセスすると、ショートカットのターゲット パス内のデータへのアクセスを承認するために、呼び出し元のユーザーの ID が使用されます*。 このユーザーがデータを読み取るためには、ターゲットの場所のアクセス許可を持っている必要があります。

>Power BI セマンティック モデルまたは T-SQL を介してショートカットにアクセスする場合、 呼び出し元のユーザーの ID はショートカット ターゲットに渡されません。代わりに、呼び出し元のアイテム所有者の ID が渡され、呼び出し元ユーザーへのアクセスが委任されます。

とはどういうことかを確認します。

## エンジンと承認のモデル

[Microsoft Fabric レイクハウスでのデータアクセス制御の方法メモ](https://qiita.com/ryoma-nagata/items/8ead185a63b4c99dc2da) でも触れたように、OneLake へのデータアクセスはそれぞれエンジンが異なります。
今回はアイテムの所有者と呼び出し元の関係を意識していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/77553d58-cc75-f232-c421-4ba10745c237.png)

このとき、ショートカットに対して誰のIDで元のデータにアクセスするのかにエンジンによる差が出るということです。
この記事では、誰の権限でもってアクセスするのかという承認モデルについて、**委任モデル** 、**SSOモデル** と区別します

### 委任モデル

>Power BI セマンティック モデルまたは T-SQL を介してショートカットにアクセスする場合、 呼び出し元のユーザーの ID はショートカット ターゲットに渡されません。代わりに、呼び出し元のアイテム所有者の ID が渡され、呼び出し元ユーザーへのアクセスが委任されます。

イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b3f2bb3a-d25b-5027-eeae-7a1b1fbc52b0.png)

### SSOモデル

>ユーザーが別の OneLake の場所へのショートカット経由でデータにアクセスすると、ショートカットのターゲット パス内のデータへのアクセスを承認するために、呼び出し元のユーザーの ID が使用されます*。 このユーザーがデータを読み取るためには、ターゲットの場所のアクセス許可を持っている必要があります。

イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0d2c257b-6860-e7d6-9579-b601deba6caa.png)


## 実際に検証してみる

データエンジニア：アイテム所有者
データサイエンティスト：呼び出し元　とします。

権限パターンを以下のようにして、 SQL 分析エンドポイント、レイクハウス表示、ノートブックでの表示を確認します。

| 権限パターン | アイテム所有者（データエンジニア） | 呼び出し元（データサイエンティスト） |
|:-:|:-:|:-:|
|パターン1|ターゲットパスへの ReadAll アクセス権を **付与しない**|ターゲットパスへの ReadAll アクセス権を**付与する**|
|パターン2|ターゲットパスへの ReadAll アクセス権を **付与する**|ターゲットパスへの ReadAll アクセス権を**付与しない**|


### 権限パターン1

| 権限パターン | アイテム所有者（データエンジニア） | 呼び出し元（データサイエンティスト） |
|:-:|:-:|:-:|
|パターン1|ターゲットパスへの ReadAll アクセス権を **付与しない**|ターゲットパスへの ReadAll アクセス権を**付与する**|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/c222a578-9e69-4919-77fe-b4213193a720.png)

※双方、ショートカット先のレイクハウスにはフル権限を持ちます

#### 権限を確認


データサイエンティストはターゲットパスへの権限を持ちますが、データエンジニアはもちません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b6296d9b-aa0a-0864-ef6a-8b74c363f0cb.png)

アイテムの所有者はデータエンジニアとなっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/97dce732-dc95-e19c-8fa0-9bba7cea2874.png)


ターゲットパスに権限をもつデータサイエンティストがショートカットを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/1f3491bd-ce40-abe4-62a9-e669b7faf063.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/bc3dfe2d-de57-ad70-b9f7-3b9fb5e47a7f.png)



#### SQL 分析エンドポイント結果

データサイエンティスト(呼び出し元)、データエンジニア（アイテム所有者）は双方 SQL 分析エンドポイントでショートカットしたテーブルを表示しようとするとエラーが発生する状態になりました。
これはSQL分析エンドポイントがテーブル同期処理を行う時点で委任モデルにより承認されていると判断できますが、委任先のアイテム所有者がアクセス権のないデータエンジニアであるために、テーブル同期処理を行う時点でショートカットターゲットへのアクセスができずにエラーが起きていると考えられます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/4d3bc5d3-2fd2-1e81-e9d5-28c721088137.png)

なお、この SQL 分析エンドポイントに対して同じワークスペースの別のウェアハウスからクロスデータベースクエリしようとした場合でも同じ結果となりました。あくまでショートカットをもつレイクハウス側の所有者により決定するようです。

#### レイクハウス上の表示結果

ショートカットターゲットに権限をもつデータサイエンティストのみが表示できました。
これはレイクハウス上の表示時のアクセスがSSOモデルで承認されていることを示しています。

データサイエンティストはテーブルデータの表示ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/56e412a2-c0f4-30c2-49d5-37a8398219b0.png)

データサイエンティストはファイルの表示ができます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/5a01aae0-3f72-0103-f080-41e2ff4c0733.png)

データエンジニアはテーブルデータの表示ができません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/d776ba39-93b8-5b02-fef1-032d16dddf9b.png)

データエンジニアはファイルの表示ができません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b0f8de6d-ddc8-44eb-796a-c454202b5413.png)

#### ノートブック結果

ショートカットターゲットに権限をもつデータサイエンティストのみが表示できました。
これはノートブックでのアクセスがSSOモデルで承認されていることを示しています。

データサイエンティストはテーブルデータの表示ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/ebb61b18-33bd-043b-537b-287da4afab38.png)

データエンジニアはテーブルデータの表示ができません。Delta Parquet ファイルへのForbiddenエラーが出ています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/33d9a504-63a4-f880-c7ba-8397138d3297.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/d12acee3-6bdf-f909-6dc9-768994ada186.png)

### 権限パターン2

| 権限パターン | アイテム所有者（データエンジニア） | 呼び出し元（データサイエンティスト） |
|:-:|:-:|:-:|
|パターン2|ターゲットパスへの ReadAll アクセス権を **付与する**|ターゲットパスへの ReadAll アクセス権を**付与しない**|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/453b4a17-febc-99fb-2dee-23ff7981db46.png)

※双方、ショートカット先のレイクハウスにはフル権限を持ちます


##### 権限確認

データエンジニアはターゲットパスへの権限を持ちますが、データサイエンティストはもちません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b861cacc-7917-91e0-c272-6ac9caabcdb6.png)

アイテムの所有者はデータエンジニアとなっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/d9f512c2-89fb-c20f-f059-5bfa2686e7a5.png)

データエンジニアにてショートカットを作成します（画像は割愛）

#### SQL 分析エンドポイント結果


ショートカット先に権限を持たないデータサイエンティストがショートカットテーブルに対してT-SQLでデータを表示できました。
SQL分析エンドポイントが委任モデルを採用しており、アイテムの所有者の権限で T-SQL でのショートカットターゲットパスへのアクセスがされていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/7add16e8-61f3-1dd6-7c95-267b3c851d36.png)

#### レイクハウス上の表示結果

なんとデータサイエンティストも表示ができました。レイクハウス上の表示はテーブルデータの表示に対して、SSOか委任のどちらかアクセスができる場合には表示ができるようです。
ただし、ファイル表示自体はSSOで動作しています

データサイエンティストテーブルデータの表示が **できます。** 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/2bb56ab7-b067-a81d-1fef-123ded4f3472.png)

データサイエンティストはファイルの表示ができません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0c836e6c-7a9d-5b4b-67db-43bc179b7299.png)

データエンジニアはテーブルデータの表示ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/aca6ffa2-88ec-3389-73ed-a7d42cde1caf.png)

データエンジニアはファイルの表示ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/9acf62c3-4561-7242-4d30-6ad6e713a20d.png)

#### ノートブック結果

ショートカットターゲットに権限をもつデータエンジニアのみが表示できました。
これはノートブックでのアクセスがSSOモデルで承認されていることを示しています。

ノートブックアクセスを確認します。

データサイエンティストはテーブルデータの表示ができません。Delta Parquet ファイルへのForbiddenエラーが出ています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b52af7cf-d4a0-0c64-6211-4bceef8dfe3a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/4ded8e0a-e082-f933-cfa0-c23ca92b47e3.png)

データエンジニアはテーブルデータの表示ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/2f59060b-d024-d63f-8c6e-667c04897881.png)


## 結果のまとめ

ここまでの結果をまとめます。

| 権限パターン | アイテム所有者（データエンジニア） | 呼び出し元（データサイエンティスト） |結果の対象|SQL分析エンドポイント|レイクハウス上の表示|ノートブック|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|パターン1|ターゲットパスへの ReadAll アクセス権を **付与しない**|ターゲットパスへの ReadAll アクセス権を**付与する**|アイテム所有者| **×** （テーブル同期エラー）| **×** | **×**  |
|パターン1|ターゲットパスへの ReadAll アクセス権を **付与しない**|ターゲットパスへの ReadAll アクセス権を**付与する**|呼び出し元| **×** （テーブル同期エラー）| **〇** | **〇**  |
|パターン2|ターゲットパスへの ReadAll アクセス権を **付与する**|ターゲットパスへの ReadAll アクセス権を**付与しない**|アイテム所有者| **〇** | **〇** | **〇**  |
|パターン2|ターゲットパスへの ReadAll アクセス権を **付与する**|ターゲットパスへの ReadAll アクセス権を**付与しない**|呼び出し元| **ファイル：×** <br> **テーブル：〇**| **×** | **×**  |

## 具体的なシナリオでの注意点として考えられること

エンジンによる承認方式の差異は以上のように複雑な仕様となっているため、特にデータの公開範囲と共有のシナリオには詳細な検証が必要と考えられます。

たとえば、 **ショートカット作成先のレイクハウスの作成をシステム管理者側であらかじめ実施して、ワークスペースビューアに対してSQLデータ公開** というシナリオは システム管理者側の権限でデータが公開されることになり、大問題となる可能性があるなど、シナリオ個々でのリスク確認が重要です。
このような問題は代理作業から生まれることがほとんどであると考えられるため、ショートカット先のレイクハウス作成など共有されたデータの利用はあくまでデータの消費者自身で実施してもらうことをおすすめします。