View a markdown version of this page

临时策略 - 亚马逊基岩 AgentCore

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

临时策略

Amazon Bedrock 中的策略 AgentCore 支持临时策略:其决策取决于代理在会话中的操作历史记录,而不仅仅取决于当前请求的策略。使用它们,您可以强制执行跨越多个操作的规则,例如要求在操作之前获得批准、限制一个操作在一个时间窗口内运行的次数或将运行总数保持在阈值以下。

临时策略是包含一个permit或多个时态运算符的或forbid规则。每个条件通过其操作、主体和操作的输入或输出字段来匹配先前为会话记录的事件,并且仅考虑所需时间窗口内的事件。条件可以将匹配的事件与当前请求相关联,因此,例如,规则可以要求当前请求对先前操作已批准的资源进行操作。策略引擎记录每个会话的事件并评估每个请求的这些条件,因此您可以将会话感知规则表示为策略,而不是在代理或工具代码中跟踪事件。

临时策略是用 Dogwood 编写的,它与 Cedar 兼容,支持所有现有的 Cedar 策略。标准的 Cedar 政策是无国籍的,仅考虑当前的请求。临时策略遵循相同的默认拒绝模式:只有在permit应用请求时才允许请求,不能forbid替代请求。时间条件不同于基于时间的条件,后者根据挂钟时间 (context.system.now) 而不是会话历史记录来限制访问。您还可以在LOG_ONLY模式下运行临时策略,以观察其在升级到之前将做出的决定ENFORCE;请参阅策略执行模式。

重要概念

时间策略建立在两个基础之上:Dogwood策略语言,它表示会话感知规则,以及策略会话,它涵盖了规则可以看到的历史记录。

Dogwood 的政策语言

临时策略是用 Dogwood 编写的,Dogwood 是一种开源策略语言,Policy AgentCore 用于会话感知授权。Dogwood 建立在 Cedar 基础上,使用相同的授权模型:你对委托人、操作和资源进行编写permit和forbid规则,并且只有在permit应用时才允许请求,不能forbid覆盖它。Dogwood 与 Cedar 兼容,支持所有现有的雪松政策,因此每份有效的雪松保单也是有效的 Dogwood 保单。您现有的时间点策略将继续有效,无需更改,并且只有在规则必须考虑超过当前请求的情况下才添加临时条件。

使用 Dogwood,您可以将会话感知规则声明为策略,而不是在代理或工具代码中实现事件跟踪逻辑。策略引擎记录相关事件并评估每个请求的条件。例如,以下政策仅允许在前一小时内获得相应批准时进行销售:

