読み込み中…
読み込み中…
LangChainは、LangSmithデプロイメントにおいてマルチテナントアクセスを容易に実装できる方法を解説しています。カスタム認証ハンドラー(auth.py)を用いてユーザーIDをリソースメタデータに付与し、スレッドや実行結果をユーザーごとに分離する仕組みを示しています。Supabaseなどの認証プロバイダーと連携させることで、フロントエンドからバックエンドへのトークン伝播と権限ベースのアクセス制御を数行のコードで実現可能です。
AIエージェントの企業導入において「データ分離」と「アクセス制御」は必須要件だが、LangSmithがこれを低コードで提供している点は大きい。Supabaseとの連携例は実装の参考になりやすく、LangChain公式のデベロッパー向けに非常に有用なコンテンツである。
デフォルトではAPIキーでロックされるため、本番環境ではユーザーごとのリソース分離とアクセス制御が不可欠である。
クライアント、認証プロバイダー(例:Supabase)、LangSmithエージェントサーバーの3層構造でトークン検証と認可を行う。
langgraph.jsonでauth.pyを指定し、get_current_userやauth_onなどのデコレーターを用いてユーザースコーピングと権限管理を実装する。
Supabase経由で取得したアクセストークンをデフォルトヘッダーに設定し、LangSmithデプロイメントへのリクエストに付与する。
ローカル環境でのテスト後、langgraph deployコマンドでクラウドにデプロイし、ユーザー切り替えによるスレッドの分離を確認する。
LangChainはこの機能により、エンタープライズ向けAIアプリケーションのセキュリティ要件を満たすためのハードルを大幅に下げた。開発者は複雑な認可基盤を自前で構築する必要がなくなり、既存の認証プロバイダーと組み合わせるだけで安全なマルチテナント環境を構築できる。これはAIエージェントの企業内展開における標準的なプラクティスを確立するものと考えられる。
LangChain が提供する LangSmith のデプロイメント機能に、本番環境で必須となる「ユーザーごとのリソース分離」と「権限管理」を実装する方法が解説されました。これまで API キー一つで全ユーザーがアクセス可能だったデフォルト設定から、Supabase などの認証プロバイダーと連携させることで、数行のコード追加だけで安全なマルチテナント環境を構築できる仕組みです。
LangSmith のデプロイメントには、エージェントの作成やスレッド管理など 30 以上の API エンドポイントが用意されています。しかし、デフォルトの状態ではこれらの機能は「ワークスペースに紐付いた LangSmith API キー」によってのみロックされます。
これは開発環境や個人利用では問題ありませんが、本番環境で複数のユーザーが同じエージェントを利用するケースには致命的な欠陥があります。
デフォルト設定のままでは、ユーザー A が作成したスレッドや会話履歴を、権限のないユーザー B も閲覧・操作できてしまいます。これはセキュリティ上好ましくなく、多くのユースケースで「他者のリソースへのアクセス制限」が求められます。
例えば、ある企業が LangSmith エージェントを社内で展開する場合、営業担当者が顧客の会話履歴を見られる一方で、開発担当者はそのデータにアクセスできないといった分離が必要になります。LangChain は、この複雑な認可基盤を自前で構築する必要をなくし、既存の認証システムと組み合わせるだけで実現可能であることを示しています。
マルチテナント化を実現する仕組みは、以下の 3 つの要素が連携することで成り立っています。
ユーザーがログインすると、認証プロバイダーからクライアントへトークンが発行されます。その後、クライアントが LangSmith デプロイメントに対して API を呼び出す際、このトークンを HTTP ヘッダーに付与して送信します。サーバー側ではそのトークンを検証し、ユーザーの ID やロール(権限)を特定。これに基づいて「どのリソースにアクセスできるか」を判断します。
この仕組みの実装は、驚くほどシンプルです。LangGraph の設定ファイル langgraph.json と、独自の認証ロジックを記述した auth.py を用意するだけで済みます。
まず langgraph.json で、デプロイメントが参照すべき認証ハンドラーを指定します。ここでは auth.py ファイルを指し示すことで、LangSmith がカスタムロジックを読み込むようになります。
{
"agent": {
"path": "deep_agents:deep_agent",
"auth": "auth"
}
}auth.py ファイルでは、LangGraph SDK が提供する Auth クラスを利用して、以下の 3 つのデコレーターを定義します。
get_current_user: ユーザーの認証を行うハンドラーです。リクエストからトークンを取得し、Supabase に問い合わせることで現在のユーザー ID やロール(例:admin, user)を返します。この情報は、その後の権限判断やメタデータ付与に利用されます。auth_on: すべてのリソース操作(スレッド一覧の取得など)で自動的に実行されるデコレーターです。ここで重要なのは、ユーザー ID をリソースのメタデータ(所有者情報)として書き込む処理です。これにより、ユーザーがスレッド一覧を要求した際、システム側が「自分が所有するスレッドのみ」をフィルタリングして返すようになります。フロントエンド側に追加ロジックは不要です。auth_on_crons_create: 特定の操作(例:cron ジョブの作成)に対して権限ベースのアクセス制御を適用します。例えば「admin ロールを持つユーザーのみが cron を作成可能」といったルールを実装できます。重要な点は、カスタムミドルウェアを追加したり、すべてのリクエストで手動でデータベースクエリを実行する必要がないことです。デコレーターを数個定義し、ユーザー ID をメタデータに付与するだけで、細粒度の権限管理とマルチテナンシーが自動的に機能します。
実装後は、フロントエンド側でアクセストークンを適切にデプロイメントへ伝播させる必要があります。Supabase を使用している場合、ログイン時に取得したアクセストークンを HTTP リクエストのデフォルトヘッダーとして設定するだけです。
// app.tsx の例:アクセストークンをヘッダーに付与
const client = createClient(
process.env.SUPABASE_URL,
process.env.SUPABASE_ANON_KEY,
{ auth: { persistSession: true } }
);
// トークン取得後、LangSmith API リクエストに含める
headers.set('Authorization', `Bearer ${token}`);この状態でローカル環境でテストすると、以下の挙動が確認できます。
この状態を langgraph deploy コマンドでクラウド上にデプロイすると、同様の分離機能が本番環境でも保証されます。Supabase プロジェクトの構成を変更せずとも、同じ認証フローで動作するため、開発コストも大幅に削減できます。
LangChain のこの機能は、エンタープライズ向け AI アプリケーションが直面していた「セキュリティ要件を満たすためのハードル」を劇的に下げました。複雑な認可基盤をゼロから構築する必要はなく、Supabase や Auth0 などの既存認証プロバイダーと組み合わせるだけで、安全でスケーラブルなマルチテナント環境を数行のコードで実現可能です。
これは、AI エージェントが企業内に広く展開される未来において、標準的なセキュリティプラクティスを確立する重要な一歩と言えるでしょう。
この記事はAIが動画の内容を記事化したものです。正確な発言は動画および文字起こしをご確認ください。