View a markdown version of this page

内存的策略示例 - 亚马逊基岩 AgentCore

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

内存的策略示例

本页提供特定于 Amazon Bedrock M AgentCore emory 的 Cedar 策略模式——将调用者与自己的参与者、自己的命名空间和一组选定的内存操作隔离开来。有关这些策略引用的内存操作 ID 和context.input字段,请参阅内存操作和请求属性。有关通用 Cedar 模型和更广泛的模式库(OAuth 范围和角色检查、IAM 主体匹配unless、forbid使用和输入验证),请参阅了解 Cedar 策略和示例策略。

您可以通过CreatePolicy操作将每个 Cedar 策略添加到网关的策略引擎中,将 Cedar 声明作为策略传递definition。有关设置顺序,请参见为内存设置细粒度访问控制。

在每个 Cedar 示例中,<target-name>替换为您的连接器目标名称和<gw-arn>网关 ARN。

Per-user 隔离 — actorId 必须等于 JWT 主体

仅当请求actorId等于其 JW sub T 声明时,才允许 OAuth 用户访问会话。这是 Memory 的核心每用户隔离模式:每个用户只能访问自己的 actor 数据。

permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"<target-name>___POST:/memories/{memoryId}/actor/{actorId}/sessions/{sessionId}", resource == AgentCore::Gateway::"<gw-arn>" ) when { principal.hasTag("sub") && context has input && context.input has actorId && context.input.actorId == principal.getTag("sub") };

命名空间隔离 — 调用者只能在自己的命名空间下检索记录

此策略允许 OAuth 调用者仅在请求与代币声明中携带的调用者自己的命名空间路径namespacePath相匹配时检索内存记录。

Cedar 不支持字符串串联——该+运算符仅适用于整数操作数,like通配符模式必须是字符串文字。因此,您无法根据策略内部的声明构建命名空间值(例如,无效("/actors/" + principal.getTag("sub") + "/")的 Cedar)。取而代之的是,让您的身份提供商发布已包含调用者的完整命名空间路径的声明,将其映射到主标签,然后与该标签进行namespacePath比较。在此示例中,令牌提供的namespace声明包含调用者的命名空间路径(例如/actors/<sub>/)。

permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"<target-name>___POST:/memories/{memoryId}/retrieve", resource == AgentCore::Gateway::"<gw-arn>" ) when { principal.hasTag("namespace") && context has input && context.input has namespacePath && context.input.namespacePath == principal.getTag("namespace") };

操作范围界定 — 仅允许一组内存操作

授予固定的内存操作列表,例如,允许列出事件和检索记录,但不允许其他任何操作。使用多个内存操作进行分组action in […​];不支持动作 ID 通配符。

permit( principal, action in [ AgentCore::Action::"<target-name>___POST:/memories/{memoryId}/actor/{actorId}/sessions/{sessionId}", AgentCore::Action::"<target-name>___POST:/memories/{memoryId}/retrieve" ], resource == AgentCore::Gateway::"<gw-arn>" );

要确保只能通过网关访问内存,而不是由主体直接调用内存数据平面访问内存,请参阅限制直接访问内存。