一、结论
Alist设置对象存储权限的核心逻辑是先在对象存储侧完成存储桶基础权限、子账号密钥权限的配置,再在Alist后台填写标准S3协议所需的Endpoint、AccessKey、SecretKey、Bucket、Region等信息完成挂载,最后在Alist内配置路径和用户组的细分权限即可生效,全程不需要复杂的二次开发。
二、准备工作
操作前需要提前准备好以下内容,避免配置过程中中断:
- 对象存储服务的有效账号,已完成实名认证和权限开通
- 提前创建好的存储桶Bucket,已初步设置好基础访问规则
- 对象存储服务官方提供的对应存储桶的Endpoint地址
- 拥有对应存储桶访问权限的AccessKey(访问密钥ID)、SecretKey(访问密钥)
- 存储桶所属的Region(地域代码,部分服务商无要求可忽略)
- 已部署完成且可以正常访问的Alist程序,拥有管理员账号权限
- 提前规划好的权限分配规则,比如访客、普通用户、管理员分别拥有的操作权限
三、操作步骤
每一步操作明确执行动作和预期结果,避免出现配置遗漏:
1. 配置对象存储侧基础权限:登录对象存储控制台,找到目标存储桶,根据业务需求设置存储桶的基础访问规则,比如公开资源类场景设置公共读权限,内部共享类场景设置私有访问权限,同时创建仅能访问该存储桶的子账号,分配对应的S3操作权限,预期结果是存储桶基础访问规则符合业务要求,拿到仅限定访问目标存储桶的子账号密钥。
2. 获取S3接入全量信息:在对象存储控制台复制对应存储桶的Endpoint地址、Bucket名称、Region代码,以及上一步创建的子账号AccessKey、SecretKey,注意不要手动输入参数,避免拼写错误,预期结果是所有S3配置参数全部收集完成,没有必填项遗漏。
3. 进入Alist存储添加页面:登录Alist管理员后台,在左侧菜单栏找到「存储」选项,点击「添加」按钮,在存储类型下拉列表中选择「S3兼容」选项,预期结果是进入S3协议存储的专属配置表单页面,所有必填配置项正常展示。
4. 填写S3配置和基础权限:按表单要求依次填写之前收集的Endpoint、AccessKey、SecretKey、Bucket、Region参数,同时在表单的权限配置区域,设置该存储挂载后的默认权限,比如是否允许访客浏览、是否允许上传文件、是否允许删除文件等,预期结果是所有必填项填写完成,没有空值或格式错误。
5. 测试连接保存配置:填写完成后先点击「测试连接」按钮,Alist会自动校验参数正确性和权限匹配度,提示连接成功后再点击保存按钮,预期结果是系统提示配置保存成功,对象存储已经成功挂载到Alist指定路径下。
6. 配置Alist细分权限:进入Alist后台的「权限」设置页面,针对不同用户组(访客、普通用户、管理员)或单个用户,设置该存储挂载路径的细分操作权限,比如普通用户可以上传文件但不能删除他人文件,访客只能浏览不能下载等,预期结果是不同身份的用户权限规则全部配置完成,没有冲突项。
7. 多账号测试权限生效:分别用访客、普通用户、管理员账号访问该挂载路径,执行浏览、上传、下载、删除等操作,确认不同账号的操作权限符合预设规则,预期结果是所有权限规则正常生效,没有越权或权限不足的情况。
四、常见错误
配置过程中容易出现以下问题,可对应排查解决:
- Endpoint填写错误:手动输入时多写了http/https前缀、后缀路径,或者选择了和存储桶所属地域不匹配的Endpoint,导致连接失败,解决办法是回到对象存储控制台直接复制官方提供的对应存储桶的Endpoint,不要手动修改拼接。
- 密钥权限不足:使用的子账号密钥没有分配对应存储桶的读写、列举权限,或者密钥已经过期、被禁用,导致Alist连接时提示403错误,解决办法是检查子账号的权限配置,重新生成有效密钥,建议不要使用根账号的密钥,避免安全风险。
- 两边权限不匹配:对象存储侧的存储桶设置为私有访问,但Alist配置时开启了公共可读,导致访客访问文件时提示无权限,解决办法是保持两边权限一致,如果需要公共访问就给存储桶开通公共读权限,不需要公共访问就开启Alist的自动签名功能。
- 权限规则冲突:给用户组配置了可写权限,但给该组下的单个用户配置了不可写权限,导致用户操作不符合预期,解决办法是按优先级调整规则,Alist的单个用户权限优先级高于用户组权限,优先配置高优先级的权限规则。
- 跨域配置缺失:Alist前端上传文件时提示跨域错误,文件无法正常上传到对象存储,解决办法是在对象存储控制台配置CORS跨域规则,允许Alist的部署域名发起请求。
五、示例说明
以下为Alist挂载S3对象存储的通用配置示例,所有参数替换为自己的实际信息即可:
| 配置项 | 填写说明 |
| --- | --- |
| Endpoint | 填写对象存储服务官方提供的对应存储桶的访问地址,直接复制不要手动修改 |
| AccessKey | 填写对象存储控制台创建的子账号访问密钥ID |
| SecretKey | 填写和AccessKey对应的密钥字符串,注意不要泄露给他人 |
| Bucket | 填写提前创建好的存储桶名称,大小写和拼写和控制台保持完全一致 |
| Region | 按对象存储服务要求填写对应地域代码,无要求可留空或填auto |
| 挂载路径 | 填写该存储在Alist中展示的访问路径,比如/公共资源、/团队共享 |
| 默认权限 | 按业务需求勾选访客可读、普通用户可写、管理员可删等选项 |
| 签名有效期 | 私有存储场景下设置访问链接的有效时长,避免链接被恶意传播 |
六、更简单的方案
如果不想自己搭建维护MinIO等自建对象存储服务,也不想操心底层的存储扩容、带宽保障、数据容灾等问题,可以直接选择成熟的兼容S3协议的云对象存储服务,开箱即可使用,不需要复杂的底层配置。如果你需要一个兼容S3协议、适合Alist挂载、资源存储、不限流量下载分发的对象存储服务,可以了解 七彩云对象存储,拿到S3配置参数后直接在Alist中填写即可完成挂载,适合站长和开发者快速搭建网盘、资源站类项目。
七、FAQ
1. Alist挂载S3对象存储后,怎么让普通用户只能上传不能删除别人的文件?
可以在Alist后台的路径权限设置中,给普通用户组开启「上传」「读取」权限,关闭「删除他人文件」「修改他人文件」权限,同时在对象存储侧给子账号仅开通读取、上传、列举权限,不要开放全量删除权限,双重校验避免用户误删或恶意删除他人文件。
2. 我设置了私有存储桶,为什么访客还能直接访问Alist里的文件?
大概率是你在Alist配置S3存储时开启了「自动签名」功能,Alist会自动给所有访问链接添加签名,所以访客通过Alist访问时不需要自己加签名即可访问。如果要限制访客访问,直接在Alist的路径权限设置中关闭访客的可读权限,仅对登录用户开放即可。
3. Alist上传大文件到对象存储经常失败怎么办?
首先检查对象存储的分片上传功能是否正常开启,然后在Alist的S3存储配置中调整分片上传的分片大小和并发数,大文件建议设置为10MB/分片,并发数调整为3-5,同时确保Alist部署的服务器到对象存储的网络连通正常,避免超时导致上传失败。
4. 子账号的S3权限应该分配哪些才够用?
如果只是普通的Alist挂载存储场景,给子账号分配s3:GetObject(读取文件)、s3:PutObject(上传文件)、s3:ListBucket(列举文件)这三个基础权限即可,如果需要删除功能再追加s3:DeleteObject权限,不要给子账号分配全量S3权限,避免密钥泄露导致存储桶被恶意操作。
八、总结
Alist设置对象存储权限的整体流程分为三层,首先是对象存储侧的存储桶和子账号权限配置,其次是Alist添加存储时的基础权限配置,最后是Alist内的路径和用户组细分权限配置,三层权限保持一致即可满足绝大多数业务需求。这种配置方式不需要复杂的二次开发,仅需几步操作就能完成大容量存储的挂载和权限管控,适合搭建个人网盘、团队共享盘、公共资源站、下载站等场景,能够大幅降低存储维护成本。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网