目 录CONTENT

文章目录

如何使用接口 VPC 端点为 Amazon Bedrock AgentCore 网关实现安全的入口连接

青云TOP
2025-10-04 / 0 评论 / 0 点赞 / 1 阅读 / 0 字

📢 转载信息

原文链接:https://aws.amazon.com/blogs/machine-learning/secure-ingress-connectivity-to-amazon-bedrock-agentcore-gateway-using-interface-vpc-endpoints/

原文作者:Dhawalkumar Patel, June Won, Thomas Veppumthara, and Sindhura Palakodety


构建企业级智能体应用:通过接口 VPC 端点安全连接 Amazon Bedrock AgentCore 网关

代理式AI(Agentic AI)应用的兴起,标志着企业自动化领域的一个重大进步。智能体能够自主执行复杂工作流程、访问敏感数据集,并在您的组织基础设施中实时决策。Amazon Bedrock AgentCore 通过提供完全托管的服务,加速了企业的AI转型。它消除了基础设施复杂性、维护会话隔离,并支持与企业工具的无缝集成,使组织能够大规模部署可信赖的AI智能体。

AgentCore 网关是 AgentCore 的一个模块化服务,它通过将API、AWS Lambda 函数和各种服务安全地转换为兼容 模型上下文协议(MCP)的工具,并以统一的端点提供给智能体,从而简化了集成。它具有内置的身份验证和无服务器基础设施,最大限度地减少了运营开销。

为何需要接口 VPC 端点?

在生产环境中,AI智能体通常部署在虚拟私有云(VPC)内,以维护安全、隔离的网络访问,并满足企业的安全和合规性要求。AWS 接口 VPC 端点可以通过在 VPC 托管的智能体与 AgentCore 网关之间创建私有连接,增强代理式AI的安全性,确保敏感通信保留在 AWS 的安全基础设施内部。

  • 私有连接与性能: 这些端点使用具有私有IP地址的专用网络接口,通过直接连接提供更低的延迟和卓越的性能。
  • 精细访问控制: VPC 接口端点通过端点策略提供细粒度的访问控制。
  • 简化操作与成本: 它们简化了操作,避免了代理服务器的管理,并降低了数据传输成本。

本文将演示如何从 VPC 中的 Amazon Elastic Compute Cloud (Amazon EC2) 实例通过 VPC 接口端点访问 AgentCore 网关,并展示如何配置端点策略以在遵循最小权限原则的同时,确保安全访问。

架构概览与工作流程

下图展示了用户访问由后端智能体支持的应用程序的架构。这些智能体部署在EC2、Lambda、Amazon EKS 或 Amazon ECS 等各种AWS计算服务中,它们都在 VPC 环境中运行。这些智能体与 AgentCore 网关通信,以发现、访问和调用外部工具和服务(如企业API和Lambda函数)。

在标准配置中,智能体到 AgentCore 网关的请求会通过公共互联网传输。通过实施接口 VPC 端点,可以将这些通信路由到 AWS 的安全内部网络骨干,从而带来更高的安全性、更低的延迟以及更符合严格网络隔离和数据保护标准的合规性。

架构图:展示了通过VPC接口端点连接EC2实例中的智能体与AgentCore Gateway的流程。

解决方案的工作流程如下:

  1. AI 智能体交互: 运行在 VPC 内的智能体从身份提供商处获取必要的入站授权,向网关进行身份验证,并通过接口 VPC 端点向网关发送工具使用请求(调用 MCP 工具)。
  2. 网关处理: 网关管理 OAuth 授权,确保只有有效用户和智能体才能访问工具和资源。它将 MCP 请求转换为 API 请求和 Lambda 调用。
  3. 安全访问: 网关为每个工具注入凭证,使智能体能够无缝使用具有不同身份验证要求的工具。它使用 AgentCore Identity 代表智能体安全地访问后端资源(目标)。
  4. 目标执行: 网关数据平面调用目标(Lambda 函数、OpenAPI 规范或 Smithy 模型)。
  5. 监控: AgentCore 网关提供内置的可观测性和审计。此外,AWS PrivateLink 会向 Amazon CloudWatch 发布指标以监控接口端点。您可以选择启用 VPC Flow Logs 来记录到 AgentCore 网关的 IP 流量。

关键注意事项

  • 网络通信: 接口 VPC 端点确保了从智能体到 AgentCore 网关的入站流量通过 AWS PrivateLink 在私有网络内保持安全。然而,身份验证工作流程(如 OAuth 访问令牌检索和凭证交换)以及网关到外部托管 MCP 工具的出站访问,仍然需要互联网连接才能与外部身份系统和资源建立安全会话。
  • 数据平面范围: 目前,接口 VPC 端点仅支持网关的数据平面端点(即应用程序与智能体工具交互的运行时端点)。控制平面操作(如创建网关、管理工具和配置安全设置)仍需通过标准的公共 AgentCore 控制平面端点(例如 bedrock-agentcore-control.<region>.amazonaws.com)进行。

