ServerlessDays 2025 Tokyo: AIに秘密を漏らさない!」RAG時代のアクセス制御:ReBACで実現するデータ保護

1.4K Views

September 20, 25

スライド概要

2025年9月20日にServerlessDays 2025 Tokyoで登壇させていただいた際の資料です。

profile-image

Developer Advocate for Auth0

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

「AIに秘密を漏らさない!」 RAG時代のアクセス制御: ReBACで実現するデータ保護 池原⼤然 | @neri78 @neri78

2.

👋 ⾃⼰紹介 池原 ⼤然 デベロッパーアドボケイト X (Twitter): @Neri78 Bluesky: neri78.bsky.social LinkedIn: daizenikehara GitHub: http://github.com/neri78 @neri78

3.

⽣成AIの ビジネス活⽤と リスク @neri78

4.

ビジネスに⽣成AI・LLMを利⽤するための外部連携 公開データのみから学習した LLMだけではビジネスには不⼗分 ‧ツール実装 ‧API呼び出し ‧RAG ‧MCP さまざまなものを組み合わせる @neri78

5.

AIアプリケーションのセキュリティ課題 OWASP 2025 Top 10 Risk & Mitigations for LLMs and Gen AI Apps 1 2 3 4 5 プロンプト インジェクション 機微情報の 漏洩 サプライ チェーン データやモデル の汚染 不適切な 出⼒処理 Prompt Injection Sensitive Information Disclosure Supply Chain Data and Model Poisoning Improper Output Handling 6 7 過剰な 代理⾏為 Excessive Agency 8 9 10 システム プロンプト の漏洩 ベクトルと 埋め込みの弱点 誤情報 無制限な 消費 System Prompt Leakage Vector and Embedding Weaknesses Misinformation Unbounded Consumption https://genai.owasp.org/llm-top-10/ @neri78

6.

RAGを⽤いた回答の作成と課題 〇〇について 教えて 2 渡される情報は質問した ユーザーがアクセスできるものか? 8 機微情報の 漏洩 ベクトルと 埋め込みの弱点 Sensitive Information Disclosure Vector and Embedding Weaknesses 画像出典 - https://js.langchain.com/docs/concepts/rag/ @neri78

7.

RAGを利用する場合に データをどう保護するか? @neri78

8.

適切なフィルタリング アクセスコントロールを⽤いて モデルに渡すデータを制限 画像出典 - https://python.langchain.com/docs/concepts/rag/ @neri78

9.

アクセス コントロールの 種類と特徴 @neri78

10.
[beta]
ロールを基にしたアクセス制御
(Role-Based Access Control, RBAC)
● グループ /ロールに割り当てられたユーザー
● アプリケーション /APIレベルでの大まかな権限
app.post('/expense/approve',
claimIncludes('role', 'approver'),
(req, res) => { ... });

app.post('/expense/approve',
claimIncludes('permissions', 'approve:expenses'),
(req, res) => { ... });

@neri78

11.

属性を利用し、細かなアクセス制御 (Attribute Based Access Control, ABAC) ● マネージャーは自分のチームの経費のみ 承認できる @neri78

12.

ポリシーエンジンを用いたアクセス制御 (Policy-based Access Control, PBAC) ポリシーエンジンを実装(ユーザーが経費の提出者のマネージャーかつ、承認の権限を持つか) アプリケーションからこのエンジンを呼び出し @neri78

13.

それぞれの特徴 粒度 認可 ロジック 認可 データ Role-based access control (RBAC) 粗い 集約 集約 Attribute-based access control (ABAC) 細かい アプリケーション コード アプリケーション データベース Policy-based access control (PBAC) 細かい 集約 アプリケーション データベース 名前 @neri78

14.

関係性を用いたアクセス制御 (Relationship-based Access Control, ReBAC) ● ● ● リソースへのアクセス許可が 「関係性」によって 決定されるアクセス制御 「ユーザーは、アクセスを可能にするほど、 指定されたオブジェクトや アクションと⼗分な関係があるか?」 ○ 直接関係がある ○ 関係性のグラフでつながっている 参考: Googleの様々な製品における 認可エンジン “Zanzibar” ○ 認可の判断となる関係性のデータは 認可システムに保存 Zanzibar: Google’s Consistent, Global Authorization System - https://research.google/pubs/zanzibar-googles-consistent-global-authorization-system/ @neri78

15.

https://zanzibar.academy/ @neri78

16.

