生产安全加固
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.yamlDocker 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 泄漏
- 立即禁用 Key。
- 查询来源 IP、模型、费用和时间范围。
- 创建新 Key,并收紧 ACL/额度。
- 评估是否需要冻结用户。
上游凭证泄漏
- 在上游平台撤销/轮换凭证。
- 禁用本地账号。
- 查数据库、备份和管理员访问记录。
- 更新账号并清理旧 token 缓存。
- 评估所有引用分组和用户影响。
管理员被接管
- 从网络层临时关闭后台入口。
- 撤销会话、重置密码和身份绑定。
- 审查账号导出、配置、余额和支付变更。
- 轮换受影响的上游与支付密钥。
- 从可信备份/审计重建事件时间线。