Files
lijiaoqiao/docs/subapi_integration_compat_security_reliability_design_v1_2026-03-17.md

200 lines
9.3 KiB
Markdown
Raw Normal View 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.md`v1.1
- `llm_gateway_subapi_evolution_plan_v4_2_2026-03-24.md`
## 1. 结论先行(回答四个核心问题)
1. 我们是否考虑了与 subapi 的技术兼容性:
- 已考虑了“契约层兼容”和“灰度回滚”,但还缺“版本漂移自动检测 + 协议回归自动阻断 + 兼容风险分级”的闭环。
2. 我们是否了解 subapi 的安全风险:
- 已识别部分风险,但需要把风险从“清单级”升级到“强制控制级”。
- 典型高风险包括URL allowlist 默认关闭、私网/HTTP 默认放开、Gemini 路径保留 query key 兼容、Simple 模式会跳过关键计费校验。
3. 集成 subapi 如何防止风险:
- 必须采用“外部服务模块化 + 网络隔离 + 配置硬化 + 双层鉴权 + 契约测试闸门 + 安全告警”组合拳,不接受单点措施。
4. 架构是否兼顾运维简单和可靠性:
- 当前方向正确(灰度、回滚、观测已有),但还需补齐“最小化运维复杂度”的具体机制:单一控制面、统一配置发布、标准化 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/*`
2. **Behavior Gate行为语义**
- 校验 streaming 行为、首 token 前后错误处理、no-replay 规则。
- 校验 header 优先级、模型映射、会话粘性、fallback 行为。
3. **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=true``allow_insecure_http=true`(默认放开)。
3. 这意味着若不硬化SSRF/内网访问风险面会扩大。
## 3.2 认证与参数风险
1. 常规 API 已拒绝 query key`key`/`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_engine``inbound_endpoint``upstream_endpoint``request_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 = 0``direct_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.md`sub2api 仓库)
## 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`
- 专家组成、对抗式博弈规则、评分模型与一票否决条件
- 四轮评审(架构/兼容计费/安全合规/可靠性演练)与最终决议机制