本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
保单中的护栏
本节介绍如何在策略中定义基岩护栏。Bedrock Guardrails 提供可配置的安全措施,可在请求和响应上运行,以确保 AI 应用程序的安全。目前,您可以在策略中定义即时攻击、内容过滤器和敏感信息防护栏。每个护栏必须配置一个类别和一个介于 0 和 1 之间的阈值。
当护栏评估上下文时,它返回介于 0 到 1 之间的置信度分数,表示评估的内容表现出定义属性的置信度(例如)。PROMPT_INJECTION
护栏区域可用性
下表显示了哪些 AWS 地区在政策中支持护栏:
| 美国东部(弗吉尼亚州北部) | 美国东部(俄亥俄州) | 美国西部(北加利福尼亚) | 美国西部(俄勒冈州) | 亚太地区(海得拉巴) | 亚太地区(马来西亚) | 亚太地区(孟买) | 亚太地区(首尔) | 亚太地区(新加坡) | 亚太地区(悉尼) | 亚太地区(泰国) | 亚太地区(东京) | 加拿大(中部) | 欧洲地区(法兰克福) | 欧洲地区(爱尔兰) | 欧洲地区(伦敦) | 欧洲地区(米兰) | 欧洲地区(巴黎) | 欧洲(西班牙) | 欧洲地区(斯德哥尔摩) | 南美洲(圣保罗) | AWS GovCloud (US-West) | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
护栏支撑 |
✓ 是的 |
✓ 是的 |
否 |
✓ 是的 |
否 |
否 |
否 |
否 |
否 |
✓ 是的 |
否 |
✓ 是的 |
否 |
否 |
否 |
✓ 是的 |
否 |
否 |
否 |
✓ 是的 |
否 |
否 |
开始前的准备工作
在开始之前,您需要正确配置您的 IAM 角色。
Permissions
在与您的策略引擎关联的 AgentCore 网关上配置的网关执行角色必须同时具有基岩 AgentCore 操作和 Bedrock Guardrails 的权限。该bedrock:InvokeGuardrailChecks权限是必需的,因为策略数据平面使用源自网关执行角色的 FAS(前向访问会话)凭证代表您调用 Bedrock Guardrails API。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "bedrock-agentcore:*", "Resource": "*" }, { "Effect": "Allow", "Action": "bedrock:InvokeGuardrailChecks", "Resource": "*" } ] }
支持的护栏
| 保护措施名称 | 实体类型 | 保障类别 |
|---|---|---|
|
内容过滤器 |
|
|
|
即时攻击检测 |
|
|
|
敏感信息 |
|
|
在政策中定义护栏
要在策略中定义护栏,您可以将策略编写为代码,也可以用自然语言描述策略。与您可能已经创建的任何现有策略类似,您需要使用条件 (permit) 来指定效果(例如when guardrails)。在这种情况下,您需要提供要启用的特定护栏保护措施、要使用的防护措施类别、您希望护栏保障措施评估的环境以及置信度分数阈值。
护栏定义示例
suppressOutput (principal, action == AgentCore::Action::"<TARGET_NAME>_<METHOD>:<URI>", resource == AgentCore::Gateway::"<GATEWAY_ARN>") when guardrails { BedrockGuardrails::ContentFilter(["HATE"],[context.output.message])["HATE"] .confidenceScore .greaterThan(decimal("0.2")) };
指定护栏保护装置
要选择特定的保障实体类型,请使用 BedrockGuardrails 命名空间:
| Safeguard | 护栏功能名称 |
|---|---|
|
内容过滤器 |
|
|
即时攻击 |
|
|
敏感信息 |
|
选择保障类别
为给定保障措施选择一个类别(参见支持的护栏)。
例如 BedrockGuardrails::ContentFilter(["HATE"],[context.output.message])
对护栏的影响
要创建用于授权请求的护栏,请使用permit和forbid效果。它们继续管理请求授权。
forbid (principal, action == AgentCore::Action::"<TargetName>___POST:/invocations", resource) when guardrails { BedrockGuardrails::PromptAttack(["PROMPT_INJECTION"], [context.input.prompt])["PROMPT_INJECTION"].confidenceScore.greaterThan(decimal("0.6")) };
要创建用于抑制工具、代理或模型输出的护栏,请使用效果。suppressOutputsuppressOutput是一种新的效果,它对操作返回的数据起作用。授权操作完成后,它会根据护栏评估输出,并在违反护栏时抑制输出。
suppressOutput (principal, action == AgentCore::Action::"<TargetName>___POST:/invocations", resource) when guardrails { BedrockGuardrails::SensitiveInformation(["US_SOCIAL_SECURITY_NUMBER"], [context.output.text])["US_SOCIAL_SECURITY_NUMBER"] .confidenceScore .greaterThan(decimal("0.5")) };
注意
suppressOutput仅支持护栏策略。其条件必须仅包括用when guardrails {…}方块或普通when {…}方块书写的护栏支票。suppressOutput不支持标准 Cedar 或temporal {…}条件。
将背景信息传递给您的护栏
在策略中定义护栏时,必须指定数据路径(例如context.input.message),用于标识要从操作的负载中提取的值。护栏评估提取的值。您可以根据请求或响应架构指定一条或多条数据路径。
例如 [context.input.message, context.input.systemPrompt]
护栏的阈值
通过内容过滤器和即时攻击检测,护栏会返回置信度分数,该分数是 [0,1] 范围内的数值,其中 0 表示低置信度,1 表示高置信度。分数代表护栏检测违规行为的自信程度。当前可能的分数是离散值 {0、0.2、0.4、0.6、0.8 和 1.0}。
要设置阈值,您需要向比较运算符提供十进制值(例如greaterThan(decimal("0.4")))。
分数比较运算符
您可以将以下比较运算符应用于confidenceScoremaxConfidenceScore()、或中的任何一个minConfidenceScore():
| 运算符 | 用量 |
|---|---|
|
|
分数 > 阈值 |
|
|
分数 ≥ 阈值 |
|
|
分数 < 阈值 |
|
|
分数 ≤ 阈值 |
您可以在保单中使用聚合来提取和比较护栏返回的分数:
聚合
如何选择阈值
如果在提示创作服务时未指定阈值,则 AgentCore 设置默认值。如果您在没有创作服务帮助的情况下制定策略,则必须提供阈值。
以下默认值经过校准,以可接受的精度为大多数工作负载提供广泛的覆盖范围:
| Safeguard | 默认阈值 |
|---|---|
|
内容过滤器 |
0.2 |
|
即时攻击检测 |
0.4 |
|
敏感信息 |
0.2 |
选择自定义阈值
如果默认阈值不符合您的要求,您可以使用以下方法之一确定工作负载的最佳阈值。
选项 1:对照黄金测试集进行评估
当你有一组经过精心策划的测试输入和明确的预期结果时,请使用这种方法。
-
创建策略并将策略引擎模式设置为 LOG_ONLY。
-
通过您的策略引擎所连接的网关运行测试集。
-
查看每次评估的日志。每个日志条目都包括评估的内容和护栏返回的置信度分数。
-
对于每个结果,标明护栏是应该标记内容还是什么都不做(分别是对和错)。
-
使用这些标签,结合日志中可用的置信度分数,在多个阈值下生成混淆矩阵。比较每个阈值的精度和召回率,选择与您对误报和漏检的容忍度相一致的值。
选项 2:根据生产流量进行评估
当你没有预建的测试集并且想要使用真实的流量模式进行校准时,请使用这种方法。
-
创建策略并将策略引擎模式设置为 LOG_ONLY。
-
允许策略引擎评估生产流量。每个日志条目都包括评估的内容和护栏返回的置信度分数。
-
使用 LLM-as-a-judge 将每个记录的结果标记为真(护栏应标记内容)或假(护栏不应标记内容)。
-
使用这些标签,在多个阈值下建立混淆矩阵。比较每个阈值的精度和召回率,选择与您对误报和漏检的容忍度相一致的值。
在政策中测试护栏
AgentCore 提供了多种机制,用于在生产流量上强制执行护栏策略之前对其进行测试。您可以控制策略引擎级别、单个策略级别或两者兼而有之,从而可以逐步验证护栏行为。有关更多信息,请参阅测试策略。
护栏如何与政策配合使用
护栏策略可以应用于任何网关目标。护栏运行在:* MCP 目标 — POST /mcp (JSON-RPC tools/call) * HTTP 运行时目标 — * HTTP 推POST /<target>/invocations理目标 — POST /inference
当呼叫到达您的网关时,策略评估器将执行以下操作:
-
匹配范围 -确定哪些护栏政策适用于此请求
-
提取内容 — 从请求正文中提取
dataPath(例如context.input.message)指定的字段 -
调用 Bedrock InvokeGuardrailChecks API — 评估内容并将返回的置信度分数注入到政策评估上下文中
-
使用护栏分数评估策略 -将返回的置信度分数与策略中定义的阈值进行比较
-
将决策
ALLOW或DENY带有政策注释的决策返回给网关
注意:护栏是不确定的。相同的输入可能导致不同的输出。但是,策略是确定性的,相同的输入将始终产生相同的产出。
政策中护栏的局限性
-
不支持正则表达式或模式匹配 ——护栏使用机器学习评分,而不是正则表达式
-
您不能将标准的 Cedar 政策与护栏混为一谈——取而代之
when guardrails {…}when {…} -
街区中需要护栏 ——护栏
when guardrails {…}块内必须至少定义一个护栏 -
suppressOutput仅支持护栏政策 — 其条件必须仅包含护栏检查,不支持标准 Cedar 或条件temporal {…}