View a markdown version of this page

政策入门 AgentCore - Amazon Bedrock AgentCore
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

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

政策入门 AgentCore

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

先决条件

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

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

  • Node.js 已@@ 安装 20 多个

  • 用于创建角色、Lambda 函数、策略引擎和使用 Amazon Bedrock 的 IA@@ M 权限 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

    这些选项创建了一个使用 Amazon 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. 查看配置并按 E nter 进行确认:

    网关向导:查看配置

使用退款工具添加 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 和工具架构文件路径,然后进行确认。

添加策略引擎

创建策略引擎并在强制模式下将其附加到网关:

例
AgentCore CLI
  1. agentcore add policy-engine --name RefundPolicyEngine \ --attach-to-gateways PolicyGateway \ --attach-mode ENFORCE
Amazon CLI
  1. 创建引擎,然后使用以下ENFORCE模式将其连接到网关update-gateway:

    aws bedrock-agentcore-control create-policy-engine --name RefundPolicyEngine

    有关附加请求,请参阅使用策略引擎更新现有网关。

Amazon Python SDK (Boto3)
  1. import boto3 client = boto3.client('bedrock-agentcore-control') engine = client.create_policy_engine(name='RefundPolicyEngine') client.get_waiter('policy_engine_active').wait( policyEngineId=engine['policyEngineId'] ) print(engine['policyEngineId'], engine['policyEngineArn'])

    然后附上update_gateway,通过policyEngineConfiguration={'arn': engine['policyEngineArn'], 'mode': 'ENFORCE'}。

Interactive
  1. 运行agentcore打开 TUI,然后选择添加并选择策略引擎:

  2. 输入策略引擎名称:

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

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

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

创建 Cedar 政策

直接提供 Cedar 政策文件。

命名特定操作的策略还必须命名特定的网关 ARN,即不受限制的资源将被拒绝。在网关存在之前,您才知道 ARN,因此需要进行两次部署:一次用于创建网关,另一次用于附加策略。完整序列,从头到尾:

  1. agentcore deploy— 创建网关、目标和策略引擎。

  2. agentcore status— 从输出中读取网关 ARN。

  3. 使用替换的 ARN refund_policy.cedar 进行创建,如下所示。

  4. agentcore add policy --source refund_policy.cedar— 在您的项目中记录策略。

  5. agentcore deploy再说一遍 — 在您的账户中创建政策。

步骤 1 和步骤 5 都是步骤 3:部署中描述的部署;您运行了两次。以下是步骤 3 和 4 的详细介绍:

  1. 在您的项目目录中创建一个refund_policy.cedar文件,将网关 AR agentcore status N 替换为:

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

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

知道网关 ARN 后,您可以直接在 Amazon CLI 和 boto3 上创建策略:

例
Amazon CLI
  1. aws bedrock-agentcore-control create-policy \ --policy-engine-id RefundPolicyEngine-a1b2c3d4e5 \ --name RefundLimit \ --definition '{ "policy": { "statement": "permit (principal, action == AgentCore::Action::\"RefundTarget___process_refund\", resource == AgentCore::Gateway::\"<gateway-arn>\") when { context.input.amount < 1000 };" } }'
Amazon Python SDK (Boto3)
  1. import boto3 client = boto3.client('bedrock-agentcore-control') statement = ( 'permit (principal, ' 'action == AgentCore::Action::"RefundTarget___process_refund", ' 'resource == AgentCore::Gateway::"<gateway-arn>") ' 'when { context.input.amount < 1000 };' ) response = client.create_policy( policyEngineId='RefundPolicyEngine-a1b2c3d4e5', name='RefundLimit', definition={'policy': {'statement': statement}}, ) # CreatePolicy returns 202 - wait for the terminal status client.get_waiter('policy_active').wait( policyEngineId='RefundPolicyEngine-a1b2c3d4e5', policyId=response['policyId'], )

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

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

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

了解设置

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

创建网关

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

添加 Lambda 目标

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

创建策略引擎

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

创建 Cedar 政策

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

以下是 Cedar 政策示例,该政策允许退款低于 1000 美元:

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:部署

将所有资源部署到 Amazon:

agentcore deploy

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

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

agentcore status

步骤 4:测试策略

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

代理核心状态输出中显示的网关 URL 是基本终端节点。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 目标 — 在网关中注册的退款处理工具

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

  • Cedar 政策 — 允许退款金额低于 1000 美元的治理规则

问题排查

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

问题 解决方案

"AccessDeniedException"

检查 bedrock-agentcore 的 IAM 权限:*

网关没有响应

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

部署失败

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

政策未执行

通过运行 agentc ore 状态验证策略引擎是否已在强制模式下连接

部署期间出现 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。