こちらのユーザー代理認証(on-behalf-of-user authorization)、実際に触ったことがなかったのでした。
ユーザー認証は、on-behalf-of-user authorization とも呼ばれ、Databricks Apps アプリがアプリユーザーのアイデンティティで動作することを可能にします。Databricks はユーザーのアクセストークンをアプリに転送し、アプリはそのトークンを使用してユーザーに代わってリソースにアクセスします。Databricks は、ユーザーの既存の Unity Catalog ポリシーに基づいてすべての権限を強制します。
デフォルトではアプリに割り当てられるサービスプリンシパルに対するアクセスコントロールなので、きめ細かいアクセス制御ができないので、こちらの機能はありがたいです。
ただ、試すの面倒だなーと思っていたところ、いい感じのサンプルがありました。
早速試してみます。上のリポジトリをGitフォルダとして連携して同期します。
アプリを作る際には、こちらで説明されているようにユーザー認証のセクションで、アクセスするリソースのスコープを追加する必要があります。
アプリにアクセスすると、このアプリはあなたの資格情報でリソースにアクセスする旨のメッセージが表示されます。上でスコープを指定したリソースが表示されます。
アプリはこんな感じ。デフォルトで作成されるアプリごとのサービスプリンシパル(SP)とユーザー代理認証の比較を行うことができます。
ただ、デフォルトのテーブルはサンプルデータなのでSPだろうがユーザーだろうがアクセスできます。
そこで、冒頭にあったUnity Catalogのポリシーを適用したテーブルで試します。
以下のポリシーでは自分以外を対象として適用される、列マスクのポリシーとなっています。
サービスプリンシパルでアクセスするとemail
列がマスキングされています。
アプリがデータなどのリソースにアクセスする際には、ユーザーごとに挙動を変えたいというニーズは多いと思います。是非OBOをご活用ください!