AI 推理服务私网边界:验证 Private Endpoint、DNS 与路由不走公网
创建 PrivateLink 或 PSC 端点不代表请求真的留在私网。本文用端点清单、分域 DNS、路由证据和负向探针验收推理调用路径。
本文要点
- 主题聚焦:AI、大模型、DevOps
- 适合人群:独立开发者、全栈工程师、AI 应用开发者
- 核心价值:快速理解背景、实践路径、常见误区和工程建议
云控制台显示 Private Endpoint 为 Available,只能证明一个网络对象存在。应用可能仍解析公共地址,经 NAT 调用;私有 DNS 只在部分 VPC 生效;SDK 失败后还可能回退到公共默认域名。对包含 Prompt、附件和 embedding 的推理链路,验收必须证明真实流量经过批准端点,而不是相信资源名称。云网络基础 解释 VPC、子网和安全组,本篇聚焦托管 AI API 与跨账户推理服务的数据平面闭环。
先把服务边界写成清单
定义 ai.private-service.v1,逐个记录 provider、region、service、endpoint ID、所有者账户、消费 VPC、子网、私有 DNS 名、允许调用主体、端口、端点策略摘要和 public fallback 状态。AWS PrivateLink、Google Private Service Connect 与 Azure Private Link 的资源模型不同,不能用一个“private=true”布尔值抹平差异;验收器通过各云 API 读取真实状态并生成标准报告。
应用只配置内部稳定名,例如 inference.prod.internal,其配置版本绑定具体 endpoint generation。DNS A/AAAA 或 CNAME 由平台管理,业务容器不能接受请求参数覆盖 base URL。双栈环境必须同时检查 IPv4 与 IPv6;只把 A 记录私有化却让 AAAA 指向公网,会让部分客户端绕过控制。
三家能力不能混写。AWS interface endpoint 只有目标 AWS 服务明确支持时才有 endpoint policy;资源策略也只在该服务支持时用 aws:SourceVpce/aws:SourceVpc 约束,私有 endpoint service 则依赖 allowed principals、连接审批和服务自身鉴权。Google PSC 用 service attachment 的 accept/reject list 与 consumer project 控制连接;访问受支持 Google API 的数据边界还需 VPC Service Controls、IAM 和组织策略。Azure Private Endpoint 配合目标资源 firewall/RBAC,并在服务支持时设置 publicNetworkAccess=Disabled,用 Azure Policy 拒绝重新开放。每个 provider profile 都记录哪些控制真实可用,缺一项就不能用另一个云的字段冒充。
无论哪家,目标服务支持时都显式关闭 public network access;不支持时由资源侧来源条件与工作负载侧默认拒绝出口共同补边界。推理子网只允许登记 endpoint 的地址、端口与私有 DNS,公共供应商 FQDN、备用 region、Internet/NAT 出口默认拒绝。身份认证仍按 MCP Server 鉴权边界 执行,私网可达不等于有权调用。
DNS、路由与出口证据要互相印证
验收探针从每个生产子网、备用区和任务类型执行:解析内部名,确认结果属于登记的 endpoint ENI 或私有地址集合;建立 TLS 连接并验证受信服务身份;发送带唯一 canary ID 的最小请求,再把服务端访问日志、端点连接和 VPC flow log 关联起来。路由表需证明目标不依赖 Internet Gateway,若设计要求完全不经 NAT,则同一窗口 NAT 字节增量应为零。
关键负向探针必须复用生产 workload identity、SDK 配置和资源权限:在隔离测试中绕过私有 DNS,直连供应商 canonical public hostname、备用 region 与公开 IP 路径,断言网络出口或资源侧 source-endpoint/VPC-SC/firewall 条件拒绝。同一调用若换成私有 endpoint 才应成功。无凭证公共 runner 只能补充测试互联网暴露,不能证明持有生产身份的主体无法绕过私网;历史 NAT 字节为零也不能证明未来回退已被封死。
不能只用 traceroute 下结论,许多云虚拟网络不暴露真实跳点;控制面资源快照、public access 状态、DNS 答案、资源策略拒绝事件、流日志与服务端 request ID 组合才是证据。
服务网格 可以提供集群内 mTLS 和服务身份,但流量离开网格后是否进入云私有端点仍需单独证明。Agent 出口防护 面向不受信 URL、重定向与 SSRF;这里不允许任意 URL,本篇验证固定推理目的地有没有因云网络漂移走公网。
故障注入要覆盖隐性回退
在预发依次注入:删除私有 DNS 记录、返回陈旧公共 CNAME、移除一个子网关联、拒绝 endpoint connection、收紧端点策略、撤掉安全组规则、让私网域超时、制造 IPv6 公网答案、把 SDK endpoint 参数置空。预期是调用明确失败或转到另一个已登记私有端点,绝不能回退供应商公共域名。
生产门槛包括:私有解析覆盖率 100%;canary 都关联预期 endpoint ID;public network access 全部关闭或有登记补偿控制;同一生产身份直连每条公共/备用路径成功数为零;默认拒绝出口与资源侧来源条件均通过;未知 generation、未审批连接及推理 NAT/IGW 流量为零。审计保存 provider capability、DNS generation、public access 状态、策略摘要、flow tuple、请求 ID 和发布版本,不记录 Prompt。
持续漂移检查不能只靠每日 IaC plan。每次端点、DNS zone、路由、安全组、NAT 或 SDK base URL 变化都触发探针;flow log 丢失也视为证据缺口并告警。若服务商只在部分区域提供私网接入,调度器不得把敏感租户静默迁往公共区域。
双端点迁移与可逆回滚
变更时先创建新 endpoint generation,完成连接审批、策略和全子网探针,再用内部 DNS 加权或应用分桶切少量流量。旧端点保持可验证且只读配置,观察连接错误、延迟和服务端 request ID 后再扩大。回滚只把别名切回旧私有 generation,并刷新可控 DNS 缓存,不删除新端点以免丢失取证。
如果旧端点策略已被错误放宽或所有者账户受损,就不能回滚到它;应暂停敏感调用或切到另一个合格区域。云灾难恢复 必须提前验证备用区的 DNS、endpoint approval 和日志链,而不是故障时临时开放公网。
私网边界的完成条件不是“创建了 endpoint”,而是每个真实请求都能用 DNS、路由、端点身份和流日志证明经过批准路径,并且路径失败时应用不会悄悄选择公网。
延伸阅读
Related