そのほか
2026/02/25
齋藤 孝太

Databricks Apps でユーザー単位のアクセス制御を実現

Databricks Appsでユーザー単位のアクセス制御を実装。トークン取得からSDK実行まで解説。

はじめに

Databricks Apps を使ったアプリケーション開発において、ユーザーごとに異なるデータアクセス権限を適用したいケースは多いでしょう。本記事では、Databricks Apps でユーザートークンを取得し、Unity Catalog や Genie Space へのアクセス制御を一気通貫で実装する方法を解説します。

事前設定

1. アプリでのユーザー権限設定


まず、Databricks Apps でユーザー認証を有効化します。


Compute > Apps > 対象のアプリ > Edit > Configure resources から User authorizationからAdd scopeより以下のように設定します。




 


重要: User authorization が Preview モードになっていることを確認してください。有効になっていない場合は、ユーザー設定から Previews をクリックしてトグルを ON にします。



2. Genie Space への権限付与


接続する Genie Space に対して、ユーザーが Run 以上の権限 を持っていることを確認します。Genie Space の Share ボタンから権限設定を確認できます。




アプリと Genie Space を接続するため、


app.yaml

に Genie Space ID を定義しておきます。



command: ['streamlit', 'run', 'app.py'] 

env:
- name: 'GENIE_SPACE_ID'
valueFrom: 'genie_space_id'
- name: 'GENIE_DYNAMIC_META'
valueFrom: 'genie_dynamic_meta'
- name: 'OPENAI_API_KEY'
valueFrom: 'openai-api-key'
- name: 'GEMINI_API_KEY'
valueFrom: 'gemini-api-key'
- name: 'DATABRICKS_WAREHOUSE_ID'
valueFrom: 'sql-warehouse'
- name: 'STREAMLIT_GATHER_USAGE_STATS'
value: 'false'


3. Unity Catalog への権限付与


ユーザーが参照したいカタログ、スキーマ、テーブルに対して適切な権限(USE CATALOG、USE SCHEMA、SELECT など)が付与されていることを確認します。


実装の流れ

ステップ1: ユーザートークンの取得


Streamlit のコンテキストから、ユーザーがアクセスした際、リクエストヘッダー(x-forwarded-access-token)からトークンを取得します。




user_token = None 
if hasattr(st, "context") and st.context.headers is not None:
   user_token = st.context.headers.get("x-forwarded-access-token")

ステップ2: パイプライン初期状態への保存


取得したトークンを、エージェントの状態管理(state)に保存します。これにより、すべてのサブエージェントが同じトークンにアクセスできるようになります。




state = { 
      "user_input": user_input,
      "chat_history": chat_history,
      "user_access_token": user_token, # <--- Stateに保存 }


ステップ3: エージェントでのトークン利用


エージェントで state からトークンを取り出し、Databricks SDK のクライアント(WorkspaceClient)を作成します。




# state からトークンを取得 
user_token = ctx.session.state.get("user_access_token")
# トークンを使って WorkspaceClient を作成
if user_token:
w = WorkspaceClient( token=user_token, auth_type="pat" )
else: w = WorkspaceClient()

作成したクライアントとDatabricks SDKの


statement_execution

APIを使用してSQLクエリ(


statement

)を実行し、データを取得します。



stmt = w.statement_execution.execute_statement( 
statement=query,
warehouse_id=warehouse_id,
catalog="data"
)



まとめ

Databricks Apps でユーザー単位のアクセス制御を実装するポイントは以下の通りです。



  1. 事前設定: User authorization、Genie Space、Unity Catalog の権限設定を正しく行う

  2. トークン取得: st.context.headers から x-forwarded-access-token を取得

  3. State 管理: 取得したトークンをState に保存し、各エージェントで参照

  4. SDK 利用: WorkspaceClient 作成時に tokenauth_type="pat" を指定


この実装により、アプリケーション全体でユーザーの権限に基づいたデータアクセス制御が実現できます。セキュリティとガバナンスを保ちながら、柔軟なデータ活用が可能になります。


New call-to-action