AI中转站多租户权限分离配置详解:零基础实现用户隔离
为什么需要多租户权限分离
当你的AI中转站(比如基于One API或New API搭建的服务)开始服务多个客户或内部团队时,最怕的就是一个用户误操作影响所有人,或者某个用户的密钥泄漏导致整个站被刷光配额。
多租户权限分离能让每个用户拥有独立的API Key、独立的速率限制和可分配模型,且彼此数据完全隔离。
即使某个租户的密钥暴露,也只影响它自己,不会波及其他用户。
配置前的准备工作
在动手之前,确保你拥有以下环境:
- 一套已部署并正常运行的AI中转站服务(推荐One API v0.5.0以上版本)
- 管理员账号(通常安装时的第一个账号就是管理员)
- 明确要创建哪些租户(比如客户A、团队测试、内部开发)
- (可选)如果使用反向代理,确认Nginx/Caddy已配置好,避免端口冲突
如果你还没搭建中转站,建议先参照官方文档完成基础安装再做权限分离配置。
一步步实现多租户权限分离
1. 创建租户组(角色)
登录管理员后台,进入用户组或角色管理页面(不同版本入口可能叫“角色管理”或“用户组”)。
点击“添加用户组”,创建一个名为“租户A”的角色。
权限设置中:
- 模型权限:勾选允许该租户使用的模型列表(例如只给GPT-4和Claude-3)
- 速率限制:设置每秒请求次数(例如10 req/s)
- 额度限制:可以设置每日或总量上限
建议:先创建几个通用角色模板(标准租户、高级租户、测试租户),后续直接复用。
2. 创建租户账号并绑定角色
返回用户管理,点击“添加用户”。
填写:
- 用户名:例如 tenant_a
- 显示名称:客户A(方便管理)
- 密码:建议生成强密码后保管好
- 角色:选择刚才创建的“租户A”角色
- 状态:启用
保存后,这个用户就拥有了对应的权限和限制。
3. 生成独立API Key
进入该用户的详情页,找到“令牌”或“API Key管理”。
点击“新建令牌”,你可以:
- 设置过期时间(推荐30天或永不过期,生产环境建议定期轮换)
- 限制IP白名单(高级用法,可选)
- 限制绑定角色(一般默认即可)
生成一个唯一Key,例如 sk-xxxxxxxxxxxxxxxx。
将这个Key分发给对应租户,并告知他们只能使用这个Key访问自己的资源。
4. (可选)为租户分配单独的可用额度
如果你的中转站支持额度管理,可以在用户详情页给租户充值或设置固定额度。
例如客户A每月100万token,超额后自动拒绝请求。
这也能防止一个租户滥用导致所有人中断。
常见踩坑与解决
问题1:租户A使用了租户B的Key,发现也能请求
原因:默认API Key没有做严格隔离,或者你用了同一个角色且未限制IP。
解决:在创建Key时,确保勾选“绑定用户”,这样Key只能由指定用户使用;同时检查每个Key的权限范围,确认没有“超级管理员”标记。
问题2:租户能看到其他租户的对话记录或统计数据
原因:有些中转站统计页面默认展示所有数据。
解决:进入系统设置,找到“数据隔离”或“租户数据可见性”选项,选择“仅自己”或“仅所属组”。
问题3:角色修改后未生效
解决:修改角色权限后,该角色的所有用户需要重新登录或等待缓存刷新(通常1-5分钟)。
可以手动清理Redis(如果有)或重启中转站服务。
验证配置是否生效
完成以上步骤后,按以下顺序验证:
- 登录测试:用租户A的账号登录前台,确认能看到分配给它的模型,且看不到其他模型。
- API测试:使用curl测试租户A的Key:
curl https://你的中转站地址/v1/chat/completions \
-H "Authorization: Bearer sk-租户A的Key" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-4", "messages": [{"role": "user", "content": "Hello"}]}'
- 权限边界测试:故意用租户A的Key请求租户B才能调用的模型(例如claude-3),应该返回403或401。
- 额度测试:如果设置了每日额度,可以快速发送超过限制的请求,观察是否被拒绝。
如果以上测试都通过,说明多租户权限分离配置成功。
你可以将Key分发给对应用户,并告知他们各自的使用边界。
如果你在处理过程中遇到其他异常,优先回看本节避坑部分;
若仍有问题,可以检查中转站日志(通常位于 logs/ 目录)或查看官方FAQ。