解决方案前提条件

  • 拥有适当 AWS IAM 权限(用于 VPC 和 Amazon EC2 管理)的 AWS 账户。
  • 已配置的 VPC 及其子网和路由表。
  • 您的 AWS 账户中已预配并配置了 AgentCore 网关。
  • 对 VPC 网络和安全组配置有基本了解。

分步解决方案指南

我们将使用 AWS 管理控制台来配置接口 VPC 端点,并从 VPC 内的测试 EC2 实例建立安全连接。

1. 创建 EC2 实例的安全组

在您选择的 AWS 区域,导航至 Amazon EC2 控制台,然后选择安全组

  1. 选择创建安全组
  2. 安全组名称: 输入描述性名称,例如 ec2-agent-sg
  3. VPC: 选择目标 VPC。
  4. 入站规则: 添加必要的管理规则,如来自您的管理网络或堡垒主机的 SSH(22 端口)。
  5. 出站规则: 保持默认设置(允许所有出站流量)。
  6. 选择创建安全组

创建EC2安全组的截图

2. 创建接口 VPC 端点的安全组

创建第二个安全组命名为 vpce-agentcore-sg,并将用于附加到 AgentCore 网关接口 VPC 端点。配置规则如下,以实现最小权限访问:

  • 入站规则: 允许来自EC2 安全组 (ec2-agent-sg) 的 HTTPS(443 端口)流量。
  • 出站规则: 保持默认设置。

配置VPC端点安全组的截图

3. 预置 VPC 内的 EC2 实例

在同一 VPC 中预置 EC2 实例,并注意其子网和安全组配置:

  • 子网: 选择一个私有子网(为 VPC 端点配置做准备)。
  • 安全组: 附加 ec2-agent-sg
  • IAM 角色: 配置必要的 Amazon Bedrock 和 AgentCore 网关访问权限。

配置EC2实例网络设置的截图

4. 创建接口 VPC 端点

导航至 Amazon VPC 控制台下的端点,创建使用 AWS PrivateLink 的接口端点:

  1. 选择创建端点
  2. 服务类别: 选择 AWS services
  3. 服务: 搜索并选择 com.amazonaws.<region>.bedrock-agentcore.gateway(替换 <region>)。

选择AgentCore Gateway服务的截图

关键配置步骤:

  1. VPC 和子网: 选择工作所在的 VPC,并指定 EC2 实例所在的相同子网以优化路由。
  2. DNS 名称: 选择启用 DNS 名称,这样您的应用程序仍可以使用默认的域名访问 AgentCore 网关,而流量会自动通过私有端点路由。

配置VPC和子网的截图

  1. 安全组: 附加 vpce-agentcore-sg
  2. 策略: 对于初始测试,设置为完全访问。生产环境中应根据最小权限原则进行限制。

配置安全组和策略的截图

端点创建后大约需要 2-5 分钟才能变为可用状态。

5. 测试连接

登录到 EC2 实例进行连接测试。

检查接口 VPC 端点的流量流

通过检查连接到 AgentCore 网关端点时使用的源 IP 地址,可以确认流量是否通过接口 VPC 端点。如果启用了私有 DNS,DNS 解析将指向 VPC 子网中的私有 IP 地址(由 VPC 端点中的弹性网络接口提供)。

未启用 VPC 接口端点之前: DNS 解析到公共 IP 地址:

nslookup gateway.bedrock-agentcore.amazonaws.com 
Non-authoritative answer:
Name: gateway.bedrock-agentcore..amazonaws.com
Address: 52.86.152.150

启用 VPC 接口端点并解析私有 DNS 之后: DNS 解析到私有 IP 地址:

nslookup .gateway.bedrock-agentcore..amazonaws.com 
Non-authoritative answer:
Name: .gateway.bedrock-agentcore..amazonaws.com
Address: 172.31.91.174

私有 DNS 已启用 (cURL)(推荐)

如果私有 DNS 启用,应用程序可以直接使用标准网关 URL,流量将自动通过 VPC 端点路由。以下是使用 cURL 从 VPC 资源执行的 JSON-RPC POST 请求示例,用于检索可用工具列表:

curl -sS -i -X POST https://<gatewayid>.gateway.bedrock-agentcore.<region>.amazonaws.com/mcp \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $TOKEN" \
--data '{ 
"jsonrpc": "2.0", 
"id": "'"$UNIQUE_ID"'", 
"method": "tools/list", 
"params": {} 
}' 

