安全注意事项

范围:本文档介绍了与 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 设计用于在使用数据库支持的存储时在 Oracle AI Database 中持久保存消息、内存、元数据和嵌入。这允许持久的检索和跨会话内存,但也意味着应用程序应该计划哪些数据适合保留。

以下指南可帮助部署与安全的数据处理实践保持一致:

关于检索范围和访问控制的注意事项

Oracle AI Agent Memory 使用调用方提供的 user_id、agent_id 和 thread_id 值来进行范围检索。这是一个强大的过滤模型,但它不应该是应用程序在决定如何使用或显示检索内容时所依赖的唯一控制。

缺省情况下,线程范围检索对 user_id 和 agent_id 使用完全匹配,对 thread_id 使用更广泛的匹配,因此相关结果可以跨越相同用户 - 代理对的过去线程。顶级 OracleAgentMemory.search() 和 search_async() 调用也需要显式的用户范围和精确的用户匹配。它们拒绝省略了用户范围和 exact_user_match=False,因此公共客户端 API 不会意外搜索多个用户。仅允许在完全匹配的用户和目标中传递 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 时,请按照 Securely Encrypting Network Traffic to Oracle AI Database 的官方部分进行操作,并在连接或池创建过程中配置 TLS 或其他批准的加密传输。

重要提示:切勿将 API 密钥、密码或其他密钥直接嵌入到应用程序代码、签入配置或导出的对象中。始终使用安全注入机制,并遵循最少权限原则进行身份证明访问。

建议采用以下部署实践:

关于网络通信和外部端点的注意事项

当部署配置远程 LLM 或嵌入提供程序时,Oracle AI Agent Memory 可以与外部服务通信。SDK 通过配置的客户端路径转发提示和请求参数,但周围的应用程序和部署仍负责保护这些连接。

我们建议您:

关于资源耗尽向量的注意事项

内存工作流可以随着时间的推移增加数据库使用量、嵌入流量和 LLM 标记消耗。这既适用于恶意过度使用,也适用于无辜的实施错误,例如超大消息或过于广泛的检索模式。

使用这些控件作为生产淬火的一部分:

推荐的 Oracle 深度数据安全部署

Oracle Deep Data Security(深度安全)可以在数据库中强制执行代理内存行和列约束条件,例如允许最终用户只读取和写入包含自己的 user_id 的行。UserOwnRowsDeepDataSecurityPolicy 策略还可防止最终用户在插入后更新所有权和身份列;有关确切的每表权限,请参见 Deep Data Security 。

为了最大程度地使用此安全功能,我们建议为每个安全责任使用单独的数据库用户,以便应用程序在缺少最终用户上下文时没有特权回退。

我们建议在生产环境中进行以下账户分离:

对于每个最终用户请求,对 OAM sdk 之外的用户进行验证,获取一个应用程序池连接,连接该用户的最终用户安全上下文,并通过该连接执行代理内存操作。在将连接释放到池之前清除上下文。上下文属于一个物理数据库会话;不能对另一个用户重复使用。Oracle Deep Sec 最终用户安全上下文生命周期文档介绍了相应的附件、替换和发布行为。

请勿将常规应用程序池直接传递给代理内存实例,除非数据库驱动程序配置为在每个获取的连接上附加当前请求的最终用户上下文。否则,SDK 操作可以借用没有上下文或请求上下文错误的会话。而是在应用程序中获取并配置连接,然后将该承载上下文的连接传递到请求范围的代理内存组件。

读取或写入用户拥有的记录的后台或延迟工作需要相同的保护。使授权的连接及其最终用户上下文保持有效,直到工作完成,或安排员工获取新的连接并附加正确的已验证用户上下文。切勿通过模式所有者运行此工作,只需绕过缺少的最终用户上下文即可。