セキュリティーに関する考慮事項

スコープ: このドキュメントでは、Oracle AI Agent Memory Python SDKに関連するセキュリティ上の考慮事項について説明します。これは、SDKのアクティブ・メモリー機能またはストア・レイヤーのいずれかを使用するアプリケーションにのみ適用されます。

重要である理由: Oracle AI Agent Memoryは、スレッド・コンテンツ、イメージおよびメモリー・レコードをOracle AI Databaseに永続化し、LLMにバックアップされた機能が有効になっている場合は、イメージ記述の生成、要約、メモリーの抽出または埋込み用に構成済のモデル・エンドポイントにコンテンツを送信します。したがって、セキュアなデプロイメントは、アプリケーション・データの慎重な処理、取得範囲、データベース・アクセス、外部モデル・エンドポイントおよび保存ポリシーに依存します。

LLMでバックアップされたメモリー処理に関する考慮事項

Oracle AI Agent Memoryは、イメージ記述生成、スレッド要約、自動メモリー抽出などのアクティブメモリー機能をサポートしています。これらの機能を有効にすると、SDKはイメージ・バイト、最近のメッセージ、スレッド・サマリー、取得されたメモリーまたは検索テキストを構成済のLLMまたは埋込みエンドポイントに送信できます。イメージバイトが構成済みLLMに送信されるタイミングを決定するイメージの説明および抽出モードについては、Use Images and Multimodal Messagesを参照してください。

重要:構成されたモデル・エンドポイントおよびデプロイメント・ポリシーに適したコンテンツのみをOracle AI Agent Memoryに送信します。シークレット、資格証明または不要な機密データが含まれるように見えるデータに対してアクティブ・メモリーが有効になっている場合は、メッセージがメモリー・パイプラインに入る前にそのコンテンツを最小化またはリダクションします。抽出された記憶、要約、コンテキスト・カードおよびその他のモデル派生テキストを信頼できない出力として処理します。この出力は、統合アプリケーションによって安全にレビューおよび処理する必要があります。

警告:モデル派生テキストが永続メモリー状態になる可能性があります。自動抽出、要約またはコンテキスト・カード機能を有効にすると、アプリケーションがその特定の中間値をレビューする前に、SDKによってサマリー、抽出されたメモリーまたは取得されたレコードが、メモリー抽出、要約、コンテキスト・カードまたはエージェント・プロンプトなどの後のプロンプトに挿入されます。これを通常の信頼できないLLMデータ・フローとして扱います。アプリケーションが消費する出力を確認して検証し、メモリー由来のコンテンツが特権アクションまたはバイパス・ポリシーを認可しないようにします。

アクティブ・メモリー機能を使用する場合は、次の推奨事項に従います。

永続性およびデータの最小化に関する考慮事項

Oracle AI Agent Memoryは、DBバック・ストアが使用されたときに、メッセージ、メモリー、メタデータおよび埋込みをOracle AI Databaseに永続化するように設計されています。これにより、恒久的な取得およびクロスセッション・メモリーが可能になりますが、保持に適したデータをアプリケーションが計画する必要があることも意味します。

次のガイダンスは、セキュアなデータ処理プラクティスに従ってデプロイメントを維持するのに役立ちます。

取得スコープおよびアクセス制御に関する考慮事項

Oracle AI Agent Memoryでは、コール元提供のuser_id、agent_idおよびthread_id値を使用して、取得の範囲を指定します。これは強力なフィルタリング・モデルですが、取得したコンテンツの使用方法または表示方法を決定する際にアプリケーションが依存する唯一の制御ではありません。

デフォルトでは、スレッド・スコープ取得では、user_idとagent_idの完全一致とthread_idのより広い一致が使用されるため、関連する結果は、同じユーザー・エージェント・ペアの過去のスレッドにまたがることができます。最上位のOracleAgentMemory.search()およびsearch_async()コールでは、明示的なユーザー・スコープ指定と正確なユーザー一致も必要です。パブリック・クライアントAPIが誤って複数のユーザーを検索しないように、省略されたユーザー・スコープおよびexact_user_match=Falseを拒否します。user_id=Noneの受渡しは、ユーザー完全一致でのみ許可され、スコープなしレコードのみをターゲットとします。

取得を設計する際には、次の演習を使用します。

データベースで強制されるエンド・ユーザー認可の場合、Oracle Agent MemoryはOracle Deep Data Securityとの統合も公開します。これは、データベース・データ・ロール、データ権限およびエンドユーザー・セキュリティ・コンテキストに基づいて構築された個別のセキュリティ機能です。ポリシーを付与するか、共有ランタイム接続プールを使用する前に、ディープ・データ・セキュリティAPIおよびセキュリティ・リファレンスを確認してください。このページには、統合監査と、データベース・ポリシーの失効およびOCI IAMグループ・メンバーシップの変更の異なる有効時間も記載されています。

アプリケーション統合および呼出し側の信頼に関する考慮事項

Oracle AI Agent Memoryは、統合アプリケーションまたはその他の信頼できるバックエンド・コードによってコールされ、エンド・ユーザーが直接コールすることはありません。エンド・ユーザー向けのセキュリティ境界ではなく、エンド・ユーザーによる認証または認可を単独で実行しません。パッケージは、コール元を信頼して、各操作に対して正しいuser_id、agent_id、thread_idおよび取得スコープを提供します。

