Slide 1

Slide 1 text

マルチテナントな AIエージェントを作ってみた Amazon Bedrock AgentCoreについて発表するLT会! #whi_linklight 2025/08/26 @kdnakt

Slide 2

Slide 2 text

自己紹介

Slide 3

Slide 3 text

自己紹介 名前:木谷明人 / KIDANI Akito (@kdnakt) 所属:株式会社Works Human Intelligence 役職:Manager 好きなもの:TLSとヘヴィメタル🤘

Slide 4

Slide 4 text

AWSとわたし ● AWSパートナープログラム ○ AWS Ambassador (2024〜) ○ Japan AWS Top Engineer (Software, 2024 & 2025) ● 社外登壇 ○ SaaS on AWS 2023 「大手法人向けマルチテナント SaaSにおけるセキュリティ実装をご紹介」 ○ JAWS PANKRATION 2024 「Focus Areas in Software Architecture Reviews」

Slide 5

Slide 5 text

話すこと・話さないこと ● 話すこと ○ 生成AIとマルチテナント ○ マルチテナントってなんだっけ? ○ AgentCore Runtimeで動かすマルチテナントな AIエージェント ● 話さないこと ○ AgentCore Runtimeのデプロイ方法とか ○ AgentCore Runtime以外の機能

Slide 6

Slide 6 text

生成AIとマルチテナント

Slide 7

Slide 7 text

OWASP Top 10 for LLM Applications 2025 https://genai.owasp.org/llm-top-10/ ● LLM01:2025 プロンプトインジェクション ● LLM02:2025 機密情報の開示 ● LLM03:2025 サプライチェーン ● LLM04:2025 データとモデルポイズニング ● LLM05:2025 不適切な出力処理 ● LLM06:2025 過剰なエージェンシー ● LLM07:2025 システムプロンプトの漏洩 ● LLM08:2025 ベクトルと埋め込みの脆弱性 ● LLM09:2025 誤情報 ● LLM10:2025 際限のない消費

Slide 8

Slide 8 text

LLM08:2025 ベクトルと埋め込みの脆弱性 ● リスク ○ 不正アクセスとデータ漏洩 ○ マルチテナント環境での情報漏洩 、複数ソースの衝突 ○ 埋め込みの反転によるソースの復元 ○ データポイズニングによるモデル出力操作 ○ モデルの有効性の低下 ● 予防と緩和 ○ アクセスの許可・制御 ○ データの検証とソースの認証 ○ データレビュー ○ モニタリングとロギング

Slide 9

Slide 9 text

マルチテナントってなんだっけ?

Slide 10

Slide 10 text

マルチテナントとは: ちょっと前の自分のイメージ ● 複数のテナント(利用者) ● 全員がアプリケーションやデータベースを共有する

Slide 11

Slide 11 text

『マルチテナントSaaSアーキテクチャの 構築』 ● Tod Golding 著、河原哲也、櫻谷広人 訳 ● https://www.oreilly.co.jp/books/9784814401017/ ● 2025年1月発行

Slide 12

Slide 12 text

マルチテナントSaaSアーキテクチャ ● マルチテナントSaaSアーキテクチャ =コントロールプレーン+アプリケーションプレーン ○ コントロールプレーン:オンボーディング、請求、メトリクス、 etc ○ 同一バージョンのアプリケーションを全テナントで実行、一括管理 ○ 部分的に専用リソース(サイロ化リソース)も利用

Slide 13

Slide 13 text

アプリケーションプレーンの内部 ● クロステナントアクセス防止が重要 ○ テナント分離 ■ 他テナントのアクセスからテナントのリソースを保護する対策・実装が必要 ○ データパーティショニング ■ データ特性に応じてテナントのデータを分割するストレージ戦略 ○ テナントのルーティング ■ テナントの共有リソースと専用リソースを正しくつなぐ必要がある ● 生成AIのリソース:プロンプト、ベクトルデータ、モデル、etc ○ テナント分離などの一般的マルチテナントの原則を適用可能

Slide 14

Slide 14 text

Amazon Bedrock AgentCoreで マルチテナントをやってみる

Slide 15

Slide 15 text

AIエージェントの概要 ● Strands Agentで実装しAgentCore Runtimeにデプロイ ● リクエスト:プロンプト+テナント名 ○ フロントエンドと繋ぐ時間がなかったので簡易実装 🙇 ● S3 Vectorsのベクトルデータをクエリするツール ○ リクエストをもとに利用する IAMロール、 インデックスを決定 ● テナント専用のデータを返す

Slide 16

Slide 16 text

データパーティショニング ● テナントごとのバンドデータをS3 Vectorsのベクトルインデックスに格納

Slide 17

Slide 17 text

テナント分離 ● テナント専用のベクトルインデックスのみアクセス可能なIAMロール

Slide 18

Slide 18 text

テナントのルーティング (1/5)

Slide 19

Slide 19 text

テナントのルーティング (2/5)

Slide 20

Slide 20 text

テナントのルーティング (3/5)

Slide 21

Slide 21 text

テナントのルーティング (4/5)

Slide 22

Slide 22 text

テナントのルーティング (5/5)

Slide 23

Slide 23 text

AgentCore Agent sandboxでテスト (1/2) ● ベクトルインデックスのデータに応じた回答が返ってくる

Slide 24

Slide 24 text

AgentCore Agent sandboxでテスト (2/2) ● ベクトルインデックスのデータに応じた回答が返ってくる

Slide 25

Slide 25 text

テナント分離の効果 ● 実装を間違えてもデータが漏洩しない

Slide 26

Slide 26 text

今後の課題(気になっていること) ● メトリクス ○ AgentCore ObservabilityやCloudWatchが使えそう? ● テナント分離 ○ AgentCore GatewayとAgentCore Identityも使いたかった ● デプロイ ○ S3 Vectorsのベクトルインデックスのデータ更新のベストプラクティスは? ○ AgentCore Runtimeのバージョンアップのベストプラクティスは? ● etc

Slide 27

Slide 27 text

まとめ ● S3 VectorsとBedrock AgentCoreを使ってマルチテナントなAIエージェントを 作ってみた ● 生成AI、AIエージェントでもクロステナントアクセスの防止は、通常のSaaSと同じ 考え方でいけそう ○ テナント分離 ○ データパーティショニング ● 今回は使いこなせなかったAgentCoreの機能も、今後試してみたい

Slide 28

Slide 28 text

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