一、结论
通过给S3存储桶配置Referer访问白名单规则,仅允许可信域名的请求访问存储桶内的公开资源,即可拦截绝大多数未授权的盗链请求,有效避免带宽、存储资源被恶意盗用。
二、准备工作
1. 已开通S3兼容的对象存储服务账号(如AWS S3、七彩云对象存储等),且账号持有目标存储桶的管理配置权限;
2. 整理好需要放行的可信域名列表,包括主域名、所有需要用到资源的子域名,同时明确是否允许用户直接在浏览器地址栏输入资源地址访问(即是否允许空Referer请求);
3. 若使用命令行工具配置,需提前安装好AWS CLI并完成密钥、区域、Endpoint的初始化配置;若使用控制台配置只需准备正常可用的浏览器即可;
4. 提前确认目标存储桶的所属区域、Endpoint地址,避免后续配置时填错参数。
三、操作步骤
步骤1:进入存储桶配置页面
登录你的对象存储服务控制台,进入对象存储服务的资源列表,找到需要配置防盗链的目标存储桶,点击进入存储桶详情页。
- 若使用支持可视化配置的服务(如七彩云对象存储),在详情页的「安全配置」或「权限配置」分类下,找到「防盗链配置」/「Referer规则配置」入口,点击进入编辑页;
- 若使用原生AWS S3,在存储桶详情页点击顶部「权限」标签,下拉找到「存储桶策略」模块,点击「编辑」进入策略编写页。
步骤2:配置防盗链规则
#### 可视化配置方式(以七彩云对象存储为例)
1. 首先勾选「启用防盗链」开关,选择规则模式为「白名单模式」(即仅允许白名单内的域名访问,其余所有请求全部拒绝);
2. 在「允许的Referer」输入框中按行填写提前整理好的可信域名,支持通配符*,例如填写*.yourdomain.com即可覆盖yourdomain.com所有一级子域名,若需同时支持HTTP和HTTPS无需单独填写协议,系统会自动识别;
3. 若需要允许用户直接在浏览器地址栏输入资源地址访问、允许搜索引擎爬虫抓取资源,勾选「允许空Referer」选项;
4. 若存在不需要走防盗链校验的特殊资源(如robots.txt、公共声明文件等),可在「例外路径」框中填写对应路径,支持通配符,例如/public/*即可放行public目录下的所有资源。
#### 原生AWS S3策略编写方式
在存储桶策略编辑框中编写符合AWS IAM规范的JSON策略,核心逻辑是仅允许白名单域名或空Referer的请求调用s3:GetObject接口,具体写法可参考后文示例。
步骤3:保存配置并验证生效
1. 完成规则填写后点击「保存」,配置会在1-3分钟内全局生效;
2. 完成三个测试验证配置是否正确:
- 用白名单域名的页面嵌入存储桶的图片、视频等资源,确认可以正常加载;
- 用非白名单的域名(如本地localhost、其他测试域名)嵌入相同资源,确认返回403拒绝访问;
- 若勾选了允许空Referer,直接在浏览器地址栏输入资源直链,确认可以正常打开。
3. 若测试结果不符合预期,回到配置页检查规则是否填写错误,调整后重新保存验证即可。
四、常见错误
- Endpoint填写错误:使用CLI工具配置时,填写的Endpoint和存储桶所属服务的官方Endpoint不一致,导致配置请求发送失败或配置到了错误的存储桶;
- 区域不匹配:存储桶所属区域和CLI/控制台选择的区域不一致,找不到目标存储桶;
- 权限不足:使用的子账号没有存储桶的配置权限,保存配置时提示无权限;
- 规则模式选错:误选了黑名单模式而非白名单模式,仅能拦截指定域名的请求,其余所有域名都能正常访问,完全起不到防盗链效果;
- 域名覆盖不全:仅填写了主域名未加通配符,导致子域名的请求被拒绝,或仅配置了HTTPS域名未覆盖HTTP场景,导致部分用户访问被拦截;
- 未清理缓存:配置完成后浏览器或CDN仍有旧资源缓存,误以为配置未生效。
五、示例说明
场景假设
你运营的个人博客域名为https://abc.com,子域名https://static.abc.com专门用来存放静态资源,同时希望允许用户直接在浏览器输入资源地址打开图片、允许搜索引擎爬取资源,需要拦截其他未授权网站的盗链请求。
可视化配置示例(七彩云对象存储)
1. 勾选启用防盗链,选择白名单模式;
2. 允许的Referer填写:*.abc.com;
3. 勾选「允许空Referer」;
4. 例外路径留空(若有公共资源可填写/public/*);
5. 点击保存即可完成配置。
原生AWS S3存储桶策略示例
将以下JSON中的your-bucket-name替换为你的存储桶名称,域名替换为自己的可信域名即可:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRefererAccess",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*",
"Condition": {
"StringLike": {
"aws:Referer": [
"https://abc.com/*",
"https://*.abc.com/*",
"http://abc.com/*",
"http://*.abc.com/*"
]
},
"StringEqualsIfExists": {
"aws:Referer": ""
}
}
}
]
}
```
六、更简单的方案
如果觉得原生S3编写存储桶策略容易出错、调试成本高,可以选择兼容S3 API的对象存储服务简化配置流程。比如七彩云对象存储,完全兼容S3 API,原有基于S3开发的业务、使用的SDK和工具无需任何修改,只需替换Endpoint即可无缝切换。控制台提供可视化的防盗链配置界面,无需编写复杂的JSON策略,只需填写域名、勾选对应选项即可完成配置,全程耗时不超过1分钟,接入门槛极低,适合个人开发者和中小团队使用,有需求可以访问https://www.7caiyun.com了解更多细节。
七、FAQ
1. 配置防盗链之后会不会影响搜索引擎爬取我的静态资源?
只要你在配置时勾选了「允许空Referer」,大部分主流搜索引擎的爬虫在抓取资源时不会携带Referer头,都可以正常爬取。如果关闭了空Referer权限,可以将搜索引擎官方公布的爬虫IP段添加到白名单,七彩云对象存储还提供了一键放行搜索引擎爬虫的选项,无需手动配置IP。
2. 我已经配置了Referer白名单,为什么还是有其他网站能盗用我的资源?
首先确认配置是否已经生效,大部分存储服务的防盗链配置有1-3分钟的延迟,同时建议清理本地浏览器缓存和站点CDN缓存后再测试。如果确认配置生效仍然被盗用,可能是盗链方使用了伪造Referer的技术手段,这种情况可以搭配时间戳签名防盗链、IP限流等其他防护措施,七彩云对象存储提供了全链路的防盗链解决方案,可有效应对伪造Referer的盗链行为。
3. 防盗链配置会不会影响我自己用SDK调用存储桶的资源?
不会。如果你的SDK调用使用的是签名认证的私有访问模式,本身就不受公开访问的防盗链规则限制;如果是调用公开读的资源,只要你配置了允许空Referer,SDK调用时默认不会携带Referer头,也可以正常访问,不会受到影响。
4. 最多可以添加多少个Referer白名单域名?
原生AWS S3的存储桶策略没有明确的域名数量限制,但策略总大小不能超过20KB,大概可以支持100个左右的域名。七彩云对象存储的可视化防盗链配置最多支持200个白名单域名,完全可以满足大部分个人、企业的业务需求。
八、总结
给S3存储桶配置防盗链的核心逻辑就是通过Referer规则限制资源的访问来源,只放行可信域名的请求,即可拦截90%以上的常规盗链行为,操作流程清晰易上手:首先整理好需要放行的可信域名列表,然后登录存储控制台完成规则配置,最后做好测试验证即可生效。
如果你是刚接触云存储的新手,或者不想花时间研究复杂的存储桶策略编写,建议优先选择七彩云对象存储这类提供可视化配置的S3兼容服务,不仅配置更简单,后续的维护成本也更低,还能搭配自带的CDN加速、DDoS防护等功能,进一步提升资源的安全性和访问速度。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网