9.3 KiB
9.3 KiB
Subapi 集成兼容性、安全与运维可靠性设计(v1.1)
- 版本:v1.1
- 日期:2026-03-24
- 适用阶段:S1-S2
- 关联文档:
subapi_connector_contract_v1_2026-03-17.mdsub2api_integration_readiness_checklist_2026-03-16.mdrouter_core_takeover_execution_plan_v3_2026-03-17.mdacceptance_gate_single_source_v1_2026-03-18.md(v1.1)llm_gateway_subapi_evolution_plan_v4_2_2026-03-24.md
1. 结论先行(回答四个核心问题)
- 我们是否考虑了与 subapi 的技术兼容性:
- 已考虑了“契约层兼容”和“灰度回滚”,但还缺“版本漂移自动检测 + 协议回归自动阻断 + 兼容风险分级”的闭环。
- 我们是否了解 subapi 的安全风险:
- 已识别部分风险,但需要把风险从“清单级”升级到“强制控制级”。
- 典型高风险包括:URL allowlist 默认关闭、私网/HTTP 默认放开、Gemini 路径保留 query key 兼容、Simple 模式会跳过关键计费校验。
- 集成 subapi 如何防止风险:
- 必须采用“外部服务模块化 + 网络隔离 + 配置硬化 + 双层鉴权 + 契约测试闸门 + 安全告警”组合拳,不接受单点措施。
- 架构是否兼顾运维简单和可靠性:
- 当前方向正确(灰度、回滚、观测已有),但还需补齐“最小化运维复杂度”的具体机制:单一控制面、统一配置发布、标准化 runbook、以及故障域隔离(cell 化)。
2. 兼容性设计(防止实施期协议翻车)
2.1 已有基础(可复用)
- Connector 契约已定义 canonical 端点、错误归一、流式边界、重试约束。
- S2 迁移路径已定义 Wave 灰度与 stop/go 条件。
- 已有接管率与验收用例文档可做质量门禁基础。
2.2 仍需补齐的兼容闭环
新增三层闸门(必须全部启用):
- Schema Gate(接口形态)
- 校验请求/响应 JSON 结构、必填字段、字段类型、错误码结构。
- 重点接口:
/v1/messages、/v1/chat/completions、/v1/responses、/v1beta/models/*。
- Behavior Gate(行为语义)
- 校验 streaming 行为、首 token 前后错误处理、no-replay 规则。
- 校验 header 优先级、模型映射、会话粘性、fallback 行为。
- Performance Gate(性能与稳定)
- 校验 P95、5xx、超时率、账务差错率、幂等冲突率。
- 不达标直接阻断升级,回退上一稳定版本。
2.3 兼容性风险分级(建议)
| 等级 | 定义 | 示例 | 处理策略 |
|---|---|---|---|
| P0 | 会导致错误计费、协议不可用或大面积失败 | 流式 replay、错误码语义变化导致无限重试 | 立即阻断上线,强制回退 |
| P1 | 影响部分场景或部分租户 | 某端点字段新增导致旧 SDK 解析失败 | 灰度暂停,48h 内修复 |
| P2 | 非核心功能偏差 | 次要元数据缺失 | 记录并进入下个迭代 |
3. subapi 安全风险台账(针对当前代码事实)
3.1 配置默认值风险
security.url_allowlist.enabled=false(默认关闭)。allow_private_hosts=true、allow_insecure_http=true(默认放开)。- 这意味着若不硬化,SSRF/内网访问风险面会扩大。
3.2 认证与参数风险
- 常规 API 已拒绝 query key(
key/api_key)。 - 但 Gemini 路径保留了
query key兼容(/v1beta*),需要在我方入口再做强制拦截与改写策略。
3.3 运行模式风险
run_mode=simple下,认证后会跳过部分计费/订阅校验流程。- 生产若误用 simple,会带来额度与计费控制失效风险。
3.4 代理与来源 IP 风险
server.trusted_proxies默认空数组。- 虽有告警日志,但若部署链路未正确设置,来源 IP 信任链可能失真,影响风控与审计。
3.5 合规与法律风险
- 上游仓库 README 明确提示 ToS 风险与研究用途声明。
- MIT 许可仅覆盖开源代码使用,不覆盖上游模型服务条款合规。
4. 风险防护设计(集成必须项)
4.1 网络与边界隔离
- subapi 只允许内网访问,不直接暴露公网。
- 主网关与 subapi 之间启用 mTLS(至少双向证书校验)。
- 出网层做 egress allowlist(域名/IP 双层),禁直连内网和不受信目的地。
4.2 配置硬化基线(生产强制)
run_mode=standard。security.url_allowlist.enabled=true。security.url_allowlist.allow_private_hosts=false。security.url_allowlist.allow_insecure_http=false。billing.circuit_breaker.enabled=true。server.trusted_proxies必须显式配置。
4.3 认证与密钥策略
- 我方北向入口禁止 query key;统一只接收 header 鉴权。
- 对 Gemini 兼容流量,在入口层将 query key 转换为 header 后再转发,外部请求直接带 query key 一律拒绝。
- API Key 与上游凭证分离管理,凭证仅在 Adapter 层短时解密。
- 需求方仅可使用平台签发凭证访问平台入口,
platform_credential_ingress_coverage_pct必须为 100%。 - 禁止向需求方返回供应方上游凭证(API/控制台/导出/错误信息均不允许)。
- 需求方绕过平台直连供应方视为 P0 安全事件,必须可观测、可告警、可阻断。
4.4 版本与发布治理
- 固定 subapi 精确版本(
vX.Y.Z),禁止漂移。 - 每次升级必须通过 Schema/Behavior/Performance 三重 Gate。
- 灰度比例:5% -> 20% -> 50% -> 100%。
- 任一 P0 风险触发,自动回退上一稳定版本。
4.5 观测与审计
- 强制 request_id 全链路透传。
- 记录
router_engine、inbound_endpoint、upstream_endpoint、request_type。 - 安全告警纳入统一事件中心:
- query key 拦截次数
- 非法上游域名命中
- 私网地址访问拦截
- 账务冲突率突增
- 供应方上游凭证泄露事件(
supplier_credential_exposure_events) - 需求方绕过平台直连供应方事件(
direct_supplier_call_by_consumer_events) - 平台凭证入站覆盖率下降(
platform_credential_ingress_coverage_pct < 100%)
5. 运维简单 + 可靠性架构(目标态)
5.1 运维简单(减少人肉操作)
- 单一控制面:所有路由开关、灰度比例、熔断阈值在我方控制面发布。
- 单一发布流水线:subapi 升级与 Router Core 升级共享同一套 Gate 与回滚动作。
- 标准化运行手册:按“告警 -> 判断 -> 操作 -> 验证”四段式 Runbook 固化。
5.2 高可靠(避免级联故障)
- 故障域隔离(Cell):按租户或区域切分 subapi 实例池,避免单点故障扩散。
- 双通路兜底:自研主路径 + subapi connector 兜底,并支持一键回切。
- 幂等与补偿:请求级幂等扣费 + 冲突告警 + 对账补偿任务。
- 流式保护:首字输出后禁止 replay,防止双流拼接与重复扣费。
5.3 SLO 与错误预算(建议)
- 可用性 SLO:99.9%(网关维度)。
- 附加延迟 SLO:P95 <= 60ms。
- 账务正确性 SLO:差错率 <= 0.1%,冲突率 <= 0.01%。
- 每周审查 error budget;超预算自动冻结升波。
6. 两周内可落地动作(最小闭环)
- 新增“兼容三重 Gate”流水线,并接入升级流程。
- 生产配置硬化巡检(按 4.2 清单逐项验收)。
- 在入口层落地“query key 全拦截(含 Gemini 兼容改写)”。
- 建立安全告警面板(SSRF 拦截、query key 拦截、账务冲突)。
- 增加凭证边界专项检查(上游凭证零外发 + 平台凭证入站覆盖率100%)。
- 完成一次“升级 + 灰度 + 自动回滚”演练并沉淀复盘。
7. 验收标准(本设计是否落地)
- 任一 subapi 升级都能产出 Gate 报告并可追溯。
- 生产环境不存在宽松高风险配置(4.2 全部满足)。
- 发生兼容或安全异常时,30 分钟内可回切到稳定版本。
- 需求方仅使用平台凭证入站,
platform_credential_ingress_coverage_pct = 100%。 supplier_credential_exposure_events = 0且direct_supplier_call_by_consumer_events = 0。- 运维团队按 Runbook 可独立处置常见告警,无需临时拍脑袋决策。
8. 代码证据(用于本设计判断)
- 默认安全配置与告警日志:
backend/internal/config/config.go - API Key 鉴权与 simple mode 逻辑:
backend/internal/server/middleware/api_key_auth.go - Gemini 认证优先级与 query key 兼容:
backend/internal/server/middleware/api_key_auth_google.go - URL 校验器(含 allowlist/private/insecure 与 DNS rebinding 注释):
backend/internal/util/urlvalidator/validator.go - trusted proxies 与 release 模式告警:
backend/internal/server/http.go - 上游 ToS 风险提示:
README.md(sub2api 仓库)
9. 执行任务单(新增)
为将本设计转换为可执行排期,新增任务单:
subapi_integration_risk_controls_execution_tasks_v1_2026-03-17.md- 两周里程碑(2026-03-18 至 2026-03-31)
- 任务 ID / 责任角色 / 截止日期 / 验收标准 / 证据产物
- Daily Gate / Weekly Gate / 回滚演练闭环
subapi_expert_review_wargame_plan_v1_2026-03-17.md- 专家组成、对抗式博弈规则、评分模型与一票否决条件
- 四轮评审(架构/兼容计费/安全合规/可靠性演练)与最终决议机制