AI エージェントの認証
AI エージェントは、タスクを完了するために他のリソースに対して認証を行う必要があることがよくあります。たとえば、デプロイされたエージェントは、非構造化データをクエリするために AI Search インデックスにアクセスしたり、基盤モデルを呼び出すためにサービングエンドポイントにアクセスしたり、カスタムロジックを実行するために Unity Catalog 関数にアクセスしたりする必要がある場合があります。
このページでは、Databricks Appsにデプロイされたエージェントの認証方法について説明します。Model Servingエンドポイントにデプロイされたエージェントについては、AIエージェントの認証 (Model Serving)を参照してください。
Databricks Appsは、エージェント向けに2つの認証方法を提供します。各メソッドは異なるユースケースに対応します:
手法 | 説明 | 使用する場合 |
|---|---|---|
エージェントは、一貫したアクセス許可を持つ自動的に作成されたサービスプリンシパルを使用して認証を行います。以前はサービスプリンシパル認証と呼ばれていました。 | 最も一般的なユースケースです。すべてのユーザーがリソースに対して同じアクセス権を持つ必要がある場合に使用します。 | |
エージェントは、リクエストを行うユーザーのIDを使用して認証します。以前はOn-Behalf-Of (OBO) 認証と呼ばれていました。 | Unity Catalogでユーザー固有の権限、監査証跡、またはきめ細かいアクセス制御が必要な場合に使用します。 |
両方の方法を単一のエージェントで組み合わせることができます。たとえば、アプリ認証を使用して共有AI検索インデックスにアクセスしながら、ユーザー認証を使用してユーザー固有のテーブルをクエリします。
ワークスペースUIまたは宣言型オートメーションバンドルで認証を構成します。
すべての認証設定は2つの方法で構成できます。
- ワークスペースUI : 構成 ステップからアプリを編集し、リソースとスコープを管理します。ワークスペースで単一のアプリを反復処理する場合に推奨されます。
- ** 宣言型オートメーションバンドル **: リソース、スコープ、環境変数を
databricks.ymlファイルで宣言し、databricks bundle deployを使用してデプロイします。Git ベースのバージョン管理、CI/CD、または同じエージェントを複数のワークスペースにわたってデプロイする場合に推奨されます。すべての エージェントテンプレート にはdatabricks.ymlが付属しています。
両方のパスは、同じランタイム構成を生成します。このページの残りの部分では、両方の形式で各手順を示しており、いずれかを選択してプロジェクト内で一貫性を保つことができます。
どちらのパスでもアプリケーションにリソースを追加するには、リソースとアプリケーションの両方に対するCan Manage権限が必要です。
完全なバンドルのリファレンスについては、アプリリソースとapp.リソースを参照してください。エンドツーエンドのバンドルのチュートリアルについては、宣言型オートメーションバンドルを使用したDatabricksアプリの管理を参照してください。
アプリの認可
デフォルトでは、Databricks Appsはアプリ認証を使用して認証します。Databricksはアプリを作成する際にサービスプリンシパルを自動的に作成し、それがアプリのIDとして機能します。
アプリと対話するすべてのユーザーは、サービスプリンシパル用に定義された同じ権限を共有します。このモデルは、すべてのユーザーが同じデータを見たい場合、またはアプリがユーザー固有のアクセスコントロールに縛られない共有操作を実行する場合にうまく機能します。
アプリの認可に関する詳細情報については、アプリの認可を参照してください。
MLflowエクスペリメントにアクセス許可を付与する
エージェントは、トレースと評価結果をログに記録するためにMLflowエクスペリメントへのアクセスが必要です。サービスプリンシパルに、エクスペリメントでのCan Edit権限を付与します。
- Workspace UI
- Declarative Automation Bundles
- アプリのホームページで「 編集 」をクリックします。
- 設定 ステップに進みます。
- App リソース セクションで、
Can Edit権限を持つMLflowエクスペリメントのリソースを追加します。
-
アプリの
databricks.ymlにあるresourcesリストの下にエクスペリメントを宣言します。リソースに割り当てるnameは、環境変数を設定するときに後で参照されます。YAMLresources:
apps:
my_agent:
name: 'my-agent'
source_code_path: ./
resources:
- name: 'experiment'
experiment:
experiment_id: '<experiment-id>'
permission: 'CAN_EDIT' -
バンドルを再デプロイします:
Bashdatabricks bundle deploy
databricks bundle run my_agent
すべてのフィールドについては、app.resources.experimentを参照してください。
他のDatabricksリソースに権限を付与する
エージェントが Genie Spaces、AI Search インデックス、SQLウェアハウスなどの他の Databricks リソースを使用する場合は、各リソースでサービスプリンシパル権限を付与します。
プロンプトを保存するための Unity Catalog スキーマに対する CREATE FUNCTION、EXECUTE、MANAGE の権限を付与して、プロンプト レジストリにアクセスします。
Unity Catalogリソースへのアクセスを許可する場合、すべてのダウンストリームの依存リソースにも権限を付与する必要があります。たとえば、Genieスペースへのアクセスを許可する場合、その基盤となるテーブル、SQLウェアハウス、およびUnity Catalog関数へのアクセスも許可する必要があります。
- Workspace UI
- Declarative Automation Bundles
Databricks ワークスペースでアプリを作成または編集する際に、**App リソース**セクションからアプリにリソースを追加します。
- アプリのホームページで「 編集 」をクリックします。
- 設定 ステップに進みます。
- **App リソース**で、エージェントが使用する各リソースに対して**+リソースの追加**をクリックし、アクセス許可を設定します。
サポートされているリソースとスクリーンショットの完全なリストについては、Databricks アプリにリソースを追加するを参照してください。
-
databricks.yml内のアプリの下にあるresourcesリストで、エージェントが使用するすべてのリソースを宣言します。以下の例は、MLflowエクスペリメント、サービングエンドポイント、Genie Space、SQLウェアハウス、AI Searchインデックス、Unity Catalog関数、およびLakebaseインスタンスを使用するエージェントを示しています。各リソースnameはconfig.envからvalue_fromを通じて参照されるため、エージェントはランタイムに解決された識別子を受け取ります。YAMLbundle:
name: my_agent
resources:
apps:
my_agent:
name: 'my-agent'
description: 'Custom agent deployed on Databricks Apps'
source_code_path: ./
config:
command: ['uv', 'run', 'start-app']
env:
- name: MLFLOW_EXPERIMENT_ID
value_from: 'experiment'
- name: LAKEBASE_INSTANCE_NAME
value_from: 'database'
resources:
- name: 'experiment'
experiment:
experiment_id: '<experiment-id>'
permission: 'CAN_EDIT'
- name: 'llm'
serving_endpoint:
name: 'databricks-claude-sonnet-4-5'
permission: 'CAN_QUERY'
- name: 'sales-genie'
genie_space:
space_id: '<genie-space-id>'
permission: 'CAN_RUN'
- name: 'warehouse'
sql_warehouse:
id: '<warehouse-id>'
permission: 'CAN_USE'
- name: 'docs-index'
uc_securable:
securable_full_name: 'main.docs.chunks_index'
securable_type: 'TABLE'
permission: 'SELECT'
- name: 'lookup-function'
uc_securable:
securable_full_name: 'main.tools.order_lookup'
securable_type: 'FUNCTION'
permission: 'EXECUTE'
- name: 'database'
database:
instance_name: '<lakebase-instance-name>'
database_name: 'databricks_postgres'
permission: 'CAN_CONNECT_AND_CREATE'
targets:
dev:
mode: development
default: true
config.env内のvalue_fromのすべての値は、resourcesリスト内のnameフィールドと一致する必要があります。不一致により、デプロイされたアプリ内で環境変数がNoneとして解決されます。
-
バンドルをデプロイして開始します。
Bashdatabricks bundle validate
databricks bundle deploy
databricks bundle run my_agentbundle deployソースをアップロードし、リソースを構成します。bundle runは、最新のソースを使用してアプリを開始または再起動します。bundle runへの引数は、resources.apps(ここではmy_agent) の下の YAML キーであり、デプロイされたアプリのnameフィールドではありません。
すべてのリソースサブタイプの完全なスキーマについては、app.resources を参照してください。
次の表に、上記の例で使用されている最小限の権限と、各リソースタイプに対応するDeclarative Automation Bundlesの値を一覧表示します。
リソースタイプ | ワークスペースUIの権限 | 宣言型オートメーションバンドルリソースと権限 |
|---|---|---|
SQLウェアハウス |
|
|
モデルサービングエンドポイント |
|
|
Unity Catalog 関数 |
|
|
Genieスペース |
|
|
AI Searchインデックス |
|
|
Unity Catalogテーブル |
|
|
Unity Catalog接続 |
|
|
Unity Catalog ボリューム |
|
|
Lakebase (プロビジョニング済み) |
|
|
Lakebase (オートスケール) |
|
|
最小特権の原則に従ってください。エージェントが必要とする権限のみをサービスプリンシパルに付与し、アプリごとに専用のサービスプリンシパルを使用してください。完全なリストについては、セキュリティのベストプラクティスを参照してください。
ユーザー認証
プレビュー
ユーザー認可はパブリックプレビュー段階です。ユーザー認可を使用する前に、ワークスペース管理者がこれを有効にする必要があります。
ユーザー認可により、エージェントは要求を行うユーザーの ID で動作できます。以下を提供します:
- ユーザーごとの機密データへのアクセス
- Unity Catalogによって適用されるきめ細かなデータ制御
- ユーザー固有の監査証跡
- 行レベルフィルターと列マスクの自動適用
エージェントが、アプリケーションのサービスプリンシパルの代わりにリクエスト元のユーザーのIDを使用してリソースにアクセスする必要がある場合は、ユーザーの認可を使用します。
ユーザー認証のしくみ
エージェントのユーザー認可を構成する場合:
- **アプリケーションにAPIスコープを追加します**: アプリケーションがユーザーに代わってアクセスできるDatabricks APIsを定義します。アプリにスコープを追加するを参照してください。
- ユーザー認証情報がダウンスコープされます : Databricks はユーザーの認証情報を取得し、定義した API スコープのみに制限します。
- トークン転送 : ダウンスコープされたトークンは、
x-forwarded-access-tokenHTTPヘッダーを介してアプリで利用できます。 - MLflow AgentServer がトークンを保存します :Agent Server は、エージェントコードで便利なアクセスができるように、このトークンをリクエストごとに自動的に保存します。
Databricks Apps UI でアプリを作成または編集する際、あるいは API を使用してプログラムでスコープを追加することにより、ユーザー認可を構成します。詳細な手順については、アプリへのスコープの追加を参照してください。
ユーザー認証を持つエージェントは、次のDatabricksリソースにアクセスできます。
- SQLウェアハウス
- Genieスペース
- ファイルとディレクトリ
- モデルサービングエンドポイント
- AI Search インデックス
- Unity Catalog接続
- Unity Catalogテーブル
ユーザー認可を実装する
ユーザー認証を実装するには、アプリに認可スコープを追加する必要があります。スコープは、アプリがユーザーに代わって実行できることを制限します。利用可能なスコープのリストとスコープセマンティクスについては、スコープベースのセキュリティと特権昇格を参照してください。
- Workspace UI
- Declarative Automation Bundles
- Databricks UIで、アプリの**認可**設定に移動します。
- [ユーザー認可] の下で、 [+スコープの追加] をクリックし、アプリがユーザーに代わってリソースにアクセスするために必要なスコープを選択します。
- 変更を保存し、アプリを再起動してください。
-
databricks.ymlのアプリリソース上のuser_api_scopesでスコープを宣言します。YAMLresources:
apps:
my_agent:
name: 'my-agent'
source_code_path: ./
user_api_scopes:
- sql
- dashboards.genie
- serving.serving-endpoints
resources:
- name: 'experiment'
experiment:
experiment_id: '<experiment-id>'
permission: 'CAN_EDIT' -
バンドルを再デプロイし、アプリを再起動します。
Bashdatabricks bundle deploy
databricks bundle run my_agent
ワークスペースでユーザー承認を初めて有効にした後、既存のアプリがスコープを使用できるようになる前に再起動する必要があります。アプリにスコープを追加するを参照してください。
エージェントコードでユーザー認証を設定するには、AgentServer からこのリクエストのヘッダーを取得し、その資格情報でワークスペースクライアントを構築します。
-
エージェントコードで、認証ユーティリティをインポートします:
databricks/app-templatesから提供されているテンプレートのいずれかを使用する場合は、提供されているユーティリティをインポートしてください。
Pythonfrom databricks_app.utils import get_user_workspace_clientそれ以外の場合は、エージェントサーバーユーティリティからインポートします:
Pythonfrom agent_server.utils import get_user_workspace_clientget_user_workspace_client()関数は、エージェントサーバーを使用してx-forwarded-access-tokenヘッダーをキャプチャし、それらのユーザー認証情報でワークスペースクライアントを構築し、ユーザー、アプリ、エージェントサーバー間の認証を処理します。 -
アプリの起動時ではなく、クエリ時にワークスペースクライアントを初期化します。
get_user_workspace_client()をinvokeおよびstreamハンドラ内で呼び出し、__init__またはアプリの起動時には呼び出さないでください。ユーザー認証情報は、ユーザーがリクエストを行うクエリ実行時にのみ利用可能です。アプリの起動時に初期化すると、まだユーザーコンテキストが存在しないため失敗します。
# In your agent code (inside invoke or stream handler)
user_client = get_user_workspace_client()
# Use user_client to access Databricks resources with user permissions
response = user_client.serving_endpoints.query(name="my-endpoint", inputs=inputs)
スコープの追加とスコープベースのセキュリティの理解に関する完全なガイドについては、「スコープベースのセキュリティと権限昇格」を参照してください。エージェントに必要な最小限のスコープのみをリクエストし、ユーザーに代わって実行されたすべてのアクションをログに記録します。詳細については、「ユーザー認証のベストプラクティス」を参照してください。
ユーザー認可を確認
スコープを追加してget_user_workspace_client()を呼び出した後、アプリのDatabricksサービスプリンシパルではなく、エージェント実行が呼び出し元であることを確認します。 転送されたトークンが見つからない場合、 get_user_workspace_client()発生せずにDatabricksサービス プリンシパルにフォールバックするため、エージェントはアプリとして動作しながら、通常の応答を返すことができます。 確認するには、 whoamiツールを追加し、自分自身としてそれを呼び出してください。ユーザー名が返された場合、ユーザー認証は正常に機能しています。
current_user.me() はデフォルトのiam.current-user:readスコープでカバーされているため、このテストではスコープを追加する必要はありません。
from agents import Agent, function_tool
from agent_server.utils import get_user_workspace_client
@function_tool
def whoami() -> str:
"""Returns the identity of the current user."""
user_wc = get_user_workspace_client()
return user_wc.current_user.me().user_name
agent = Agent(
name="my-agent",
instructions=(
"When the user asks who they are, call the whoami tool "
"and return the raw result."
),
model="databricks-claude-sonnet-4-6",
tools=[whoami],
)
エージェントを再デプロイします。AIエージェントを作成してDatabricks Appsにデプロイするを参照してください。
- Workspace UI
- Python
ワークスペース UI テストは最も迅速な健全性チェックであり、 OAuthトークンを必要としません。
- スコープの変更はすぐに有効になりますが、内部キャッシュが更新されるまでに最大5分かかる場合があります。テストする前にその間お待ちください (アプリの再起動は不要です)。アプリのURLのブラウザクッキーを常にクリアしてください (ステップについては以下のドロップダウンを参照してください)。そうしないと、スコープ変更前に発行されたトークンがセッションで再利用されます。
- アプリに対して
CAN USEの権限があることを確認してください。Databricksアプリの権限を構成するを参照してください。 - ブラウザでアプリの URL を開いてください。初回アクセス時に、要求されたスコープの同意プロンプトを受け入れてください。
- チャットで、
Who am I?を尋ね、エージェントがユーザー名を返すことを確認します(例:you@your-company.com)。
Chrome で Cookie をクリアする。
- DevToolsを開くには、 F12 キーを押すか、macOSの場合は Cmd+Option+I 、WindowsまたはLinuxの場合は Ctrl+Shift+I を押します。
- Application タブを開きます。
- Storage > Cookies で、アプリの URL を選択します。
- 各 Cookie を右クリックし、 削除 を選択します。
![Application タブ、アプリ URL の cookie、および右クリックの[Delete]メニューを示す Chrome DevTools。](/gcp/ja/assets/images/chrome-devtools-clear-cookies-113da64a2affc4f59d05f913103ae1c6.png)
CLIプロファイルまたはDatabricksサービス プリンシパル資格情報を使用して、エージェントを呼び出します。 クエリ オプションについては「 Databricksにデプロイされたエージェントをクエリする」を参照し、 OAuthトークンを生成する方法については「トークン認証を使用してAPI Databricksアプリに接続する」を参照してください。
-
スコープの変更はすぐに有効になりますが、内部キャッシュが更新されるまでに最大5分かかる場合があるため、テストを行う前にしばらくお待ちください(アプリの再起動は不要です)。
-
エージェントを自分自身として呼び出す:
Pythonfrom databricks.sdk import WorkspaceClient
from databricks_openai import DatabricksOpenAI
app_name = "<your-app-name>"
prompt = [{"role": "user", "content": "Call the whoami tool and return only the raw result."}]
w = WorkspaceClient(profile="<your-profile>")
client = DatabricksOpenAI(workspace_client=w)
response = client.responses.create(model=f"apps/{app_name}", input=prompt)
print(response.output_text)出力はユーザー名になります。例えば、「
you@your-company.com」です。
ツールがユーザー名の代わりにUUIDを返す場合、x-forwarded-access-tokenヘッダーがツールに到達しておらず、エージェントがアプリのDatabricksサービスプリンシパルにフォールバックしました(UUIDはアプリのサービスプリンシパルのクライアントIDです)。診断するには、次のそれぞれを確認してください。
- ユーザー認証がワークスペースで有効になっています。
- アプリにスコープが設定されています。
get_user_workspace_client()アプリの起動時ではなく、@invokeまたは@streamハンドラ内で呼び出されます。- コードは
get_user_workspace_client()を使用し、WorkspaceClient()は使用しません。
注意すべき点:
whoami[**本番運用前に ツールを削除してください。**] これは診断専用であり、エージェントを呼び出せるすべてのユーザーにユーザーIDを公開します。- 2番目のユーザーでテストします。 シングルユーザーチェックはトークンが転送されることを確認し、2番目の呼び出し元は、共有のフォールバックではなく、各リクエストが独自のIDを取得することを確認します。
- 転送されたトークンはログに記録しないでください。 ユーザー承認のベストプラクティスを参照してください。
- 特定のスコープを検証するには 、
current_user.me()をそのスコープを必要とする呼び出しで置き換えてください。例えば、ウェアハウスに対するSELECT current_user()ステートメントは、sqlスコープをエンドツーエンドで実行します。
Databricks MCP サーバーへの認証
Databricks マネージド MCP サーバーは、AI Search インデックスと Unity Catalog 関数を https://<workspace>/api/2.0/mcp/ai-search/<catalog>/<schema> および https://<workspace>/api/2.0/mcp/functions/<catalog>/<schema> の形式の URL を介してツールとして公開します。従来の /api/2.0/mcp/vector-search/ URL プレフィックスは、下位互換性のために引き続き機能します。利用可能なサーバーとその URL パターンのリストについては、Databricks マネージド MCP サーバーを参照してください。
認証するには、エージェントのサービスプリンシパル(ユーザー認証を使用している場合はユーザー)に、それらのスキーマ内のすべてのダウンストリームリソースへのアクセスを付与します。
たとえば、エージェントが次の MCP サーバー URL を使用する場合です:
https://<your-workspace>/api/2.0/mcp/ai-search/prod/customer_supporthttps://<your-workspace>/api/2.0/mcp/ai-search/prod/billinghttps://<your-workspace>/api/2.0/mcp/functions/prod/billing
prod.customer_support および prod.billing のすべての AI Search インデックス、および prod.billing のすべての Unity Catalog 関数にアクセス権を付与する必要があります。
- Workspace UI
- Declarative Automation Bundles
各インデックスと関数を [アプリ リソース] の下にリソースとして追加します。他のDatabricksリソースへの権限の付与 と同じステップに従います。
-
アプリの
resourcesリストの下に、インデックスごと、関数ごとにuc_securableエントリを1つ追加します。YAMLresources:
apps:
my_agent:
resources:
- name: 'support-index'
uc_securable:
securable_full_name: 'prod.customer_support.tickets_index'
securable_type: 'TABLE'
permission: 'SELECT'
- name: 'billing-index'
uc_securable:
securable_full_name: 'prod.billing.invoices_index'
securable_type: 'TABLE'
permission: 'SELECT'
- name: 'refund-function'
uc_securable:
securable_full_name: 'prod.billing.process_refund'
securable_type: 'FUNCTION'
permission: 'EXECUTE' -
バンドルを再デプロイします:
Bashdatabricks bundle deploy
databricks bundle run my_agent
mcp-で始まるアプリ名を持つ独自のDatabricksアプリとしてホストされているカスタムMCPサーバーは、バンドルリソースとしてはまだサポートされていません。MCPサーバーアプリで、エージェントのサービスプリンシパルにCan Useをdatabricks apps update-permissionsを使用して手動で付与します。エージェントテンプレートのリポジトリにあるcustom-mcp-server skillを参照してください。