View a markdown version of this page

中的 “政策” 入门 AgentCore - 亚马逊基岩 AgentCore

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

中的 “政策” 入门 AgentCore

在本教程中,您将学习如何使用 AgentCore CLI 设置策略并将其与亚马逊 Bedrock AgentCore Gateway 集成。 AgentCore 您将使用Cedar政策创建退款处理工具,该工具执行退款金额的业务规则。

先决条件

在开始之前,请确保您具备以下条件:

  • AWS 配置了凭据的账户。要配置凭证,您可以按照 AWS CLI 入门中的步骤安装和使用 AWS 命令行界面。

  • Node.js 已安装 20 多个

  • 创建角色、Lambda 函数、策略引擎和使用 Amazon Bedrock 的 IAM 权限 AgentCore

  • 处理退款请求的 Lambda 函数。您可以使用现有函数,也可以为本教程创建一个函数。记下步骤 2 中使用的函数 ARN。

AgentCore CLI 会在部署期间检查 CDK 引导堆栈。如果需要引导,则交互式部署会要求确认。agentcore deploy --yes用于自动授权。

第 1 步:设置和安装

安装 C AgentCore LI:

npm install -g @aws/agentcore

创建一个新 AgentCore 项目:

例
AgentCore CLI
  1. agentcore create --name PolicyDemo --language Python --framework Strands \ --model-provider Bedrock --memory none cd PolicyDemo

    这些选项创建了一个使用亚马逊 Bedrock 且没有内存的 Python Strands 代理。该cd命令移到必须运行后续命令的项目目录中。

Interactive
  1. 您也可以在agentcore create没有标志的情况下运行以使用交互式向导。该向导指导您选择项目名称、代理框架、模型提供者和其他选项。创建项目后,使用 c d 切换到项目目录 PolicyDemo。

第 2 步:添加带有策略引擎的网关

使用 AgentCore CLI 向您的项目添加网关、Lambda 函数目标和策略引擎。

添加网关

创建没有入站授权的网关(为简单起见,请参阅本教程),并将您的代理连接到该网关:

例
AgentCore CLI
  1. agentcore add gateway --name PolicyGateway --authorizer-type NONE --runtimes PolicyDemo
Interactive
  1. 运行打开 agentcore TUI,然后选择添加并选择网关:

  2. 输入网关名称:

    网关向导:输入名称
  3. 选择授权者类型。在本教程中,选择 “无”:

    网关向导:选择 “无授权者”
  4. 配置高级选项或接受默认值:

    网关向导:高级配置
  5. 查看配置并按 Enter 键确认:

    网关向导:查看配置

使用退款工具添加 Lambda 函数目标

使用定义退款处理工具的工具架构将您的 Lambda 函数注册为网关目标。在您的项目目录中创建包含以下内容的refund_tools.json文件:

[ { "name": "process_refund", "description": "Process a customer refund request for a given dollar amount", "inputSchema": { "type": "object", "description": "Input for processing a refund", "properties": { "amount": { "type": "integer", "description": "The refund amount in dollars" } }, "required": ["amount"] } } ]
例
AgentCore CLI
  1. agentcore add gateway-target --name RefundTarget --type lambda-function-arn \ --lambda-arn ++<YOUR_LAMBDA_ARN>++ \ --tool-schema-file refund_tools.json \ --gateway PolicyGateway

    <YOUR_LAMBDA_ARN>替换为您的 Lambda 函数的 ARN。该refund_tools.json文件定义了退款工具的工具架构。

Interactive
  1. 运行打开 agentcore TUI,然后选择添加并选择网关目标:

  2. 输入目标名称。

  3. 选择 Lambda 函数作为目标类型:

    网关目标向导:选择 Lambda 函数
  4. 输入 Lambda ARN 和工具架构文件路径,然后确认。

添加策略引擎

创建策略引擎并将其以 ENFORCE 模式连接到网关:

例
AgentCore CLI
  1. agentcore add policy-engine --name RefundPolicyEngine \ --attach-to-gateways PolicyGateway \ --attach-mode ENFORCE
Interactive
  1. 运行打开 agentcore TUI,然后选择添加并选择策略引擎:

  2. 输入策略引擎名称:

    策略引擎向导:输入名称
  3. 选择要将策略引擎连接到的网关:

    策略引擎向导:连接网关
  4. 选择执法模式。选择强制执行:

    策略引擎向导:选择强制模式

创建 Cedar 政策

直接提供 Cedar 政策文件。Cedar 不允许在政策声明中使用通配符资源。这需要分两个阶段部署:首先在没有策略的情况下进行部署以创建网关,然后检索网关 ARN。然后添加策略并重新部署。

  1. 首先部署网关(参见步骤 3:部署),然后运行 agentcore 状态以获取网关 ARN。

  2. 在您的项目目录中创建一个refund_policy.cedar文件,替换上一步中的网关 ARN:

    permit(principal, action == AgentCore::Action::"RefundTarget___process_refund", resource == AgentCore::Gateway::"<gateway-arn>") when { context.input.amount < 1000 };
  3. 添加策略并重新部署:

    agentcore add policy --name RefundLimit \ --engine RefundPolicyEngine \ --source refund_policy.cedar agentcore deploy

或者,在步骤 3 中部署资源后,您可以根据自然语言描述生成 Cedar 策略:

agentcore add policy --name RefundLimit \ --engine RefundPolicyEngine \ --generate "Only allow refunds under 1000 dollars" \ --gateway PolicyGateway

该--generate标志要求首先部署网关,因为它调用的 AWS API需要网关 ARN 将自然语言转换为 Cedar。这种方法可自动解析网关 ARN,使其成为创建策略的最简单途径。

