Files
lijiaoqiao/docs/subapi_integration_compat_security_reliability_design_v1_2026-03-17.md
2026-03-26 20:06:14 +08:00

9.3 KiB
Raw Blame History

Subapi 集成兼容性、安全与运维可靠性设计v1.1

  • 版本v1.1
  • 日期2026-03-24
  • 适用阶段S1-S2
  • 关联文档:
    • subapi_connector_contract_v1_2026-03-17.md
    • sub2api_integration_readiness_checklist_2026-03-16.md
    • router_core_takeover_execution_plan_v3_2026-03-17.md
    • acceptance_gate_single_source_v1_2026-03-18.mdv1.1
    • llm_gateway_subapi_evolution_plan_v4_2_2026-03-24.md

1. 结论先行(回答四个核心问题)

  1. 我们是否考虑了与 subapi 的技术兼容性:
  • 已考虑了“契约层兼容”和“灰度回滚”,但还缺“版本漂移自动检测 + 协议回归自动阻断 + 兼容风险分级”的闭环。
  1. 我们是否了解 subapi 的安全风险:
  • 已识别部分风险,但需要把风险从“清单级”升级到“强制控制级”。
  • 典型高风险包括URL allowlist 默认关闭、私网/HTTP 默认放开、Gemini 路径保留 query key 兼容、Simple 模式会跳过关键计费校验。
  1. 集成 subapi 如何防止风险:
  • 必须采用“外部服务模块化 + 网络隔离 + 配置硬化 + 双层鉴权 + 契约测试闸门 + 安全告警”组合拳,不接受单点措施。
  1. 架构是否兼顾运维简单和可靠性:
  • 当前方向正确(灰度、回滚、观测已有),但还需补齐“最小化运维复杂度”的具体机制:单一控制面、统一配置发布、标准化 runbook、以及故障域隔离cell 化)。

2. 兼容性设计(防止实施期协议翻车)

2.1 已有基础(可复用)

  1. Connector 契约已定义 canonical 端点、错误归一、流式边界、重试约束。
  2. S2 迁移路径已定义 Wave 灰度与 stop/go 条件。
  3. 已有接管率与验收用例文档可做质量门禁基础。

2.2 仍需补齐的兼容闭环

