OneAPI多租户权限分离杜绝下游数据互通泄露方案
为什么需要多租户权限分离
企业内部使用OneAPI统一管理各种大模型API时,不同部门或项目组(下游租户)通常需要各自独立的API Key。
如果没有权限隔离,一个租户可以轻松查看其他租户的调用记录、日志,甚至直接使用其他租户的配额和渠道,造成严重的数据泄露。
OneAPI本身支持多租户,但必须正确配置权限分离才能生效。
准备工作
- 已完成OneAPI部署(推荐使用官方Docker镜像,版本2.x以上)。
- 拥有管理员账号(默认admin权限)。
- 至少创建两个测试下游用户(例如
dev-team和test-team),并准备好各自的API Key(Token)。 - 了解渠道(Channel)概念:每个渠道对应一个上游大模型供应商(如OpenAI、Claude、本地vLLM)。
核心配置步骤
1. 创建渠道并绑定租户
管理员登录后台,进入“渠道”页面,点击“添加渠道”。
填写渠道名称、类型和密钥后,在“限制”区域勾选“仅允许指定Token访问”。
然后从下拉列表中选择该渠道允许的Token(例如只允许dev-team的Token)。
这样该渠道只有被授权的Token才能调用。
2. 为不同租户创建独立Token
在“Token”页面点击“添加Token”。
填写名称(如dev-token),并设置“模型权限”为仅允许该租户需要的模型。
关键步骤:在“渠道权限”一栏中,勾选只属于该租户的渠道。
保存后将生成的API Key分发给对应租户。
3. 调整用户角色与权限
OneAPI的用户角色分为管理员和普通用户。
管理员可以查看所有租户数据,普通用户只能看到自己的Token和调用记录。
进入“用户”页面,将非管理下游用户角色改为“普通用户”而非“管理员”。这一点常被忽略,一旦普通用户被设成管理员,即使Token被限制也能通过后台查看所有数据。
4. 验证隔离效果
使用不同租户的API Key分别调用OneAPI的/v1/models接口,例如:
# 使用dev-token调用
curl -H "Authorization: Bearer sk-dev-token" https://your-oneapi/v1/models
# 使用test-token调用
curl -H "Authorization: Bearer sk-test-token" https://your-oneapi/v1/models
正常情况下,每个Token只能看到自己被授权的模型(模型列表不同)。
然后尝试用dev-token调用test-token专属渠道的模型(例如gpt-4-test),应返回403 Forbidden错误。
避坑指南
- Token与渠道关联遗漏:创建Token时不指定渠道权限,系统默认允许所有渠道,等于没有隔离。
- 误将普通用户提升为管理员:管理员可绕过Token限制查看所有数据,务必只保留最小必要管理员账号。
- 渠道未勾选“仅允许指定Token访问”:即使Token被限制,渠道本身不限制,其他Token仍可调用。需要渠道和Token两侧都加限制。
- 日志和统计也需单独设置:OneAPI的日志页面默认显示全部数据,可通过用户角色限制,但建议定期检查普通用户是否能看到其他租户的日志。
高频问题解答
Q:多租户权限分离需要重新部署OneAPI吗?
A:不需要。所有配置在后台Web界面完成,无需修改源码或重启容器。
Q:已有旧Token如何迁移到隔离环境?
A:建议为每个租户重新生成新Token,并在渠道中取消旧Token的授权。同时临时保留旧Token做过渡,待验证完成后撤销。
Q:是否支持对接上游的多模型供应商?
A:支持。每个渠道可以独立配置上游密钥,配合Token权限可以实现“租户A只能调用OpenAI,租户B只能调用Claude”的精细隔离。
完成以上配置后,OneAPI的多租户权限隔离就生效了。
建议定期检查后台“日志”和“统计”页面,确保普通用户只能看到自己的数据。
如有异常,优先排查Token和渠道的授权绑定。