用网络防火墙限制AI代理域名访问

4 阅读12分钟

控制AI代理可访问的域名

能够浏览网页的AI代理带来了强大的可能性——从研究自动化到实时数据收集。然而,赋予AI代理不受限制的互联网访问权限会引发安全和合规性问题。如果代理访问了未授权的网站怎么办?如果敏感数据被泄露到外部域名怎么办?

Amazon Bedrock AgentCore 提供了托管工具,使AI代理能够与网页交互(浏览器)、执行代码(代码解释器)以及托管代理(运行时)。当在Amazon虚拟私有云(VPC)内部署时,您可以使用AWS Network Firewall实现基于域名的过滤,从而控制工具的网络访问权限。AWS Network Firewall还为您提供托管规则,有助于减少对僵尸网络、已知恶意软件域名和其他高风险资源的访问。

在本文中,我们展示如何配置AWS Network Firewall,将AgentCore资源限制在已批准域名的白名单内。您可以使用此架构来实现:

  • 仅允许访问指定域名(例如 wikipedia.org, stackoverflow.com)
  • 使用规则模板明确阻止某些类别(例如社交媒体网站)
  • 记录连接尝试以供审计和合规审查
  • 对未指定的域名应用默认拒绝策略

本文重点介绍使用SNI检查进行域名级过滤——这是深度防御方法的第一层。有关DNS级过滤和内容检查技术,请参阅本文末尾的“进一步探索”部分。对于入站访问控制(限制谁可以调用您的代理),您还可以参阅《Amazon Bedrock AgentCore基于资源的策略》。这些策略支持 aws:SourceIp、aws:SourceVpc 和 aws:SourceVpce 等条件。这些控制是深度防御策略中的补充层。

重要性:企业安全要求

在受监管行业中部署AI代理的客户,在网络入口和出口控制方面有着一致的安全要求。

高安全要求的企业组织:受监管行业的客户在对AI代理部署进行安全审查时,一贯会询问网络隔离和出口控制问题,要求详细解释代理流量如何被控制和审计。这些客户希望确保代理运行时端点保持私有,并且可以使用诸如Web应用防火墙防护等额外的安全控制。

多租户SaaS提供商:企业软件即服务提供商需要DNS级别的允许列表和拒绝列表,因为其多租户架构需要为每个客户制定网络策略。例如,客户A可能需要允许访问客户B阻止的域名。常见要求包括:

  • 特定执行的阻止(在特定浏览器启动期间阻止对某些域名的访问)
  • 区域限制(阻止特定区域的网站类别)
  • 基于类别的规则(通过预打包规则集禁用赌博或社交媒体网站)

安全漏洞缓解与合规审计要求:评估AI代理的安全团队已经发现,代理可能通过提示词注入攻击被诱骗导航到非预期网站。自定义URL允许列表通过将浏览器限制在已批准的域名内(无论代理被指示做什么)来减少攻击面。基于域名的出口过滤提供了安全团队进行安全监控流程通常需要的日志记录和访问控制可见性。

解决方案概述

该解决方案在私有子网中部署AgentCore Browser,该子网没有直接互联网访问权限。出站流量通过AWS Network Firewall路由,防火墙检查TLS服务器名称指示(SNI)标头以确定目标域名并应用过滤规则。您还可以通过Network Firewall与CloudWatch指标的原生集成,监控防火墙为限制流量而采取的操作。

架构包括:

  • 私有子网:托管没有公有IP地址的AgentCore Browser实例
  • 公有子网:包含用于出站连接的网络地址转换网关
  • 防火墙子网:托管Network Firewall端点
  • 四个路由表:控制出站请求和返回流量通过防火墙的流量路径

流量路径

  1. AgentCore Runtime 执行代理并调用 AgentCore Browser 工具
  2. AgentCore Browser 从私有子网发起HTTPS请求
  3. 私有子网路由表将流量导向公有子网中的NAT网关
  4. NAT网关转换私有IP地址并将请求转发到Network Firewall端点
  5. Network Firewall 检查TLS SNI标头以识别目标域名
  6. 如果域名匹配允许列表规则,防火墙将流量转发到互联网网关
  7. 互联网网关将批准的流量路由到外部目标
  8. 返回流量通过对称路径经过防火墙返回到代理

该架构有助于确保无论目标是什么,浏览器流量都受到检查和过滤。

