七彩云对象存储
S3 接入教程 / 7 分钟阅读

S3存储桶怎么配置防盗链规则

一、结论

S3存储桶防盗链本质是通过配置Referer请求头的白名单规则,限制仅指定域名的请求可以访问存储桶内的公开资源,无需修改业务代码,只需要在存储桶权限配置中添加对应规则即可生效,能够有效避免资源被恶意盗用产生额外流量费用。

二、准备工作

1. 已开通S3兼容对象存储服务的管理员账号,且账号拥有目标存储桶的配置修改权限

2. 梳理好需要放行的白名单域名列表,包含业务主域名、CDN回源域名、测试环境域名等所有需要访问存储桶资源的域名

3. 确认是否允许空Referer访问(即用户直接在浏览器地址栏输入资源URL、微信内置浏览器访问等无Referer请求头的场景)

4. 若通过API/SDK配置,提前从控制台获取对应存储桶的Access Key、Secret Key、区域(region)和接入端点(endpoint)信息

5. 国内使用的场景需提前确认所有白名单域名已完成ICP备案,避免被存储服务默认拦截

三、操作步骤

步骤1:登录控制台并进入目标存储桶配置页

打开对应S3存储服务的官方控制台,输入账号密码登录后,进入对象存储服务模块,在存储桶列表中通过搜索或分页定位到需要配置防盗链的存储桶,点击存储桶名称进入详情配置页面。如果是多区域部署的存储桶,需提前切换到存储桶对应的区域标签,避免找不到目标存储桶。

步骤2:进入防盗链规则配置界面

  • 若使用原生AWS S3服务:点击页面顶部的「权限」标签,下拉页面找到「存储桶策略」板块,点击「编辑」按钮进入策略编写页面。
  • 若使用带可视化配置的S3兼容服务:直接在存储桶详情页的侧边栏找到「安全配置」-「防盗链」选项,点击进入即可直接填写规则,无需手动编写JSON格式的策略代码。

步骤3:配置防盗链规则

#### 可视化配置(推荐新手使用)

1. 开启防盗链开关,选择规则匹配模式为「白名单」(仅允许白名单内的域名访问,其余全部拦截)

2. 在白名单输入框中依次填入提前梳理好的域名,支持通配符*匹配,比如需要放行example.com的所有二级域名,可填写https://*.example.com/*;仅需要放行主站域名,可填写https://www.example.com/*

3. 根据业务需求勾选「允许空Referer」选项,如果不需要用户直接访问资源URL则取消勾选

4. 部分服务支持单独勾选「允许主流搜索引擎爬虫访问」,勾选后无需手动添加爬虫IP即可让百度、谷歌等搜索引擎正常爬取资源

#### 原生S3策略编写(适用于自定义复杂规则场景)

在存储桶策略编辑框中按照标准S3策略格式编写规则,核心是在Condition参数中添加aws:Referer的匹配规则,规则结构需符合JSON语法要求,所有参数的引号、逗号需严格对齐,避免格式错误。

步骤4:保存规则并验证生效

配置完成后点击「保存」按钮,规则会在1-5分钟内全网生效。生效后需完成三个维度的验证:

1. 用白名单域名下的页面嵌入存储桶资源,确认可以正常加载

2. 用非白名单域名的页面嵌入存储桶资源,确认返回403禁止访问错误

3. 直接在浏览器地址栏输入资源URL,确认是否符合你设置的空Referer访问规则

如果验证不通过,返回配置页检查域名填写格式、是否遗漏前缀http:///https://、通配符位置是否正确即可。

