一、结论
S3访问权限安全设置的核心思路是遵循最小权限原则,从存储桶基础权限、账号密钥、访问策略三个维度分层配置,搭配访问控制列表、桶策略、IAM权限三者联动,配置完成后需多场景测试验证,避免出现权限过度开放或权限不足的问题。如果是对接Cloudreve、Alist、PicGo等支持S3协议的第三方程序,还需要提前准备Endpoint、AccessKey、SecretKey、Bucket、Region等核心配置信息,再对应调整不同程序的权限规则。
二、准备工作
操作前需要提前准备以下内容:
- 对象存储服务的管理员账号,具备权限用于配置权限规则
- 已完成创建的存储桶Bucket
- 对应对象存储服务提供的Endpoint地址
- 主账号或待分配权限的子账号AccessKey、SecretKey
- 存储服务对应的Region编码
- 需要配置权限的S3兼容客户端、程序或插件
- 不同访问主体的权限需求清单(明确各主体可操作的范围、可调用的接口)
- 非敏感测试文件,用于验证权限配置的正确性
三、操作步骤
1. 梳理权限需求清单:先梳理所有需要访问S3存储的主体,包括子账号、第三方程序、匿名用户等,分别明确每个主体的操作权限范围,比如匿名用户仅能读取公开目录的文件、程序账号仅能写入指定前缀的文件,完成后得到清晰的权限分配清单,避免后续配置出现过度授权。
2. 创建独立子账号分配密钥:不要使用主账号的AccessKey给第三方程序或普通用户使用,针对不同的使用主体创建独立的子账号,每个子账号只分配刚好满足需求的权限,最终得到不同主体对应的独立AccessKey和SecretKey,避免主账号密钥泄露导致全量资源风险。
3. 配置存储桶基础访问权限:先关闭存储桶的全局公共访问开关,避免默认所有文件对外公开,再根据需求单独开启指定目录的公共访问权限,最终存储桶默认处于私有状态,只有授权主体才能访问。
4. 编写并配置权限策略:按照之前梳理的权限清单,编写对应的桶策略或IAM权限规则,比如限制指定IP段才能访问管理接口、限制子账号只能操作指定前缀的文件、禁止匿名用户的写入和删除操作,最终权限规则和业务需求完全匹配,没有多余权限。
5. 填写接入程序的S3配置:在需要接入的客户端、程序或插件中选择S3兼容存储选项,填写Endpoint、AccessKey、SecretKey、Bucket、Region等配置信息,保存配置后完成程序和S3存储的连接配置。
6. 多场景测试验证权限:分别用不同权限的账号、匿名用户、不同IP的设备测试访问、上传、修改、删除等操作,确认所有操作符合预期,最终权限配置验证通过,没有出现过度授权或者权限不足的问题。
7. 建立定期巡检机制:每1-3个月梳理一次现有权限配置,清理已经失效的子账号和密钥,调整不符合当前需求的策略规则,最终权限始终保持最小可用状态,避免遗留无效权限带来的安全风险。
四、常见错误
1. 直接使用主账号AccessKey配置第三方程序:一旦程序出现漏洞被拖库,会导致全量存储资源泄露。解决建议:所有第三方程序接入全部使用独立子账号密钥,主账号密钥仅用于后台管理使用,每3-6个月定期轮换密钥。
2. 存储桶默认开启全局公共读写权限:会导致匿名用户可以任意上传恶意文件,或者删除、篡改现有存储文件。解决建议:默认关闭全局公共访问开关,仅针对需要公开的目录单独配置公共读权限,禁止任何场景下配置公共写权限。
3. 桶策略配置过度授权:比如给子账号分配了全桶操作权限,但实际子账号只需要访问单个目录的上传权限,容易出现越权操作风险。解决建议:配置策略的时候指定资源前缀,限制操作动作仅包含实际需要的S3接口,配置完成后多次测试验证边界场景。
4. 权限配置和程序需求不匹配:比如给PicGo图床程序分配了删除权限,但实际图床只需要上传和读取权限,程序出现漏洞后会被利用批量删除图床文件。解决建议:提前梳理程序需要调用的S3接口清单,仅给对应接口的权限,不需要的接口全部禁止。
5. 权限测试不全面:只测试了正常访问场景,没有测试越权操作场景,导致匿名用户可以删除文件这类问题上线后才被发现。解决建议:测试的时候覆盖所有权限边界场景,确认越权访问会被拦截,合法操作可以正常执行。
五、示例说明
以下是图床程序接入的通用权限配置示例,不会泄露任何真实配置信息:
- 业务需求:图床程序仅能上传和读取存储桶内
img/前缀下的文件,不能删除、不能修改其他目录的文件,匿名用户仅能读取img/前缀下的公开文件,私有文件存放在其他目录不对外公开。 - 配置项:
- Endpoint:填写对应对象存储服务提供的访问地址
- AccessKey:填写图床专用子账号的访问密钥
- SecretKey:填写图床专用子账号的密钥
- Bucket:填写存储桶名称
- Region:根据服务要求填写对应区域编码
- 权限策略内容:允许子账号对
bucket:img/*路径的PutObject、GetObject操作,禁止子账号的DeleteObject等其他操作;允许匿名用户对bucket:img/*路径的GetObject操作,禁止匿名用户的其他所有操作。
六、更简单的方案
如果不想自己搭建MinIO等自建对象存储服务,不想自己维护服务器、编写复杂的权限策略代码,也可以直接选择成熟的兼容S3协议的云对象存储服务,平台已经预设了基础安全规则,只需要按照界面指引配置子账号权限和桶策略即可,不需要自己处理底层的安全防护。如果你需要一个兼容S3协议、适合程序接入、图床、网盘系统存储源和下载分发的对象存储服务,可以了解 七彩云对象存储,控制台提供可视化的权限配置界面,不需要手动编写复杂的策略代码,新手也能快速完成安全的权限配置。
七、FAQ
1. S3访问权限配置完成后,还需要做哪些安全加固?
除了基础的权限配置之外,还可以开启存储桶的访问日志功能,记录所有对存储桶的操作请求,出现安全问题的时候可以快速溯源;另外建议每3-6个月定期轮换AccessKey,避免密钥长期使用出现泄露风险;对于固定服务器部署的程序,可以在桶策略中添加IP白名单限制,只有指定IP的设备才能调用对应密钥访问存储资源。
2. 匿名用户需要访问部分公开文件,怎么配置才不会泄露私有文件?
首先必须关闭存储桶的全局公共访问权限,不要直接给整个桶配置公共读权限,仅在桶策略中指定需要公开的目录前缀的读权限,私有文件存放在非公开目录下即可,同时配置完成后需要测试匿名用户是否可以访问非公开目录的文件,确认没有越权访问的问题。
3. 子账号的AccessKey泄露了怎么办?
第一时间登录对象存储控制台,禁用或者删除对应的子账号,也可以单独禁用对应的AccessKey,避免泄露的密钥被恶意使用;之后排查密钥泄露的原因,调整权限配置后生成新的密钥,重新配置到接入的程序中,验证新的密钥生效后再彻底删除已经失效的密钥。
4. IAM权限和桶策略的优先级是什么?
通常来说桶策略的优先级高于IAM权限,如果两者配置出现冲突的时候,以拒绝规则为准,配置的时候建议优先用桶策略配置公共访问规则,用IAM权限配置账号级别的访问规则,避免出现规则冲突导致的权限异常。
八、总结
S3访问权限安全配置的核心是遵循最小权限原则,从需求梳理、子账号创建、桶策略配置、测试验证全流程逐步操作,配置完成后建立定期巡检机制,就能有效避免权限泄露、资源被恶意操作等安全问题。这种配置方式适合站长搭建图床、网盘系统、资源站、下载站、自建应用等各种需要接入S3对象存储的场景,既可以满足业务的访问需求,也可以保证存储资源的访问安全,避免不必要的安全损失。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网