注意:基于SNI的过滤有助于控制在TLS层代理连接到哪些域名。对于DNS级控制(包括帮助防止DNS隧道和数据泄露的控制),可以将此与Route 53 Resolver DNS Firewall配合使用。DNS Firewall有助于解决SNI检查的一个局限性:代理可能通过DNS解析被阻止的域名并直接通过IP地址连接。

前提条件

开始之前,请确保您具备:

  • 具有创建VPC资源、Network Firewall和IAM角色权限的某云账户
  • 配置了适当凭证的AWS命令行接口(AWS CLI)2.x版本
  • 可访问某中心提供的AI代理核心服务
  • 基本熟悉VPC网络概念

操作指南

有关完整的逐步VPC和Network Firewall设置,请参阅某中心AI代理核心服务的VPC配置文档。本节重点介绍AgentCore Browser的特定配置。

步骤1:使用模板部署资源

从代码仓库启动模板。您可以保留堆栈默认值。但请确保在“Stack name”字段中添加堆栈名称,在“Availability Zone”菜单中选择一个可用区,并在“BucketConfigForOutput”参数中包含一个有效的现有存储桶名称。等待堆栈创建完成(通常需要10分钟)。在堆栈状态变为 CREATE_COMPLETE 后继续执行后续步骤。

步骤2:审查IAM执行角色

AgentCore Browser 需要一个IAM角色,其中包含针对某中心服务的信任策略。

步骤3:配置Network Firewall允许列表

创建一个包含已批准域名的有状态规则组。注意前导点号(.)用于匹配子域名。

# 规则组配置示例
{
  "RulesSource": {
    "RulesSourceList": {
      "Targets": [
        ".wikipedia.org",
        ".stackoverflow.com",
        ".docs.某中心.com",
        ".某中心aws.com",
        ".pypi.org",
        ".pythonhosted.org"
      ],
      "TargetTypes": ["HTTP_HOST", "TLS_SNI"],
      "GeneratedRulesType": "ALLOWLIST"
    }
  },
  "StatefulRuleOptions": {
    "RuleOrder": "STRICT_ORDER"
  }
}

重要提示:如果浏览器需要访问某中心服务或使用VPC端点作为替代,请在允许列表中包含 .某中心aws.com。

安全考虑:.某中心aws.com 域名是一个宽泛的允许列表,它允许访问某中心上的托管端点,包括公有存储服务、API网关端点和函数URL。为了更严格的控制,请对某中心服务访问使用VPC端点,并且仅允许代理所需的特定外部域名。

对于代码解释器:如果需要安装pip包,请考虑添加“.pypi.org”和“.pythonhosted.org”。大多数常用包已预装,因此这些域名为可选。

步骤4:配置防火墙策略

防火墙策略必须使用 aws:drop_established 作为默认操作。这允许完成TCP握手(TLS SNI检查所需),同时丢弃到非允许域名的连接。

注意:不要使用 aws:drop_strict,因为它会在TLS握手之前阻止TCP SYN数据包,从而阻止SNI检查。

步骤5:创建安全组

创建一个允许出站流量的安全组。Network Firewall 负责域名过滤,因此安全组只需要放行出站流量。

步骤6:创建AgentCore Browser

使用指向私有子网的VPC配置创建浏览器。

步骤6b:创建AgentCore Code Interpreter(可选)

您也可以在同一个VPC中部署AgentCore Code Interpreter,并使用相同的防火墙保护。

AgentCore Code Interpreter 使用与浏览器相同的网络路径。如果pip需要安装包,请确保 .pypi.org 和 .pythonhosted.org 在您的允许列表中。

步骤6c:在AgentCore Runtime上部署代理(可选)

对于基于容器的代理部署,使用相同的VPC配置。

某中心运行时代理的域名要求取决于您的模型提供商。对于模型API调用,请包含 .某中心aws.com,或为代理使用的其他模型提供商添加相应的域名。此外,允许代理必须访问的自定义域名。

步骤7:测试配置

启动浏览器会话并验证防火墙规则是否正常工作。

使用返回的WebSocket URL配合浏览器自动化工具(如Playwright)测试允许和阻止的域名。预期结果:

  • 允许的域名(.wikipedia.org, .某中心aws.com)应成功加载
  • 被阻止的域名应在TCP握手后超时或返回连接错误

