聚焦审计证据、服务目标、容量输入和验证门禁,定义上线前如何证明系统可靠。
12. 可观测性与审计
12.1 可观测性与审计中心
可观测性与审计中心只接收有明确来源的事件:数据面运行与决策事件、普通控制面变更及事务内审计、break-glass 本地审计副本。它负责脱敏、关联和证据输出,不另起一套控制面审计写入链路。
审计覆盖率以配置写事务为准,告警与合规查询以可观测性中心的关联结果为准。两者共享 request_id、配置版本和资源标识,但职责不重复。
12.2 核心指标
- 请求量:按地域、平台、路由、商户和结果统计。
- 延迟:网关总延迟、授权延迟、后端延迟,分别统计 P50、P95、P99。
- 错误率:按
401、403、404、429、502、503、504和内部 reason code 统计。 - 授权:Key 未知、摘要失败、IP 不匹配、Scope 不足、Key 过期、Key 吊销。
- 配置:控制面最新版本、各地域已应用版本、传播延迟、消费积压和对账差异。
- 路由:后端健康实例数、熔断状态、重试次数和故障转移次数。
- 安全:Key 枚举特征、异常 IP 变化、拒绝率突增和管理高风险操作。
12.3 日志与追踪字段
数据面结构化日志至少包含:timestamp、request_id、trace_id、region、environment、route_name、platform、merchant_id、脱敏 Key ID、规范化来源 IP、授权结果、内部 reason code、配置 epoch、配置 sequence、HTTP 状态、请求耗时、后端耗时和失败域。
管理审计日志至少包含:操作者身份、审批人身份、资源、操作、原因、变更前后摘要、请求标识、来源系统和时间。
12.4 告警
以下事件应触发实时告警:
- 任一地域授权拒绝率相对过去 30 分钟基线显著上升。
- 区域配置版本落后控制面超过 30 秒。
- 安全变更传播超过 10 秒。
- 任一平台无健康后端或触发跨地域故障转移。
- 网关 P99 延迟或
5xx比例超过 SLO。 - 单个 Key 在多个未绑定 IP 上连续认证失败。
- 高风险管理操作未完成双人审批或审计写入失败。
13. 建议 SLO 与容量原则
以下指标是设计建议,不是会议已确认承诺:
| 指标 | 建议目标 | 测量方法 |
|---|---|---|
| 地域内网关月可用性 | 99.99% | 从受控外部探针使用有效测试 Key、已绑定 IP 和只读测试路由贯穿 WAF、网关与 API Key 验证服务;网关或 API Key 验证服务产生的 5xx 计失败 |
| 网关新增延迟,不含后端耗时 | P95 不高于 20 毫秒,P99 不高于 50 毫秒 | 使用单调时钟计算网关总 span 减去 upstream wait span,按地域和路由聚合 |
| 普通配置传播 | 99.9% 在 30 秒内到达所有健康地域 | 从 PostgreSQL 提交时间到每个健康地域报告已加载相同 (epoch, sequence) 的时间 |
| 暂停、吊销和 IP 移除传播 | 99.9% 在 10 秒内到达所有健康地域 | 从中央提交或 break-glass 指令被接受,到各健康地域探针首次观察到拒绝的时间 |
| 单实例或单可用区故障恢复 | 60 秒内自动摘除并恢复容量 | 从注入故障到健康实例承接全部允许流量且错误率回到阈值内的时间 |
| 区域级网关故障恢复时间 | 5 分钟内完成允许流量的切换 | 从区域健康检查确认失效到备用地域连续 5 分钟满足成功率目标的时间 |
| 控制面恢复时间 | 30 分钟内恢复单写管理能力 | 从主地域被判定不可恢复到备用地域完成围栏、提升和首个新 epoch 写入的时间 |
| 网关配置恢复点 | 不超过 1 分钟 | 故障接管后核对最后确认提交与恢复后最大已恢复提交时间,丢失窗口不得超过 60 秒 |
| 控制面变更审计覆盖率 | 100% | 每个成功写事务必须存在同一 request_id 的只追加审计记录 |
| 未授权请求测试拦截率 | 100% | 第 14.1 节全部负向用例均被拒绝且无身份、路由和权限信息泄露 |
网关可用性 SLI 的分母是通过基础协议校验且到达地域入口的请求;客户端造成的 4xx 和已标记为后端失败域的 5xx 不计入网关失败,但必须另设端到端可用性 SLI。API Key 验证服务失败关闭产生的 503 属于网关失败并消耗错误预算。
按 30 天计算,99.99% 只允许约 4.32 分钟不可用。边缘入口、网关和 API Key 验证服务各自最多使用三分之一错误预算,对应各组件月可用性不低于 99.997%。Redis 不应成为每个请求的强同步依赖,进程内配置快照用于隔离其故障。该预算必须在技术选型后用实际依赖图重新计算,不能把组件 SLO 简单相乘后宣告达标。
健康地域定义为最近 30 秒持续上报数据面健康、配置版本和时钟同步状态的地域。传播 SLI 只排除已被流量路由策略中心入口执行点正式摘除的地域,不能因传播落后而把地域临时标记为不健康来规避统计。
会议材料没有提供峰值 QPS、平均请求体、响应体、连接持续时间、商户数量、API Key 数量或地域清单,因此当前不能给出可信的实例数与硬件定容。
定容前必须收集各平台最近 30 天的峰值 QPS、P95 与 P99 请求体、P95 与 P99 后端耗时、连接复用率、商户数量、每商户 Key 数量和 IP 绑定数量。压测应在 70% 目标容量下验证 SLO,并保留至少 30% 的区域内突发余量和一个可用区故障后的剩余承载能力。
14. 验证与验收
14.1 授权矩阵测试
必须覆盖以下自动化测试:
- 有效 Key、已绑定 IP、正确环境、拥有 required scope 时通过。
- 有效 Key 与同一商户的另一个未绑定 IP 组合时返回
401。 - 同一商户的另一个 Key 与当前 IP 未绑定时返回
401。 - Key 与 IP 已绑定但缺少 required scope 时返回
404,响应与真实不存在的路由一致。 - Key 未知、Secret 错误或凭据格式错误时统一返回
401。 - Key 处于
pending、suspended、revoked或expired时拒绝。 - 轮换窗口内新旧 Secret 都可用,窗口结束后只有新 Secret 可用。
- 客户端伪造
X-Forwarded-For时不能改变授权使用的来源 IP。 - 路由未声明 required scope 时无法发布。
- 生产 Key 不能访问非生产环境,非生产 Key 不能访问生产环境。
- 未认证请求对存在和不存在的路由都返回相同的
401,不能枚举路由。 - Pepper 升级后,引用旧 Pepper 版本且仍在有效期内的 Secret 继续可验证,新 Secret 使用新 Pepper 版本。
- IPv4 小于
/29或 IPv6 小于/64的绑定被拒绝,重叠网段不能写入。 - 支付写请求的签名时间戳超出 5 分钟、Nonce 在 10 分钟内重复、正文摘要不符或签名不正确时拒绝。
14.2 多地域与故障测试
- 停止一个网关实例,请求无感切换且无授权绕过。
- 停止一个可用区,区域剩余容量仍满足 SLO。
- 停止某一地域的 Redis,已知请求按有界快照策略处理,未知 Key 拒绝。
- 停止消息总线,配置标记为待发布,恢复后事件无丢失且按版本顺序收敛。
- 吊销一个 Key,验证所有健康地域在 10 秒目标内拒绝。
- 模拟整个地域不可用,只对满足策略的读取或幂等写入执行故障转移。
- 模拟备用地域业务数据库落后,确认网关不进行盲目跨地域写入。
- 恢复原地域,执行受控回切并验证配置版本和后端数据状态。
- 提升备用控制面前验证旧主写入已围栏;新控制面使用更高 epoch,所有地域拒绝旧 epoch 事件。
- 控制面与 PostgreSQL 同时不可用时,通过 break-glass 在全部健康地域封禁一个测试 Key,恢复后归档为正式吊销记录。
- Redis 故障后验证本地令牌桶配额总和不超过全局配额,并验证恢复时不会突发放大流量。
- 最后一次授权快照超过 15 分钟时,高风险写请求拒绝,读取请求遵循已批准的风险策略。
- 备用地域复制状态信号过期或延迟超过路由阈值时,读取请求不得自动故障转移。
- 旧配置版本覆盖被拒绝,
429和后端409语义保持稳定,IP 绑定原子替换期间不存在部分集合可见状态。
14.3 发布门禁
首个生产版本必须同时满足:
- 授权矩阵自动化测试通过率 100%。
- 安全变更传播、网关延迟和可用性达到第 13 节目标。
- 网关、WAF、APM 和审计日志扫描未发现明文 Secret。
- 完成单可用区故障演练、控制面实际接管演练、break-glass 实际封禁演练和区域级数据面桌面演练。
- 各首批平台负责人签署路由、required scope、幂等和故障转移策略。
- 安全团队完成威胁模型和渗透测试高风险项关闭。
- 运维团队确认仪表盘、告警、值班手册和回滚流程可用。