Skip to content

生产安全加固

Sub2API 保存上游凭证并能代理任意模型请求,安全级别应按“凭证系统 + 计费系统”设计。

威胁模型

主要风险:

  • 用户 API Key 泄漏导致盗用额度。
  • 管理员账号被接管,导出上游账号池。
  • SSRF 访问云 metadata 或内网服务。
  • PostgreSQL/备份泄漏 OAuth 与 API Key。
  • 代理配置错误泄漏真实出口 IP。
  • 支付 webhook 伪造或重复入账。
  • 日志记录 prompt、token 或敏感错误体。
  • 供应链镜像或在线升级被劫持。

网络隔离

text
Public: 80/443
Private: Sub2API 8080, PostgreSQL 5432, Redis 6379
Admin: SSH/VPN/zero-trust access
  • 数据库和 Redis 不绑定公网地址。
  • 应用端口只允许反向代理。
  • 管理后台可以额外限制公司 VPN/IP。
  • 上游出站使用 allowlist 和固定代理。

URL allowlist

生产建议:

dotenv
SECURITY_URL_ALLOWLIST_ENABLED=true
SECURITY_URL_ALLOWLIST_ALLOW_PRIVATE_HOSTS=false
SECURITY_URL_ALLOWLIST_ALLOW_INSECURE_HTTP=false
SECURITY_URL_ALLOWLIST_UPSTREAM_HOSTS=api.openai.com,api.anthropic.com,generativelanguage.googleapis.com,cloudcode-pa.googleapis.com

使用 Azure、Bedrock、Vertex、自定义上游、OAuth 或支付时,还要把实际域名加入对应范围。变更 allowlist 后测试全部账号类型。

云 metadata 防护

SSRF 常见目标:

  • 169.254.169.254
  • localhost 与容器网关。
  • Kubernetes service DNS。
  • Redis、PostgreSQL、Docker socket 周边服务。

关闭 private hosts 是第一层;网络 ACL、容器权限和云 metadata v2 是额外防线。

管理员保护

  • 使用独立管理员账号,不承担 API 流量。
  • 强密码 + TOTP。
  • 限制后台访问 IP 或 VPN。
  • 定期审查管理员与身份绑定。
  • 管理操作保留审计日志。
  • 不在共享浏览器保存管理员会话。

用户注册

公开注册至少启用:

  • 邮箱验证。
  • Turnstile。
  • 注册域名/邮箱策略。
  • 默认余额 0。
  • 默认低并发和有限分组。
  • 异常注册速率监控。

第三方 OAuth 不等于可信用户。要明确是否要求 verified email,以及账号合并冲突策略。

数据库与凭证

账号 credentials 保存在数据库。加固措施:

  • PostgreSQL 强密码与 TLS。
  • 最小权限数据库用户。
  • 禁止日常 BI/分析账号读取 credentials 字段。
  • 磁盘、快照和逻辑备份加密。
  • 异地备份使用独立权限域。
  • 备份下载和恢复有审计。
  • 离职人员及时移除数据库权限。

.env 与配置

bash
chmod 600 .env config.yaml
chown root:root .env config.yaml

Docker secret、Kubernetes Secret 或云 Secret Manager 优于长期明文 .env。无论使用哪种方式,都不要把 secret 输出到 CI 日志。

JWT 与 TOTP

  • 使用 32 字节以上随机 JWT secret。
  • TOTP key 必须是固定 32 字节 hex。
  • 多实例保持一致。
  • 轮换 JWT 会使会话失效,应安排维护窗口。
  • 轮换 TOTP key 需要迁移密文,不能直接替换。

API Key 安全

  • 用户 Key 独立,不共享。
  • 外部合作方设置 IP whitelist、quota 和 expires_at。
  • Key 只在创建时完整展示。
  • 前端、日志和工单默认脱敏。
  • 支持用户快速禁用和重新生成。
  • 对异常 QPS、IP、模型和费用告警。

代理安全

  • 使用可信代理供应商。
  • 凭证 URL 不写入日志。
  • AI 关键路径代理失败时禁止回退直连。
  • 对代理出口 IP、区域和 TLS 做定期测试。
  • 不同风险账号使用独立代理和连接池隔离。

反向代理

  • 强制 HTTPS 和 TLS 1.2+。
  • 关闭 API 缓存与 SSE buffering。
  • 限制 body size。
  • 不覆盖 Authorization。
  • 只信任受控代理的真实 IP。
  • 设置请求速率和连接数保护,但给长连接合理空间。

日志与隐私

默认使用 info,只有短期排障开启 debug。重点审查:

  • Authorization / API Key。
  • Cookie / OAuth token。
  • 完整 prompt 和图片 base64。
  • 支付签名和 webhook body。
  • 上游错误体。
  • 用户邮箱、IP 和自定义属性。

日志进入第三方平台前执行脱敏,并设置保留与删除策略。

支付

  • Webhook 只使用 HTTPS。
  • 验证签名、金额、币种、订单号和 provider instance。
  • 重复回调必须幂等。
  • 管理员手动补单有审计。
  • 生产与沙箱密钥分离。
  • 定期对账支付平台订单与本地余额变化。

容器与主机

  • 使用固定镜像 digest 或版本。
  • 应用以非 root 用户运行。
  • 不挂载 Docker socket。
  • 只挂载必要目录。
  • 主机定期更新安全补丁。
  • SSH 使用 key,禁用 root 密码登录。
  • 防火墙默认拒绝。

升级与供应链

  • 只从官方 Release/镜像源获取。
  • 验证 checksum 和镜像来源。
  • 查看版本说明与迁移。
  • 在 staging 验证。
  • 备份后滚动发布。
  • 在线升级功能仅向管理员开放,并监控下载代理。

安全事件响应

用户 Key 泄漏

  1. 立即禁用 Key。
  2. 查询来源 IP、模型、费用和时间范围。
  3. 创建新 Key,并收紧 ACL/额度。
  4. 评估是否需要冻结用户。

上游凭证泄漏

  1. 在上游平台撤销/轮换凭证。
  2. 禁用本地账号。
  3. 查数据库、备份和管理员访问记录。
  4. 更新账号并清理旧 token 缓存。
  5. 评估所有引用分组和用户影响。

管理员被接管

  1. 从网络层临时关闭后台入口。
  2. 撤销会话、重置密码和身份绑定。
  3. 审查账号导出、配置、余额和支付变更。
  4. 轮换受影响的上游与支付密钥。
  5. 从可信备份/审计重建事件时间线。

本文档用于帮助你理解、部署和运维 Sub2API。使用前请确认上游服务条款与当地法律要求。