注意:某些允许的域名(如 docs.某中心.com)依赖于来自其他域名(如某中心static.com 和 cloudfront.net)的CDN资源。如果允许域名上的页面无法完全渲染,请将所需的CDN域名添加到您的允许列表中。

您还可以在CloudWatch中检查防火墙日志以查看被阻止的连接尝试。

故障排除:如果允许的域名被阻止,请验证:

  • 防火墙同步状态显示为 IN_SYNC(规则更改需要几分钟)
  • 域名条目包含前导点号(使用 .wikipedia.org 而非 wikipedia.org)
  • 路由表正确配置以实现对称路由
  • 如果在允许的域名上收到HTTP 403错误,这通常是目标站点的机器人检测,而不是防火墙阻止。检查CloudWatch ALERT日志以确认——被阻止的连接会有明确的警报条目。

最佳实践

  • 使用严格顺序评估:这在结合允许列表和拒绝列表时有助于可预测的规则处理
  • 为服务访问包含 .某中心aws.com:或使用VPC端点以避免通过互联网路由服务API调用
  • 配置互联网网关入站路由表:这对对称路由至关重要。没有它,返回流量会绕过防火墙
  • 启用ALERT和FLOW日志:ALERT日志捕获被阻止的连接;FLOW日志提供流量的连接元数据
  • 等待防火墙同步:规则更改需要几分钟才能传播。在测试前验证配置同步状态为 IN_SYNC
  • 为多VPC架构配置HOME_NET:默认情况下,Network Firewall的域名检查仅过滤来自部署VPC的CIDR范围的流量。如果使用集中式防火墙通过中转网关检查来自多个VPC的流量,则必须在规则组中配置 HOME_NET 变量以包含源CIDR范围。否则,来自其他VPC的流量可能会绕过域名过滤

限制与成本考虑

  • 内容检查需要TLS检查:默认情况下,域名过滤操作在未加密的TLS元数据(SNI标头)上,无法检查加密的请求或响应体。要检查HTTPS内容,请在Network Firewall上启用TLS检查并添加匹配HTTP正文内容的规则
  • SNI/Host标头绕过风险:Network Firewall使用TLS SNI标头和HTTP Host标头(而非IP地址)来确定目标域名。如果这些标头被操纵,流量可能绕过域名过滤。对于高安全性部署,请将域名规则与针对关键阻止目标基于IP的规则相结合,或添加DNS过滤作为额外层
  • 多VPC部署中的HOME_NET范围:默认情况下,Network Firewall域名检查仅适用于来自部署VPC CIDR范围的流量。如果使用集中式防火墙,必须在规则组中配置HOME_NET变量以包含源CIDR范围
  • 成本:根据使用情况而变化。请参阅相关定价页面

资源清理

按此顺序删除资源以避免持续费用:

  1. 删除AgentCore Browser
  2. 删除Network Firewall(先禁用保护设置)
  3. 删除NAT网关
  4. 释放弹性IP地址
  5. 删除子网和路由表
  6. 分离并删除互联网网关
  7. 删除VPC

注意:AgentCore Browser和Code Interpreter会在您的VPC中创建弹性网络接口。删除这些资源后,请等待几分钟让网络接口释放,然后再删除安全组、子网或VPC。

进一步探索

通过SNI检查进行域名过滤是出口安全的一层。根据您的需求,考虑以下额外缓解措施:

技术作用适用场景
DNS防火墙按域名阻止或允许DNS查询,防止DNS隧道和数据泄露需要DNS级过滤或防止基于DNS的数据泄露
TLS检查 + 数据防泄漏解密HTTPS,检查请求/响应体,帮助阻止敏感数据模式需要对代理生成流量进行数据丢失防护
集中式检查架构将来自多个VPC的流量通过共享检查VPC路由运行多个代理部署并希望集中策略执行

结论

通过将某中心的AI代理核心工具与Network Firewall相结合,您可以赋予AI代理受控的网页访问权限,同时保持安全性和合规性。基于域名的过滤方法有助于精确定义代理可以访问哪些网站、阻止不需要的目标,并为审计目的记录连接尝试。此架构解决了企业客户提出的安全顾虑,为需要互联网访问权限进行研究、数据收集或API集成的企业提供了生产就绪的方法。FINISHED