跳到正文

多租户隔离

多租户隔离的目标是让每个租户只能到达被授权的模型、看到自己的用量与费用、受自己的限流约束。网关用「密钥组 + 访问密钥 + Header ACL + 限流」四层组合实现。

隔离的四个维度

维度机制配置处
模型可达密钥组的 models 列表控制台 → 密钥组
负载均衡器可达密钥组的 load_balancers 列表控制台 → 密钥组
客户端身份访问密钥 + Header ACL 规则控制台 → 访问密钥 / Header ACL
用量约束每密钥限流(RPM / 并发 / TPM)RATE_LIMIT_* + 控制台

用密钥组切分模型与负载均衡器

每个租户一个密钥组,models 列出该租户能调的模型名,load_balancers 列出能调的 LB 名。租户的访问密钥挂到对应密钥组。字段见 访问密钥与密钥组字段

LB 是独立的授权维度

密钥组的 modelsload_balancers 是两个独立列表。「所有模型」(*附带 LB 权限,反之亦然——两个维度要分别勾选。这是多租户场景最常见的配错点。详见 创建负载均衡器 的「与密钥组的关系」。

负载均衡器是授权单元(易错点)

网关只在请求进入时校验一次 LB 名称是否在密钥组的 load_balancers 白名单内,不会再用 models 列表逐个校验该 LB 内的 entry。也就是说,一旦密钥组放行了某 LB,该组密钥就能到达该 LB 里的每一个 entry。

严格隔离时别用 LB

若要严格限制某租户只能用某个模型,把它配成普通模型并加入该租户密钥组的 models 列表,不要放进一个已被多租户授权的 LB——LB 的 entry 集合是所有持权密钥的可达并集。

用请求头规则区分客户端

同一密钥组下想按客户端进一步分流,用 Header ACL 规则按请求头(如 X-Tenant)匹配,做白名单/黑名单。规则字段见 Header ACL 规则字段,配置示例见 配 Header ACL 的白名单模式。

每租户限流与配额

  • 每访问密钥的 RPM / 并发 / TPM 上限在 RATE_LIMIT_* 环境变量配置(见 审计与安全配置)。
  • 多实例部署时限流走 Redis 共享,否则每实例独立、阈值被分散。见 做到高可用

计费口径

定价与计费 配置价格快照后,月度账单按模型 + 访问密钥维度汇总。每个租户用自己的密钥组与访问密钥,账单天然按租户拆分。

常见问题

Q:同一把访问密钥能给多个租户用吗? 不能。访问密钥挂在一个密钥组上,权限由该组决定。多租户要每租户独立的密钥组与访问密钥。

Q:密钥组的 models 写别名行吗? 不行。密钥组的模型 ACL 只匹配规范名称name 字段),不解析别名。见 上游与模型字段 的「模型别名与隐藏名称」。

Q:怎么让某租户的限流不互相干扰? 每租户独立访问密钥,限流按密钥计。多实例配 Redis 让限流跨实例共享。

下一步满足合规与审计要求 看合规;访问密钥与密钥组字段 看字段;访问控制设计 看设计原则。