permit ( principal, action == AgentCore::Action::"TradingTarget___SellShares", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/my-gateway" ) when temporal { formerly within 1h AgentCore::Action::"TradingTarget___ApproveSale"::response{ eventResource: resource, input.stock: context.input.stock, input.shares: context.input.shares, output.approved: true } };

Dogwood 为常见模式提供了时间运算符:formerly within(窗口早些时候发生的匹配事件)、since within(自锚事件发生以来条件一直保持不变)以及聚合count和sum窗口中的匹配事件。

有关完整的时间语法,请参阅 Dogwood 政策网站上的 Dogwood 语言指南。

策略会话和会话 ID

临时策略根据策略会话进行评估:分组在一个会话 ID 下的一系列相关网关调用。时间历史记录的范围仅限于会话,因此条件仅考虑为获得授权的请求在同一会话中记录的事件。从您的第一个请求开始,您生成会话 ID 并将其发送到x-amzn-bedrock-agentcore-policy-session-id标头中的每个请求中。网关不会代表您生成会话 ID。如果您省略标头或发送空值,则网关不会建立会话。如果关联的策略引擎包含临时策略,则没有会话 ID 的请求会因验证错误而失败。

有关传递会话 ID、会话生命周期以及身份如何在多跳呼叫中传播的详细信息,请参阅策略会话和身份传播。

会话失效

临时策略通过查看同一会话中早些时候发生的事情来决定是否允许某项操作。该历史仅对会话开始时生效的时间策略有意义。如果您在会话处于打开状态时更改引擎的时间策略,则记录的历史记录将不再与当前规则相匹配,因此该服务会结束会话,而不是针对不一致的数据做出决定。

在引擎上添加或更新临时策略会使引擎的活动临时策略会话失效。进行此类更改后,下一个重用无效会话的请求将失败,并显示 HTTP 409。ConflictException

要恢复,请启动一个新会话并再次发送请求。新会话以空白的历史记录开始,并根据您更新的政策进行评估。

支持 AWS Regions

临时策略在下表中标记的 AWS 区域中可用。

区域名称 临时策略

亚太地区(海得拉巴)

否

亚太地区(马来西亚)

否

亚太地区(孟买)

✓ 是的

亚太地区(首尔)

✓ 是的

亚太地区(新加坡)

✓ 是的

亚太地区(悉尼)

✓ 是的

亚太地区(泰国)

否

亚太地区(东京)

✓ 是的

加拿大(中部)

✓ 是的

欧洲地区(法兰克福)

✓ 是的

欧洲地区(爱尔兰)

✓ 是的

欧洲地区(伦敦)

✓ 是的

欧洲地区(米兰)

否

欧洲地区(巴黎)

✓ 是的

欧洲(西班牙)

✓ 是的

欧洲地区(斯德哥尔摩)

✓ 是的

南美洲(圣保罗)

✓ 是的

美国东部(弗吉尼亚州北部)

✓ 是的

美国东部(俄亥俄州)

✓ 是的

美国西部(北加利福尼亚)

否

美国西部(俄勒冈州)

✓ 是的

注意事项

Cross-account 和跨区域请求

临时策略会话不支持跨区域或跨账户传播。当这些资源位于不同的账户或不同的 AWS 区域时,临时策略不控制 AgentCore 网关与其运行时目标之间的请求。要使临时策略控制代理的操作,网关及其所有目标必须位于同一个 AWS 账户和 AWS 区域中。

临时策略仅在工作负载访问令牌 (WAT) 通过请求链时强制执行访问权限(请参阅策略会话和身份传播)。当您的请求链完全由 AgentCore 网关和运行时组件组成时,会自动将 WAT 标头从一跳 AgentCore传播到下一跳。这种传播发生在单个 AWS 区域和账户内。时间策略适用于整个链条。诸如 Gateway to Runtime 再到 Gateway to Runtime 这样的链条可以端到端地携带代币,而无需您进行任何额外工作。

包含非网关或运行时组件的链的行为不同。请求可能会通过您自己运营的基础设施,例如第三方 API 网关或 Kubernetes 集群。该组件必须转发 WAT 标头,并且必须添加自定义逻辑以通过这些跳数传播 WAT。这些非AgentCore 组成部分的实际位置不会影响区域和账户范围。它们可以在任何地方运行,前提是两端的 AgentCore 组件返回到适用临时策略的相同 AWS 账户和 AWS 区域。

所需的 IAM 权限

临时策略还带有 IAM 的先决条件。为网关配置的 IAM 角色必须允许该bedrock-agentcore:GetWorkloadAccessToken操作。即使您使用 IAM 进行出站授权,此要求仍然有效。WAT 允许临时策略关联代理在会话中的操作。无论您如何对出站呼叫进行身份验证,网关都必须能够获得 WAT。如果角色缺少此权限,则临时策略执行将失败。bedrock-agentcore:GetWorkloadAccessToken在配置临时策略时授予网关角色。有关完整的权限政策,包括资源 ARN 和工作负载身份目录范围,请参阅临时策略的 IAM 权限。

Self-referential 条件包括当前请求

当时间条件引用了已授权的相同操作时,当前请求自身的事件将包含在评估中。例如,计算窗口内操作发生次数的条件也会计入当前调用。

必须允许将先前的行动记录为回应

会话历史记录将每项操作记录为一个事件,该事件的种类反映了结果:允许完成的操作记录为response事件,策略拒绝的操作记录为error事件。时间条件仅匹配其命名类型的事件,因此匹配response事件的条件仅考虑先前允许的操作。确保临时策略所依赖的先前操作本身是策略允许的;如果被拒绝,则将其记录为error而不是 aresponse,并且response条件永远不会与之匹配。

对取决于先前响应的操作进行排序

会话历史记录记录操作完成后每个操作response的事件。当策略依赖于先前操作在同一会话中的响应(例如输出字段或since条件)时,请在收到先前操作的响应后发出相关请求。在启动依赖该操作的操作之前完成每项操作可使您的工作流程顺序与策略评估的历史记录保持一致。

配额

以下配额适用于临时策略:

配额 值

每个策略引擎的临时策略

25

每个策略的临时运营商

3

每个时间条件的最大时间窗口

24 小时

可观测性

Amazon Bedrock AgentCore 发布指标和跨度数据,让您观察临时策略评估。默认情况下,指标会发布到AWS/Bedrock-AgentCore CloudWatch 命名空间。在您为附加的 AgentCore 网关资源启用跟踪后,Span 数据便可用,并且可以在 CloudWatch aws/spans日志组中找到。

以下信号特定于时间策略:

  • TemporalLatency(指标):评估临时策略所花费的时间,以毫秒为单位。每次时态评估都会发出一个样本,因此您可以使用SampleCount统计数据来计算评估次数。

  • aws.agentcore.policy.temporal.latency_ms(span 属性):评估请求的时间策略所花费的时间,以毫秒为单位。

  • aws.agentcore.policy.temporal.evaluation_invoked(span 属性):是否对请求进行了时间评估。这并不表示临时政策匹配或决定了决策。

  • aws.agentcore.policy.temporal.event_timestamp_ns(span 属性):评估器用来对请求事件进行排序的确切事件时间戳,以纳秒为单位。

有关策略指标、维度和跨度属性的完整列表,以及如何启用可观测性,请参阅可观测性数据中的 AgentCore 策略。

安全注意事项

临时策略的速率限制适用于单个会话。由于时间历史记录的范围仅限于一个会话,并且会话 ID 由调用者提供,因此 “每个会话最多 N 次调用” 等count基于的限制仅计算为该会话记录的事件。启动新会话会开始新的计数,因此时间速率限制会限制会话内的活动,而不是限制呼叫者所有会话中的活动。