重要:統合アプリケーションは、Oracle AI Agent Memory APIをコールする前に、エンド・ユーザーの認証、アクセスの認可、および正しいuser_idとスコープの導出を担当します。コール元が提供するuser_idは、アイデンティティの証明ではなく、範囲指定値です。

SDKをエージェント・アプリケーションに統合する場合は、次の演習を使用します。

ロギングおよび診断に関する考慮事項

Oracle AI Agent Memoryでは、標準のPythonロギングが使用され、統合アプリケーションのアプリケーション・ログ・ハンドラまたはログ・レベルは構成されません。アプリケーションは、oracleagentmemoryロガーを有効にし、既存のロギング構成を介してSDKログをルーティングできます。

SDKログを使用する場合は、次の演習を使用します。

データベース・アクセス、スキーマ管理およびシークレットに関する考慮事項

Oracle AI Agent Memoryでは、コール元提供のOracle AI Database接続またはプールが使用されます。パッケージは、データベース資格証明自体を作成または管理しません。また、コール元にかわってデータベース・ネットワーク暗号化を作成、ネゴシエートまたはアップグレードしません。

重要:本番コードは、TLS対応のOracle AI Database接続またはプールをOracle AI Agent Memoryに渡す必要があります。SDKは、コール元提供の接続またはプールをそのまま使用し、プレーン・テキストDSNをアップグレードしません。信頼できないネットワーク、共有ネットワークまたは外部ネットワーク間でプレーン・テキストのデータベース接続を使用しないでください。python-oracledbを使用する場合は、公式のOracle AI Databaseへのネットワーク・トラフィックの安全な暗号化の項に従って、接続またはプールの作成の一部としてTLSまたは別の承認済暗号化トランスポートを構成します。

重要: APIキー、パスワードまたはその他のシークレットをアプリケーション・コード、チェックイン構成またはエクスポートされたアーティファクトに直接埋め込まないでください。セキュア・インジェクション・メカニズムを常に使用し、資格証明アクセスの最小権限の原則に従います。

次のデプロイメント・プラクティスをお薦めします。

ネットワーク通信および外部エンドポイントに関する考慮事項

Oracle AI Agent Memoryは、デプロイメントがリモートLLMまたは埋込みプロバイダを構成するときに、外部サービスと通信できます。SDKは、構成されたクライアント・パスを介してプロンプトおよびリクエスト・パラメータを転送しますが、周囲のアプリケーションおよびデプロイメントは引き続きこれらの接続を保護します。

次をお薦めします:

リソース疲労ベクトルに関する考慮事項

メモリー・ワークフローは、データベースの使用率を高め、トラフィックを埋め込み、LLMトークンを経時的に消費できます。これは、悪意のある過剰使用と、サイズの超過メッセージや過剰な検索パターンなどの無実の実装ミスの両方に当てはまります。

本番の強化の一環として、次のコントロールを使用します。

Oracle Deep Data Securityの推奨デプロイメント

Oracle Deep Data Security (Deep Sec)では、エンド・ユーザーが独自のuser_idを含む行のみを読み書きできるようにするなど、エージェント・メモリーの行と列の制約をデータベースに強制できます。また、UserOwnRowsDeepDataSecurityPolicyポリシーによって、エンド・ユーザーは挿入後に所有権およびアイデンティティ列を更新できなくなります。表ごとの権限の詳細は、「ディープ・データ・セキュリティ」を参照してください。

このセキュリティ機能を最大限に活用するには、セキュリティ職責ごとに個別のdbユーザーを使用することをお薦めします。これにより、エンド・ユーザー・コンテキストが存在しない場合、アプリケーションに特権フォールバックがないようになります。

本番環境では、次の勘定科目分離をお薦めします。

エンド・ユーザー・リクエストごとに、OAM sdkの外部でユーザーを認証し、1つのアプリケーション・プール接続を取得し、そのユーザーのエンド・ユーザー・セキュリティ・コンテキストをアタッチし、その接続を介してエージェント・メモリー操作を実行します。接続をプールに解放する前に、コンテキストをクリアします。コンテキストは1つの物理データベース・セッションに属し、別のユーザーに対して再使用しないでください。OracleのDeep Secエンドユーザー・セキュリティ・コンテキスト・ライフサイクル・ドキュメントでは、対応する添付、置換およびリリース動作について説明します。

取得されたすべての接続に現在のリクエストのエンド・ユーザー・コンテキストをアタッチするようにデータベース・ドライバが構成されている場合を除き、一般アプリケーション・プールをエージェント・メモリー・インスタンスに直接渡さないでください。それ以外の場合、SDK操作では、コンテキストがないか、リクエスト・コンテキストが正しくないセッションを借用できます。かわりに、アプリケーションで接続を取得して構成し、そのコンテキストを重視する接続をリクエスト・スコープのエージェント・メモリー・コンポーネントに渡します。

ユーザー所有レコードの読取りまたは書込みを行うバックグラウンドまたは遅延作業には、同じ保護が必要です。認可された接続とそのエンド・ユーザー・コンテキストは、作業が完了するまで有効にしておくか、ワーカーが新しい接続を取得し、正しい認証済ユーザーのコンテキストをアタッチするように手配します。欠落しているエンドユーザー・コンテキストをバイパスするのみで、スキーマ所有者を介してこの作業を実行しないでください。