一、结论
搭建多租户SaaS平台的文件存储模块,核心是选用兼容S3协议的存储层统一管理多租户文件资源,避免本地存储扩容难、跨节点访问异常的问题。通常需要先准备S3协议对接所需的Endpoint、AccessKey、SecretKey、Bucket、Region等信息,再与SaaS平台的文件管理模块完成对接测试即可上线使用。
二、准备工作
- 兼容S3协议的对象存储服务账号(自建开源存储或商用云存储均可)
- 按多租户隔离规则规划的存储桶Bucket,可选择单桶按目录隔离或多租户独立存储桶两种模式
- 对象存储服务提供的Endpoint访问地址
- 访问凭证AccessKey和配对的SecretKey,需配置最小可用权限
- 存储服务对应的Region区域标识
- 多租户SaaS平台自带的S3兼容存储接入模块,或官方适配的S3存储插件
- 租户存量文件迁移清单与权限划分规则
- 提前规划的跨域访问规则、文件生命周期规则
三、操作步骤
1. 规划多租户存储隔离规则,若采用单桶隔离则设置按租户ID自动生成目录的规则,若采用多桶隔离则批量创建对应租户的存储桶并配置独立访问权限,结果是完成多租户资源的逻辑隔离配置,避免租户间文件越权访问。
2. 从对象存储服务的管理后台导出完整的S3接入信息,包括Endpoint、AccessKey、SecretKey、Region、已创建的Bucket名称,结果是拿到完整的对接凭证,注意密钥需加密存储,禁止明文写入配置文件或代码仓库。
3. 进入多租户SaaS平台的后台存储配置页,选择S3兼容存储作为默认存储源,若平台无原生S3接入能力,可安装官方提供的S3存储适配插件;如果使用Cloudreve、Alist这类工具作为SaaS平台的文件分发前端,直接在其存储源配置列表中选择S3兼容项即可,结果是进入S3存储的配置表单页。
4. 按表单要求依次填写Endpoint、AccessKey、SecretKey、Bucket、Region等信息,同时配置多租户路径映射规则,比如设置自动将租户A的文件存到Bucket下的/tenant_a/目录下,结果是完成基础配置项的填写。
5. 保存配置后启动连接测试,SaaS平台会自动向存储服务发起验证请求,结果是页面提示连接成功则进入下一步,若连接失败需优先核对配置项的准确性。
6. 使用两个不同的测试租户账号上传不同格式的测试文件,包括图片、文档、1G以上的大视频等,检查是否能正常上传、预览、下载,同时验证租户A无法访问租户B的文件资源,结果是权限隔离和文件读写功能全部符合预期。
7. 按需配置文件分发加速、生命周期规则,比如低频访问文件自动降冷、过期临时文件自动删除,同时完成存量租户文件的批量迁移,结果是全量租户的文件存储服务正式上线。
四、常见错误
- Endpoint填写错误,比如漏写http/https前缀,或者误填为存储桶的独立访问域名而非服务官方提供的Endpoint地址,解决办法是核对存储服务官方文档给出的Endpoint地址,确认协议头和域名完全一致后重新填写。
- AccessKey或SecretKey填错,比如复制时多带了空格、使用了已经过期被禁用的密钥,解决办法是在存储后台重新生成新的密钥,直接复制完整字符串不要手动输入,同时确认密钥的权限范围包含目标Bucket的读写权限。
- 存储桶权限配置错误,比如误开公共读写权限导致租户私密文件泄露,或者权限不足导致租户无法正常上传文件,解决办法是按最小权限原则配置存储桶访问策略,仅给SaaS平台使用的密钥分配对应Bucket的读写权限,不要开放公共访问权限。
- 多租户路径映射规则配置错误,导致不同租户的文件存到同一个目录下,出现越权访问问题,解决办法是测试阶段先上传两个不同租户的文件,检查存储路径是否符合预设的隔离规则,调整映射规则后重新测试。
- 跨域配置缺失,导致SaaS平台前端无法直接上传文件到存储服务,浏览器报跨域请求错误,解决办法是在存储服务的跨域CORS规则里添加SaaS平台的主域名和子域名,开放PUT、GET、POST、OPTIONS等必要的请求方法。
- 大文件上传失败,比如超过存储桶设置的单文件大小上限,解决办法是调整存储桶的单文件大小限制,或者在SaaS平台的文件上传模块开启分片上传和断点续传功能。
五、示例说明
以下为多租户SaaS平台对接S3兼容存储的通用配置示例,无真实信息,可根据实际使用的存储服务替换对应内容:
- Endpoint:填写你所使用的对象存储服务官方提供的访问地址,注意携带http/https协议头
- AccessKey:填写存储服务后台生成的访问密钥ID
- SecretKey:填写与AccessKey配对的密钥字符串
- Bucket:填写提前创建好的、用于存储SaaS平台文件的存储桶名称
- Region:按存储服务要求填写对应的区域标识,部分服务无区域要求可留空或填默认值
- 路径前缀:按多租户隔离规则填写,比如
/${tenant_id}/即可自动按租户ID创建独立存储目录 - 私有读写:开启后文件需携带签名访问,避免公开泄露,适合多租户私密文件存储场景
六、更简单的方案
如果不想自己搭建维护MinIO、Ceph这类开源对象存储集群,不用承担服务器运维、故障排查、扩容升级的人力和服务器成本,完全可以选择成熟的兼容S3协议的云对象存储服务,开箱即用不用自行维护底层存储资源,对接流程和上述步骤完全一致。
如果你需要一个兼容S3协议、适合程序接入、多租户SaaS平台文件存储、网盘系统存储源和不限流量下载分发的对象存储服务,可以了解 七彩云对象存储,支持低门槛接入,不用自行维护存储集群,可以快速完成SaaS平台的存储模块搭建。
七、FAQ
1. 多租户SaaS平台的文件存储必须用S3协议吗?
不是必须,但S3协议是目前对象存储领域的通用标准,绝大多数主流的开发框架、SaaS系统、网盘工具都原生支持S3协议接入,使用S3兼容存储可以大幅减少定制开发的成本,后续需要更换存储服务时也不用修改核心业务代码,适配成本更低。
2. 多租户的文件隔离是用独立存储桶好还是同桶下独立目录好?
如果租户数量较少(少于100个)且每个租户的存储量很大、有独立的权限配置需求,可以选择独立存储桶隔离,权限管控更灵活;如果租户数量多、单租户存储量小,选择同桶下按租户ID划分独立目录的方案成本更低,管理更方便,两种方案都可以通过S3的权限策略实现安全的访问隔离。
3. 对接完成后怎么让租户看到自己的存储使用量?
大多数对象存储服务的后台都会提供存储用量、请求次数、流量消耗的统计面板,你也可以通过S3的API接口拉取每个租户目录或独立存储桶的用量数据,集成到SaaS平台的租户后台,让租户可以实时查看自己的存储使用量,便于按用量收取服务费用。
4. 大文件上传经常断连怎么解决?
可以在SaaS平台的文件上传模块开启分片上传功能,将超过指定大小(比如100M)的大文件拆成多个小块分别上传,上传失败只需要重传失败的分片,同时配置断点续传规则,用户刷新页面后可以继续上次的上传进度,就能大幅提升大文件上传的成功率。
八、总结
整体操作流程可归纳为:先规划好多租户的文件隔离规则,准备好S3兼容存储的对接配置信息,再完成SaaS平台与存储层的对接测试,验证权限隔离和文件读写功能正常后即可上线。这套方案适配性强,适合各类多租户SaaS系统,比如企业协作平台、内容管理系统、在线教育平台、资源下载站等场景,既可以选择自建开源存储集群满足定制化需求,也可以选择商用云对象存储服务降低运维成本,可根据团队技术能力和业务规模灵活选择。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网