了解设置

上面的 CLI 命令在您的 AgentCore 项目中配置了多个资源。以下是每个组件的详细说明。

创建网关

agentcore add gateway 命令会创建一个充当您的 MCP 服务器端点的网关。在本教程中,为简单起见,设置会--authorizer-type NONE禁用入站授权。在生产中,使用 IAM 或 JWT 授权来保护您的网关。

添加 Lambda 目标

agentcore 添加网关目标命令将 Lambda 函数注册为网关中的目标。工具架构文件定义了代理可以传递给该函数的输入,例如退款金额。

创建策略引擎

agentcore add policy-engine 命令创建了一个策略引擎——一组用于评估和授权代理工具调用的 Cedar 策略。策略引擎拦截网关边界的所有请求,并根据定义的策略确定是允许还是拒绝每项操作。这提供了代理代码之外的确定性授权,从而确保无论代理如何实施,都要始终如一地执行安全措施。

创建 Cedar 政策

Cedar 是一种开源策略语言,由开发 AWS 用于编写授权策略。agentcore 添加策略命令创建一个 Cedar 策略,用于管理通过网关的工具调用。您可以使用根据自然语言描述生成策略--generate,也可以直接使用提供 Cedar 策略文件。--source

以下是允许 1000 美元以下退款的 Cedar 政策示例:

permit(principal, action == AgentCore::Action::"RefundTarget___process_refund", resource == AgentCore::Gateway::"<gateway-arn>") when { context.input.amount < 1000 };

该政策使用:

  • permit— 允许操作(Cedar 也支持forbid拒绝操作)

  • principal— 提出请求的实体

  • action— 正在调用的特定工具 (RefundTarget___process_refund)

  • resource— 策略适用的网关实例

  • when状况 — 其他要求(金额必须小于 1000 美元)

将策略附加到网关

agentcore add policy-engine 命令上的--attach-to-gateways和--attach-mode ENFORCE标志以强制模式将策略引擎连接到网关。在此模式中:

  • 每个工具调用都会被截获并根据所有策略进行评估

  • 默认情况下,除非明确允许,否则所有操作都将被拒绝

  • 如果有任何forbid策略匹配,则拒绝访问(禁胜语义)

  • 记录政策决策以 CloudWatch 进行监控和合规

这可确保通过网关进行的所有代理操作都受您的安全策略的约束。

步骤 3:部署

将所有资源部署到 AWS:

agentcore deploy

AgentCore CLI 创建网关、注册 Lambda 目标并预置策略引擎。如果您提供了 ARN-based Cedar 策略文件,请在此次部署之后将其添加并再次运行 agentcore deploy 以将其附加。此过程每次部署大约需要 2-3 分钟。

部署完成后,您可以验证资源的状态:

agentcore status

第 4 步:测试策略

通过向网关发送请求来测试策略。由于网关使用--authorizer-type NONE,因此您可以直接使用 curl 发送请求。

代理核心状态输出中显示的网关网址是基本端点。MCP 请求会转到该端点上的/mcp路径,因此在发送请求之前,请先附加/mcp到 URL。

测试 1:退款 500 美元(应该允许)

500美元的退款金额低于1000美元的上限,因此政策引擎允许该请求:

curl -X POST ++<GATEWAY_URL>++/mcp \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"RefundTarget___process_refund","arguments":{"amount":500}}}'

测试 2:退款 2000 美元(应被拒绝)

2000美元的退款金额超过了1000美元的上限,因此政策引擎拒绝了该请求:

curl -X POST ++<GATEWAY_URL>++/mcp \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"RefundTarget___process_refund","arguments":{"amount":2000}}}'
注意

<GATEWAY_URL>替换为 agentcore 状态输出中显示的网关 URL,然后添加。/mcp

你建造了什么

通过本教程,你创建了:

  • MCP 服务器(网关)— 工具的托管端点

  • Lambda target — 在网关中注册的退款处理工具

  • 策略引擎 — Cedar-based 策略评估系统

  • 雪松政策 ——允许退款低于1000美元的治理规则

问题排查

如果您在设置或测试期间遇到问题,请参阅以下常见问题和解决方案:

问题 解决方案

"AccessDeniedException"

检查 bedrock-agentcore 的 IAM 权限:*

网关没有响应

部署后等待 30—60 秒进行 DNS 传播

部署失败

运行 agentcore 状态以检查资源状态并查看错误消息

政策未执行

通过运行 agentcore 状态,验证策略引擎是否已在 ENFORCE 模式下连接

部署期间出现 Cedar 验证错误

Cedar 政策必须使用特定的资源 ARN ——通配符资源(例如permit(principal, action, resource);)会被拒绝。在您的 Cedar 政策字段中使用代理核心状态中的网关 ARN。resource

工具调用意外被拒绝

策略引擎正在执行,Cedar 政策拒绝了该请求。验证策略action和resource字段是否与正在进行的工具调用相匹配。

部署因策略验证错误而失败

默认验证模式同时FAIL_ON_ANY_FINDINGS运行架构检查和语义验证,如果两者产生结果,则拒绝该策略。如果您不需要语义验证,则可以IGNORE_ALL_FINDINGS将验证模式设置为仅运行架构检查。对于生产环境,修复 Cedar 政策以通过架构检查和语义验证。

清理

要移除本教程中创建的资源,请同时移除网关和策略引擎,然后重新部署:

agentcore remove gateway --name PolicyGateway agentcore remove policy-engine --name RefundPolicyEngine agentcore deploy

移除网关不会自动移除其附加的策略引擎。必须使用单独移除策略引擎agentcore remove policy-engine。