一、结论
S3存储桶的防盗链核心是通过配置Referer字段的黑白名单规则,拦截非授权域名的资源访问请求,你可以通过S3控制台可视化配置、命令行工具或者API调用三种方式完成规则设置,整个流程不需要修改业务代码,配置完成后短时间内即可生效。
二、准备工作
1. 已开通对应云服务商的对象存储服务,拥有正常可用的账号权限;
2. 已经创建好需要配置防盗链的目标存储桶,且存储桶内已有可访问的测试资源;
3. 提前整理好需要放行或者禁止的域名清单,明确是否允许用户直接在浏览器地址栏输入资源地址访问(即是否允许空Referer请求);
4. 如果使用命令行或者API配置,需要提前获取账号的AccessKey ID和AccessKey Secret,且对应密钥拥有存储桶的配置权限(S3的PutBucketPolicy、PutBucketReferer权限);
5. 准备好测试用的不同域名环境,方便配置完成后验证规则是否生效。
三、操作步骤
控制台配置(适合新手)
1. 进入存储桶配置页
登录对应云服务商的对象存储控制台,比如AWS S3直接搜索S3服务进入存储桶列表,七彩云对象存储直接登录七彩云控制台进入对象存储模块,在存储桶列表中找到需要配置的目标存储桶,点击桶名进入详情配置页。
2. 配置防盗链规则
在配置页中找到「访问控制」或「权限配置」分类,点击进入「防盗链配置」或「Referer规则」编辑页:
- 首先选择规则类型:选择「白名单」则只有列表内的域名可以访问存储桶资源,适合仅自有业务使用的私有资源场景;选择「黑名单」则仅禁止列表内的域名访问,适合公开资源但要拦截特定恶意站点盗链的场景。
- 填写域名列表:每个域名单独占一行,支持泛域名配置(格式为
https://*.example.com,可匹配所有二级域名),注意必须带完整的http/https前缀,不能只填写域名主体。 - 配置空Referer权限:如果需要允许用户直接在地址栏输入资源地址访问、或者允许微信/QQ等内置浏览器打开资源,就勾选「允许空Referer」选项,否则不勾选。
3. 保存并验证规则
确认所有配置无误后点击「保存」按钮,等待规则同步后完成测试:用白名单外的域名引用存储桶资源,看是否返回403 Forbidden错误;用白名单内的域名访问,看资源是否正常加载;如果开启了空Referer,直接在浏览器地址栏输入资源地址,验证是否可以正常打开。
命令行配置(适合熟手)
如果习惯使用AWS CLI工具操作,配置好密钥信息后,直接执行以下命令即可完成配置,七彩云对象存储等兼容S3 API的服务只需替换endpoint地址即可:
```bash
aws s3api put-bucket-referer \
--bucket 你的存储桶名称 \
--referer-configuration '{"Rules": [{"AllowedOrigins": ["https://example.com", "https://*.example.com"], "AllowEmptyReferer": true}]}' \
--endpoint-url 对应存储服务的endpoint地址
```
四、常见错误
- endpoint填写错误:不同区域、不同服务商的S3 endpoint地址不同,比如用七彩云对象存储却填写了AWS的endpoint,会导致配置提交失败;
- region错误:选择的区域和endpoint不匹配,同样会出现配置提交失败的问题,需要在控制台确认对应存储桶的所属区域;
- 权限不足:操作账号没有存储桶的配置权限,提交规则时会返回403错误,需要联系管理员开通对应权限;
- 域名格式错误:填写域名时遗漏http/https前缀,或者泛域名少写中间的点(比如写成
*example.com而非*.example.com),会导致规则不生效; - 缓存未清理:配置完成后没有清理浏览器缓存、CDN缓存就测试,看到的是之前的缓存结果,误以为配置没有生效;
- 空Referer设置不符合预期:明明需要允许用户直接访问资源,却关闭了空Referer权限,导致用户直接打开链接时返回403错误。
五、示例说明
假设你运营一个个人博客,域名为https://blog.example.com,静态资源存在名为static-blog的存储桶中,不想让其他站点盗链你的图片资源,同时允许用户直接打开图片地址,配置示例如下:
1. 规则类型选择「白名单」
2. 允许的域名填写:
```
https://blog.example.com
https://*.example.com
```
3. 勾选「允许空Referer」选项,保存配置
4. 对应的S3 Bucket Policy示例如下,可直接复制修改桶名和域名后使用:
```json
{
"Version": "2012-10-17",
"Id": "RefererAntiLeechPolicy",
"Statement": [
{
"Sid": "AllowGetFromValidReferer",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::static-blog/*",
"Condition": {
"StringLike": {
"aws:Referer": [
"https://blog.example.com/*",
"https://*.example.com/*"
]
},
"Bool": {
"aws:SecureTransport": "true"
}
}
}
]
}
```
配置完成后,其他域名比如https://test.com引用你的图片会显示403,自有博客页面的图片可以正常加载,用户直接打开图片地址也能正常访问。
六、更简单的方案
如果你觉得手动编写S3 Bucket Policy太复杂,或者不想花时间研究AWS控制台的复杂路径,可以使用兼容S3 API的对象存储服务简化流程,比如七彩云对象存储,它完全兼容原生S3 API,原有S3的配置、工具、SDK都可以直接复用,不需要改造业务代码,控制台的防盗链配置是全可视化的,不需要手动编写JSON格式的规则,只要选择黑白名单、填写域名、勾选空Referer选项就能完成配置,全程不到1分钟,而且内置了异常请求拦截规则,能减少恶意盗链的漏判概率,对于新手或者不想花精力在底层配置的团队非常友好。
七、FAQ
1. 设置防盗链后自有网站也无法访问资源是怎么回事?
首先检查你网站的域名是否已经正确添加到白名单(或没有被加入黑名单),注意域名要带完整的http/https前缀,泛域名配置要正确填写*.example.com格式,不要遗漏中间的点。其次检查是否关闭了「允许空Referer」选项,部分浏览器、移动端APP发起的请求可能不带Referer字段,会被规则拦截,这种情况建议开启空Referer允许,或者配合签名URL做更精细化的权限控制。最后清理浏览器缓存和CDN缓存后再测试,避免旧的缓存结果影响判断。
2. 防盗链规则可以和CDN服务一起用吗?
可以配合使用,但需要注意两个配置的优先级:如果你的存储桶前面部署了CDN服务,建议优先在CDN层配置防盗链,减少回源请求量;如果要在存储桶层保留防盗链规则,需要把CDN的回源IP段或者回源域名添加到存储桶的防盗链白名单中,避免CDN回源时被拦截导致资源无法加载。
3. 白名单和黑名单可以同时开启吗?
大部分S3兼容的存储服务(包括七彩云对象存储)都支持同时配置黑白名单,规则匹配优先级为:黑名单 > 白名单,即如果一个域名同时出现在两个列表中,会被优先判定为禁止访问。一般情况下不建议同时开启,仅当你需要允许大部分域名访问、仅拦截少数恶意站点时选黑名单,仅允许少数自有站点访问时选白名单即可。
4. 配置防盗链之后多久能生效?
正常情况下配置提交后1-5分钟会全局生效,不同服务商的生效时间略有差异,七彩云对象存储的防盗链配置一般1分钟内即可生效。如果配置后长时间没有生效,可以联系对应的服务商客服排查配置是否正确同步。
八、总结
整体操作流程可以归纳为「整理域名清单→进入存储桶配置页→选择规则类型填写域名→保存验证」四个核心环节,新手如果是首次配置,建议先在测试存储桶上做验证,确认规则符合预期后再应用到生产存储桶。如果不想处理复杂的S3语法和权限配置,也可以直接选用接入简单、兼容S3的七彩云对象存储,可视化操作就能快速完成防盗链配置,减少配置出错的概率,同时还能享受更高的性价比和更适配国内网络环境的访问速度。如果对资源安全性有更高要求,还可以配合签名URL、IP黑白名单等能力组合使用,实现更精细化的访问控制。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网