ReBACを⽤いた認可ロジックと認可データの集約 粒度 認可 ロジック 認可 データ Role-based access control (RBAC) 粗い 集約 集約 Attribute-based access control (ABAC) 細かい アプリケーション コード アプリケーション データベース Policy-based access control (PBAC) 細かい 集約 アプリケーション データベース Relationship-based access control (ReBAC - Zanzibar based) 細かい 集約 集約 名前 @neri78

17.

ReBACを利用した RAGのアクセス制御 @neri78

18.

〇〇について 教えて ReBACを⽤いて”個々”の ドキュメントに対する アクセス権限を確認 画像出典 - https://js.langchain.com/docs/concepts/rag/ @neri78

19.

ReBACの実装例 OpenFGA Auth0 FGA @neri78

20.

OpenFGA / Auth0 FGAとは? ● ● Open FGA: Cloud Native Computing Foundation (CNCF)で現在 “Sandbox maturity level”として採択されているオープンソースの認可ソリューションプロジェクト Auth0 FGA: Open FGAをベースにしたサーバーレスサービス https://openfga.dev https://fga.dev @neri78

21.

認可モデル model schema 1.1 type user type doc relations define owner: [user] define viewer: [user, user:*] @neri78

22.

関係性タプル user relation object user:* viewer doc:public-doc user relation object user:neri78 viewer doc:private-doc @neri78

23.
[beta]
認可チェック (例)
// チェック
const { allowed } = await fgaClient.check({
user: 'user:neri78',
relation: 'viewer',
object: 'document:private-doc',
});
// allowedにtrue/falseの値が格納される
// 複数のリソースを一度にチェックする batchCheckメソッドも提供
@neri78

24.

Demo @neri78

25.
[beta]
export class RetrievalAgent {
// 省略…
static create(tools: StructuredToolInterface[]) {
const retrievalAgent = createReactAgent({
llm: new ChatOpenAI({ temperature: 0, model: "gpt-4o-mini" }),
tools,
stateModifier: [
"提供されたツールから取得したコンテキストにのみ基づいて、ユーザーの質問に答えてください。 ",
"ツールによって提供された情報のみを使用してください。 ",
"さらに情報が必要な場合は、尋ねてください。 ",
].join(" "),
});
return new RetrievalAgent(retrievalAgent);
}
// クエリ
async query(query: string) {
console.log(query);
const { messages } = await this.agent.invoke({
messages: [
{
role: "user",
content: query,
},
],
});
return messages.at(-1)?.content;
}
}

@neri78

26.
[beta]
// 1. assetsフォルダーからドキュメントをロード
const documents = await readDocuments();
// 2. OpenAI モデル用にインメモリベクターストアを作成
const vectorStore = await MemoryVectorStore.fromDocuments(
documents,
new OpenAIEmbeddings({ model: "text-embedding-3-small" })
);

@neri78

27.
[beta]
// 3. FGAを使って権限に合わせてフェッチするドキュメントを制限する Retriverを作成
const retriever = FGARetriever.create({
retriever: vectorStore.asRetriever(),
// ユーザーの権限にあわせた関係性タプル - ドキュメントに対して Viewerの関係性を持つか?
buildQuery: (doc) => ({
user: `user:${user}`,
object: `doc:${doc.metadata.id}`,
relation: "viewer",
}),
});
// 4. Retrieverをツールに変換
const fgaTool = retriever.asJoinedStringTool();
// 5. エージェントの作成
const retrievalAgent = RetrievalAgent.create([fgaTool]);
const prompt = "鯖レスコミュニティについて 2026年に開催予定のイベント情報や使用している
ツールなどを教えてください。 ";
// 6. プロンプトを使用して、検索エージェントに問い合わせ
const answer = await retrievalAgent.query(prompt);
console.info(answer);
@neri78

28.

auth0-ai-js/packages/ai/src/authorizers/fga/fga-filter.ts https://github.com/auth0-lab/auth0-ai-js/blob/main/packages/ai/src/authorizers/fga/fga-filter.ts#L111 @neri78

29.

まとめ ● ⽣成AIのビジネス活⽤とリスク ● RAGを利⽤する場合に必要なデータ保護 ● ReBACを⽤いたRAGの 細やか‧かつ中央化された認可処理 @neri78

30.

Auth for GenAI - AIアプリケーション向け機能強化 https://a0.to/ai-event @neri78

31.

Auth for GenAIが解決するもの ユーザ認証 外部サービスの アクセストークン取得 ⾮同期で ユーザに承認依頼 RAGに対して 粒度の細かな認可 @neri78

32.

ありがとうございました! @neri78 @neri78