私有 DNS 已禁用 (Python)

如果禁用私有 DNS,则不能直接通过标准 AgentCore 网关端点访问。相反,您必须通过 VPC DNS 名称路由流量,并在 Host 头部包含原始网关域名。

私有DNS禁用时cURL请求中Host头部的示例

cURL 示例(需要设置 Host 头部):

curl -sS -i -X POST https://<vpce-dns-name>/mcp \
--header 'Host: <gatewayid>.gateway.bedrock-agentcore.<region>.amazonaws.com' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $TOKEN" \
--data '{ "jsonrpc": "2.0", "id": "'$UNIQUE_ID'", "method": "tools/list", "params": {} }'

Python 脚本执行步骤:

  1. 登录到 EC2 实例。
  2. 配置环境变量:GATEWAY_URL (VPC 端点 URL)、TOKEN (Bearer Token) 和 GATEWAY_HOST (原始网关域名)。

例如:

export GATEWAY_URL=https://<vpce_id>.gateway.bedrock-agentcore.ap-southeast-2.vpce.amazonaws.com/mcp
export TOKEN=<your-token-here>
export GATEWAY_HOST=<gateway_id>.gateway.bedrock-agentcore.ap-southeast-2.amazonaws.com
  1. 将以下 Python 代码保存为 agent.py,该代码将测试工具列表、会话交互以及直接 MCP 工具调用:
from strands.models import BedrockModel
from mcp.client.streamable_http import streamablehttp_client
from strands.tools.mcp.mcp_client import MCPClient
from strands import Agent
import logging
import os # 读取环境变量
token = os.getenv('TOKEN')
gatewayURL = os.getenv('GATEWAY_URL') # vpc endpoint url
gatewayHost = os.getenv('GATEWAY_HOST') # domain name of the agentcore gateway

def create_streamable_http_transport():
    """Create HTTP transport with proper authentication headers"""
    return streamablehttp_client(
        gatewayURL, 
        headers={ 
            "Authorization": f"Bearer {token}", 
            "Host":gatewayHost 
        }
    )

# 初始化 MCP 客户端
client = MCPClient(create_streamable_http_transport)

# 配置 Bedrock 模型
yourmodel = BedrockModel( 
    model_id="amazon.nova-pro-v1:0", 
    temperature=0.7,
)

# 配置日志
logging.getLogger("strands").setLevel(logging.INFO)
logging.basicConfig( format="%(levelname)s | %(name)s | %(message)s", handlers=[logging.StreamHandler()]
)

# 测试完整代理工作流程
with client:
    targetname = 'TestGatewayTarget36cb2ebf'
    # 1. 列出可用工具
    tools = client.list_tools_sync()
    
    # 2. 创建包含工具的模型
    agent = Agent(model=yourmodel, tools=tools)
    print(f"Tools loaded in the agent: {agent.tool_names}")
    
    # 3. 测试会话查询
    response1 = agent("Hi, can you list all tools available to you?")
    print(f"Agent response for tool listing: {response1}")
    
    # 4. 测试工具调用
    response2 = agent("Get the current weather for Seattle and show me the exact response from the tool")
    print(f"Agent response for weather query: {response2}")
    
    # 5. 直接 MCP 工具调用验证
    result = client.call_tool_sync(
        tool_use_id="get-weather-seattle-call-1", 
        name=f"{targetname}___get_weather", 
        arguments={"location": "Seattle"}
    )
    print(f"Direct MCP tool response: {result}")
  1. 使用以下命令执行脚本:

python3 agent.py

高级配置:VPC 端点访问策略

VPC 端点策略是资源级策略,用于控制通过该端点对 AWS 服务的访问,提供了网络级别的额外访问控制层。

配置 AgentCore 网关的端点策略时,请注意以下关键点:

  • Principal 配置: Principal 字段无法修改,因为 AgentCore 网关不使用 IAM 进行身份验证,而是依赖于 Bearer Token。
  • 资源规范: 如果要限制对特定网关的访问,请在 Resource 字段中明确定义完整的 Amazon 资源名称 (ARN)
  • 操作权限: 对于 Action 字段,应避免指定控制平面操作,而使用通配符(*)以允许必要的网关数据平面操作。

以下是策略结构示例:

{
"Version": "2012-10-17",
"Statement": [
{
"Principal": "*",
"Effect": "Allow",
"Action": "*",
"Resource": "arn:aws:bedrock-age... [内容被截断]



🚀 想要体验更好更全面的AI调用?

欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,小白也可以简单操作。

0

评论区