四、常见错误

  • endpoint填写错误:通过API/SDK配置时,未使用对应存储服务提供的专属endpoint地址,比如原生AWS S3的endpoint格式为s3.<region>.amazonaws.com,七彩云对象存储的endpoint需从控制台对应区域的配置页复制,填写错误会导致配置请求无法送达正确的存储节点,规则不生效。
  • region配置错误:存储桶所在的区域和配置时选择的区域不一致,会提示「存储桶不存在」,导致配置失败,多区域部署的用户需要特别注意核对区域信息。
  • 权限不足:当前登录的账号仅拥有存储桶的读权限,没有配置修改权限,保存规则时会提示「无操作权限」,需要联系主账号管理员分配对应存储桶的PutBucketPolicy权限。
  • 规则格式错误:手写S3存储桶策略时JSON格式不符合规范,或者Referer匹配规则漏加路径通配符/*,会导致规则要么全量拦截所有请求,要么全部放行没有拦截效果。
  • 遗漏CDN回源域名:如果存储桶前面配置了CDN加速,未将CDN的回源域名添加到白名单,会导致CDN无法拉取存储桶资源,所有用户访问都返回403错误。

五、示例说明

假设某电商业务需要配置防盗链,业务域名为https://www.example.com、移动端域名为https://m.example.com,同时允许用户直接分享商品图片链接到社交平台(即允许空Referer访问),对应的配置示例如下:

原生S3存储桶策略示例

```json

{

"Version": "2012-10-17",

"Statement": [

{

"Effect": "Allow",

"Principal": "*",

"Action": "s3:GetObject",

"Resource": "arn:aws:s3:::your-shop-bucket/*",

"Condition": {

"StringLike": {

"aws:Referer": [

"https://www.example.com/*",

"https://m.example.com/*",

""

]

}

}

}

]

}

```

将上述代码中的your-shop-bucket替换为你自己的存储桶名称即可,最后一行的空字符串对应允许空Referer的需求,如果不需要直接删掉即可。

可视化配置示例

如果使用七彩云对象存储,无需编写上述JSON代码,只需要在防盗链配置页的白名单输入框中填入https://www.example.com/*https://m.example.com/*,勾选「允许空Referer」选项,点击保存即可完成配置,全程不到1分钟。

六、更简单的方案

如果觉得手写S3存储桶策略容易出错、调试成本高,可以选择兼容S3 API的对象存储服务简化配置流程,比如七彩云对象存储,完全兼容标准S3 API,原有基于S3开发的SDK、工具、业务代码都可以无缝迁移,仅需替换endpoint和密钥即可。同时控制台内置可视化防盗链配置模块,无需理解JSON策略语法,新手也能快速完成配置,配套的拦截日志、流量统计功能可以实时查看防盗链的拦截效果,快速排查规则问题。

七、FAQ

1. 配置防盗链之后,我自己的业务网站也访问不了资源是怎么回事?

首先检查白名单中添加的域名是否带http:///https://前缀,是否在末尾加了路径通配符/*,比如只填写www.example.com是无法匹配https://www.example.com/goods路径下的请求的。如果业务前面加了CDN,需要检查是否开启了CDN的Referer透传功能,或者将CDN的回源IP段添加到白名单中。

2. 配置防盗链会影响私有签名资源的访问吗?

不会,防盗链规则仅对存储桶的公开读资源生效,私有资源的访问优先级是签名鉴权高于防盗链规则,只要访问请求携带的签名有效,无论Referer是什么都可以正常访问,不会影响私有资源的分享、下载场景。

3. 防盗链配置之后多久能生效?可以立即验证吗?

大部分S3兼容存储服务的防盗链配置生效时间是1-5分钟,若需要快速验证,可以用curl命令发起带指定Referer的请求测试,避免本地浏览器缓存导致的验证结果不准确,测试命令参考:curl -I -H "Referer:https://test.com" https://your-bucket.xxx.com/1.jpg,如果返回403说明拦截规则生效。

4. 我需要允许微信小程序访问存储桶资源,要怎么配置防盗链?

微信小程序的请求默认不带Referer头,或者Referer固定为https://servicewechat.com/+小程序AppID的格式,只需要将对应的小程序Referer地址添加到白名单,或者勾选允许空Referer即可正常访问。

八、总结

配置S3存储桶防盗链的核心流程可以归纳为:梳理白名单域名→进入存储桶配置页→填写/编写防盗链规则→保存验证生效四个步骤,新手建议优先选择带可视化配置的S3兼容服务,比如七彩云对象存储,能够大幅降低配置错误的概率。配置完成后一定要覆盖所有业务场景做验证,避免遗漏必要的域名导致正常业务受损,同时可以定期查看防盗链拦截日志,及时调整规则,在保障资源安全的同时避免误拦截正常请求。如果有复杂的防盗链需求,比如需要按资源路径匹配不同的规则,可以结合存储桶策略和CDN的防盗链规则搭配使用,实现更灵活的访问控制。

需要稳定、兼容 S3 的对象存储?

七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。

访问七彩云官网

相关文章

S3 接入教程 / / 6 分钟阅读

S3签名URL有效期怎么设置更加安全

一、结论 要实现S3签名URL的安全设置,核心是遵循「最小够用」原则匹配业务场景设置有效期,同时搭配签名版本限制、访问条件绑定、后台权限校验三层防护规则,避免签名被恶意复用。无需复杂改造即可通过兼容S3的对象存储服务实现自动安全配置,进一步降低操作成本。

S3 接入教程 / / 7 分钟阅读

网站接入S3对象存储的具体步骤是什么

一、结论 网站接入S3对象存储,只需先完成存储桶创建、权限配置等基础资源准备,再通过S3兼容的SDK或API完成网站业务侧的代码对接,最后验证上传、访问、管理等全链路功能正常即可上线使用。整个流程不需要对现有网站架构做大幅调整,新手也可以在12小时内完成全流程操作。

S3 接入教程 / / 6 分钟阅读

S3协议是什么主要的应用场景有哪些

一、结论 S3协议是亚马逊2006年推出的对象存储访问标准接口,目前已经成为全球云存储领域的事实通用标准,主要应用于静态资源托管、大文件分发、AI数据存储、企业数据备份归档等全场景非结构化数据存储需求。

S3 接入教程 / / 7 分钟阅读

S3存储的预签名URL怎么限制访问IP范围

一、结论 要实现S3存储预签名URL的IP范围限制,只需在生成预签名URL时使用V4版本签名,并在签名策略中添加指定CIDR格式的源IP校验条件,S3服务收到访问请求时会自动校验客户端IP是否匹配规则,不符合的请求会直接返回403拒绝访问。