新增三层闸门(必须全部启用):

  1. Schema Gate接口形态
  • 校验请求/响应 JSON 结构、必填字段、字段类型、错误码结构。
  • 重点接口:/v1/messages/v1/chat/completions/v1/responses/v1beta/models/*
  1. Behavior Gate行为语义
  • 校验 streaming 行为、首 token 前后错误处理、no-replay 规则。
  • 校验 header 优先级、模型映射、会话粘性、fallback 行为。
  1. Performance Gate性能与稳定
  • 校验 P95、5xx、超时率、账务差错率、幂等冲突率。
  • 不达标直接阻断升级,回退上一稳定版本。

2.3 兼容性风险分级(建议)

等级 定义 示例 处理策略
P0 会导致错误计费、协议不可用或大面积失败 流式 replay、错误码语义变化导致无限重试 立即阻断上线,强制回退
P1 影响部分场景或部分租户 某端点字段新增导致旧 SDK 解析失败 灰度暂停48h 内修复
P2 非核心功能偏差 次要元数据缺失 记录并进入下个迭代

3. subapi 安全风险台账(针对当前代码事实)

3.1 配置默认值风险

  1. security.url_allowlist.enabled=false(默认关闭)。
  2. allow_private_hosts=trueallow_insecure_http=true(默认放开)。
  3. 这意味着若不硬化SSRF/内网访问风险面会扩大。

3.2 认证与参数风险

  1. 常规 API 已拒绝 query keykey/api_key)。
  2. 但 Gemini 路径保留了 query key 兼容(/v1beta*),需要在我方入口再做强制拦截与改写策略。

3.3 运行模式风险

  1. run_mode=simple 下,认证后会跳过部分计费/订阅校验流程。
  2. 生产若误用 simple会带来额度与计费控制失效风险。

3.4 代理与来源 IP 风险

  1. server.trusted_proxies 默认空数组。
  2. 虽有告警日志,但若部署链路未正确设置,来源 IP 信任链可能失真,影响风控与审计。

3.5 合规与法律风险

  1. 上游仓库 README 明确提示 ToS 风险与研究用途声明。
  2. MIT 许可仅覆盖开源代码使用,不覆盖上游模型服务条款合规。

4. 风险防护设计(集成必须项)

4.1 网络与边界隔离

  1. subapi 只允许内网访问,不直接暴露公网。
  2. 主网关与 subapi 之间启用 mTLS至少双向证书校验
  3. 出网层做 egress allowlist域名/IP 双层),禁直连内网和不受信目的地。

4.2 配置硬化基线(生产强制)

  1. run_mode=standard
  2. security.url_allowlist.enabled=true
  3. security.url_allowlist.allow_private_hosts=false
  4. security.url_allowlist.allow_insecure_http=false
  5. billing.circuit_breaker.enabled=true
  6. server.trusted_proxies 必须显式配置。

4.3 认证与密钥策略

  1. 我方北向入口禁止 query key统一只接收 header 鉴权。
  2. 对 Gemini 兼容流量,在入口层将 query key 转换为 header 后再转发,外部请求直接带 query key 一律拒绝。
  3. API Key 与上游凭证分离管理,凭证仅在 Adapter 层短时解密。
  4. 需求方仅可使用平台签发凭证访问平台入口,platform_credential_ingress_coverage_pct 必须为 100%。
  5. 禁止向需求方返回供应方上游凭证API/控制台/导出/错误信息均不允许)。
  6. 需求方绕过平台直连供应方视为 P0 安全事件,必须可观测、可告警、可阻断。

4.4 版本与发布治理

  1. 固定 subapi 精确版本(vX.Y.Z),禁止漂移。
  2. 每次升级必须通过 Schema/Behavior/Performance 三重 Gate。
  3. 灰度比例5% -> 20% -> 50% -> 100%。
  4. 任一 P0 风险触发,自动回退上一稳定版本。

4.5 观测与审计

  1. 强制 request_id 全链路透传。
  2. 记录 router_engineinbound_endpointupstream_endpointrequest_type
  3. 安全告警纳入统一事件中心:
  • query key 拦截次数
  • 非法上游域名命中
  • 私网地址访问拦截
  • 账务冲突率突增
  • 供应方上游凭证泄露事件(supplier_credential_exposure_events
  • 需求方绕过平台直连供应方事件(direct_supplier_call_by_consumer_events
  • 平台凭证入站覆盖率下降(platform_credential_ingress_coverage_pct < 100%

5. 运维简单 + 可靠性架构(目标态)

5.1 运维简单(减少人肉操作)

  1. 单一控制面:所有路由开关、灰度比例、熔断阈值在我方控制面发布。
  2. 单一发布流水线subapi 升级与 Router Core 升级共享同一套 Gate 与回滚动作。
  3. 标准化运行手册:按“告警 -> 判断 -> 操作 -> 验证”四段式 Runbook 固化。

5.2 高可靠(避免级联故障)

  1. 故障域隔离Cell:按租户或区域切分 subapi 实例池,避免单点故障扩散。
  2. 双通路兜底:自研主路径 + subapi connector 兜底,并支持一键回切。
  3. 幂等与补偿:请求级幂等扣费 + 冲突告警 + 对账补偿任务。
  4. 流式保护:首字输出后禁止 replay防止双流拼接与重复扣费。

5.3 SLO 与错误预算(建议)

  1. 可用性 SLO99.9%(网关维度)。
  2. 附加延迟 SLOP95 <= 60ms。
  3. 账务正确性 SLO差错率 <= 0.1%,冲突率 <= 0.01%。
  4. 每周审查 error budget超预算自动冻结升波。

6. 两周内可落地动作(最小闭环)

  1. 新增“兼容三重 Gate”流水线并接入升级流程。
  2. 生产配置硬化巡检(按 4.2 清单逐项验收)。
  3. 在入口层落地“query key 全拦截(含 Gemini 兼容改写)”。
  4. 建立安全告警面板SSRF 拦截、query key 拦截、账务冲突)。
  5. 增加凭证边界专项检查(上游凭证零外发 + 平台凭证入站覆盖率100%)。
  6. 完成一次“升级 + 灰度 + 自动回滚”演练并沉淀复盘。

7. 验收标准(本设计是否落地)

  1. 任一 subapi 升级都能产出 Gate 报告并可追溯。
  2. 生产环境不存在宽松高风险配置4.2 全部满足)。
  3. 发生兼容或安全异常时30 分钟内可回切到稳定版本。
  4. 需求方仅使用平台凭证入站,platform_credential_ingress_coverage_pct = 100%
  5. supplier_credential_exposure_events = 0direct_supplier_call_by_consumer_events = 0
  6. 运维团队按 Runbook 可独立处置常见告警,无需临时拍脑袋决策。

8. 代码证据(用于本设计判断)

  1. 默认安全配置与告警日志: backend/internal/config/config.go
  2. API Key 鉴权与 simple mode 逻辑: backend/internal/server/middleware/api_key_auth.go
  3. Gemini 认证优先级与 query key 兼容: backend/internal/server/middleware/api_key_auth_google.go
  4. URL 校验器(含 allowlist/private/insecure 与 DNS rebinding 注释): backend/internal/util/urlvalidator/validator.go
  5. trusted proxies 与 release 模式告警: backend/internal/server/http.go
  6. 上游 ToS 风险提示: README.mdsub2api 仓库)

9. 执行任务单(新增)

为将本设计转换为可执行排期,新增任务单:

  1. subapi_integration_risk_controls_execution_tasks_v1_2026-03-17.md
    • 两周里程碑2026-03-18 至 2026-03-31
    • 任务 ID / 责任角色 / 截止日期 / 验收标准 / 证据产物
    • Daily Gate / Weekly Gate / 回滚演练闭环
  2. subapi_expert_review_wargame_plan_v1_2026-03-17.md
    • 专家组成、对抗式博弈规则、评分模型与一票否决条件
    • 四轮评审(架构/兼容计费/安全合规/可靠性演练)与最终决议机制