📘

「それ、見せちゃダメなやつ!」を防ぐ。Auth0 for AI Agentsによる鉄壁のRAGセキュリティ

に公開

AIエージェントの認証・認可における課題

Auth0 for AI AgentsはAIエージェントがユーザーに代わって行動する際、従来のAPIキーや認可手法では「誰が何を、なぜ行ったか」というパーユーザーの文脈を欠き、結果として明確な監査証跡が残せなくなるといった問題に対応します。AIエージェントは、人間のように行動を再考することなく自律的に動作するため、適切なガードレールがなければ意図しない結果を招くリスクがあります。

Auth0 for AI Agentsとは

Auth0 for AI Agentsは、これらの構造的な課題を解決するために開発された、企業がAIを安全に導入するための包括的な認証・認可ソリューションです。このソリューションは、開発者がわずか数行のコードでセキュリティを組み込めるように設計されており、AIフレームワーク(LangChain、Llamaindex、Google GenKit、Vercel AI SDK)とのシームレスな統合を提供します。

Auth0 for AI Agentsは、AIエージェントのライフサイクル全体を保護するために、以下の4つの主要な技術的コンポーネントを基盤としています。

コンポーネント 技術的役割 AIセキュリティへの貢献
User Authentication 人間ユーザーの識別、セッション管理 AIモデルへのアクセスを認可された個人に限定し、パーソナライズされた体験と会話履歴の保護を実現
Token Vault OAuth 2.0トークン交換、リフレッシュトークン管理 ユーザーの代理として外部APIへの安全なアクセス委任を可能にし、静的キーの利用を排除
FGA for RAG Relationship-Based Access Control (ReBAC) RAGパイプラインにおける機密文書へのきめ細かなアクセス制御とデータ漏洩の防止
Async Authorization Human-in-the-Loop (HITL) フロー 自律的エージェントのクリティカルな行動に対する人間の監督と明確な監査証跡の確保

RAGにおける情報漏洩リスク

Retrieval-Augmented Generation(RAG)システムは、大規模言語モデル(LLM)の応答に企業の独自のデータソースを組み込むことで、応答の正確性と関連性を大幅に向上させます。しかし、RAGはAIシステムにおけるデータ漏洩の最も大きなリスクの一つを内包しています。

FGA for RAGが解決しようとするのは、この権限なきアクセスリスクです。一般的なRAGシステムは、コンテンツを格納するデータベースと、そのコンテンツをベクトル化して保存するベクトルデータベースで構成されます。しかし、ベクトルデータベースは全ての情報を知識の集合として扱うため、インデックス化の段階では「どのユーザーがどの情報にアクセスできるか」という権限情報は含まれていません。

そのため、AIエージェントがユーザーの質問に基づいて検索を行うと、ベクトルストアはユーザーの権限を考慮せず、クエリに関連する全てのドキュメントを返してしまいます。もし、この中にユーザーがアクセス権を持たない機密文書が含まれていた場合、その内容は「コンテキスト」としてLLMに渡されてしまいます。

LLMは与えられたコンテキストに基づいて回答を生成するため、結果としてユーザーが閲覧を許可されていない機密情報が回答に含まれてしまう、という重大なデータ漏洩に繋がるのです。

なぜ起きるのか

格納時

なぜこのようなことが起きるのでしょうか? それを考えるためにドキュメントの格納プロセスを考えます。

通常、インデックス化は、全てのドキュメントにアクセス可能な特権プロセスによって行われます。そして、ドキュメントを列挙し、埋め込みベクトルとしてベクトル化し、ベクトルDBやコンテンツDBに格納します。問題は、このときに、きちんとアクセス権まで考慮されるかどうかです。

埋め込みベクトルとは、格納するドキュメントを数値のベクトルで表現したものです。例えば、ベクトルが4次元だと仮定し、「休暇申請の仕方」というドキュメントをA、「経費申請の仕方」というドキュメントをBとします。このとき、それぞれの埋め込みベクトルは以下のように表現されます。

  • A: (1, 0, 0, 0)
  • B: (0, 1, 0, 0)

検索時

このベクトルが検索時に重要となります。例えば、「夏休みを取りたいのですが、どうすればいいですか?」といった、より自然な質問が来たとします。この質問も同様にベクトル化され、その意味的な近さから、データベースに格納されているドキュメントA(「休暇申請の仕方」)のベクトルに最も近いと判断されます。キーワードは完全一致していなくても、「意味」を理解して最適なドキュメントを検索するのがベクトル検索の強みです。

問題は、この検索プロセスではアクセス権が一切考慮されない点です。この例では休暇申請のドキュメントが返されるため問題ありません。しかし、もし検索されたのがユーザーがアクセス権を持たない機密ドキュメントだった場合、まさに記事タイトルにある「それ、見せちゃダメなやつ!」という状況が発生してしまうのです。

Auth0 FGAによるアクセスコントロール

Auth0 Fine-Grained Authorization (FGA) は、この問題を解決するため、認可ロジックをRAGパイプラインの 「検索時(Retrieval)」のステップ に統合します。これは、セキュリティ決定をデータがLLMに渡される前の段階に「シフトレフト」させるアプローチです。

  1. 認可モデルの定義(ReBAC)
  2. 検索結果のフィルタリング(Filtered Retrieval)

このプロセスにより、LLMに渡されるコンテキストは、その質問を行った認証済みユーザーがアクセスを保証されたドキュメントチャンクのみに限定されます。これにより、動的な情報検索が行われるRAG環境においても、きめ細かなアクセス制御が実現され、データ漏洩が未然に防がれます。

認可ロジックの分離による開発負担の軽減

Auth0 FGA for RAGがない場合、開発者は手動で複雑なアクセス制御を実装する必要があります。例えば、ベクトルデータベースの検索結果をコンテンツデータベースに問い合わせる際にユーザーレベルの権限を偽装したり、データベース側で行レベルのセキュリティを実装したり、データ欠落時のフォールバック処理を実装したりといった対応が求められます。

Auth0 FGA for RAGは、これらの負担を解消するために、認可決定をRAGパイプラインの最も早い段階、つまり検索を実行する前に実施することを可能にします。

認可ロジックの集中化: ReBACモデルに基づき、アプリケーションコードやデータベースから認可ロジックを完全に分離し、Auth0 FGAという単一の認可ストアに集約します。

実行時のフィルタリング: ユーザーが質問をすると、アプリケーションはベクトルデータベースにアクセスする前に、まずAuth0 FGAに対して 「このユーザー(ID)が読み取りを許可されているすべてのドキュメントIDのリスト」 を問い合わせます。

安全な検索の実行: アプリケーションは、FGAから返された認可済みのドキュメントIDリストを使ってベクトルDBへのクエリをフィルタリングします(Filtered Retrieval)。

これにより、機密情報がLLMに渡されるリスクが根絶されると同時に、ユーザーIDの伝搬やDB側でのRLSのカスタム実装といった複雑なエンジニアリング作業から解放されるのです。

Discussion