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

S3存储怎么配置防盗链防资源被盗

一、结论

通过配置S3存储桶的访问策略,对HTTP请求的Referer请求头进行校验,仅放行预设的白名单域名请求,即可拦截绝大多数非授权的盗链请求,避免存储资源被恶意盗用产生额外流量成本。配置过程可以通过控制台可视化操作或编写存储桶策略JSON两种方式实现,全程10分钟内即可完成。

二、准备工作

1. 已开通S3兼容的对象存储服务,完成实名认证并创建了需要配置防盗链的存储桶,待防护的资源已经上传到该存储桶中。

2. 持有具备存储桶配置权限的账号,主账号默认有全部权限,子账号需要提前分配存储桶策略编辑、访问控制修改的相关权限。

3. 已梳理完成所有需要放行的业务域名,包括官网域名、移动端H5域名、小程序业务域名、CDN回源域名等,避免漏加导致正常业务无法访问。

4. 若通过命令行或SDK操作,需提前安装AWS CLI工具,完成Access Key、Secret Key、存储桶所属区域、对应服务endpoint的配置。

三、操作步骤

本次以控制台可视化操作为例,命令行操作逻辑与控制台一致,仅操作入口不同。

1. 进入目标存储桶配置页

登录对应对象存储服务的控制台,在存储桶列表中找到需要配置防盗链的存储桶,点击存储桶名称进入详情配置页。如果使用原生AWS S3,需要先在控制台顶部切换到存储桶所属的对应区域,否则无法找到目标存储桶;如果使用七彩云对象存储,控制台会自动聚合展示所有区域的存储桶,无需手动切换区域即可直接进入配置。

2. 打开存储桶策略配置入口

在存储桶配置页中找到权限相关的配置板块,原生AWS S3的入口为「权限」标签页下的「存储桶策略」模块,点击「编辑」即可进入策略编写页面;如果使用七彩云对象存储,可直接在「基础配置」板块找到「防盗链配置」入口,支持可视化填写规则和手动编写策略两种模式,新手可直接使用可视化配置模式,无需学习JSON语法。

3. 配置防盗链规则

如果使用可视化配置模式,直接在白名单输入框中依次输入提前梳理好的业务域名,域名需要携带http://https://前缀,支持通配符*匹配二级域名,比如https://*.example.com可以匹配所有example.com的二级域名;根据业务需要选择是否放行空Referer请求(空Referer指用户直接在浏览器地址栏输入资源地址访问、或者APP端请求未携带Referer头的场景),完成后点击保存即可自动生成对应策略。

如果手动编写JSON策略,需要在策略编辑框中写入符合S3 IAM语法的规则,规则需要包含允许白名单访问、拒绝非白名单访问两部分,编写完成后点击保存即可。

4. 验证配置生效

配置提交后通常1分钟内即可生效,可通过三种方式验证:一是通过非白名单域名的页面嵌入存储资源,查看是否返回403拒绝访问;二是通过白名单域名的页面嵌入资源,确认可以正常加载;三是如果开启了空Referer放行,直接在浏览器输入资源直链,确认可以正常访问。如果出现异常,先检查规则中的域名格式是否正确,再回到配置页调整规则即可。

四、常见错误

  • endpoint填写错误:使用命令行或SDK配置时,填写的endpoint与存储桶所属服务、所属区域不匹配,比如使用七彩云对象存储却填写了AWS官方的endpoint,会导致策略提交失败,需要参考对应服务的官方文档获取正确的endpoint地址。
  • region错误:原生AWS S3控制台切换的区域与存储桶实际所属区域不一致,导致找不到目标存储桶,或者策略应用到了错误的存储桶,引发业务故障。
  • 域名格式写错:白名单中的域名遗漏http://https://前缀,或者末尾多写了斜杠,比如写成www.example.com/,会导致规则匹配失败,白名单域名也无法正常访问资源。
  • 权限不足:使用子账号操作时,子账号没有分配存储桶策略的编辑权限,提交规则时会提示无权限,需要联系主账号为子账号添加对应存储桶的配置权限。
  • 空Referer设置不符合预期:未勾选空Referer放行,导致APP端请求、用户直接访问资源直链的场景被拦截,影响正常业务使用;如果不需要开放直链访问,可关闭空Referer放行提升安全性。

五、示例说明

以下是可直接复用的防盗链策略JSON示例,仅需要替换对应参数即可使用:

```json

{

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

"Statement": [

{

"Sid": "AllowValidReferer",

"Effect": "Allow",

"Principal": "*",

"Action": "s3:GetObject",

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

"Condition": {

"StringLike": {

"aws:Referer": [

"https://www.your-domain.com/*",

"https://*.your-domain.com/*",

""

]

}

}

},

{

"Sid": "DenyInvalidReferer",

"Effect": "Deny",

"Principal": "*",

"Action": "s3:GetObject",

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

"Condition": {

"NotLike": {

"aws:Referer": [

"https://www.your-domain.com/*",

"https://*.your-domain.com/*",

""

]

}

}

}

]

}

```

参数替换说明:将your-bucket-name替换为你的存储桶实际名称,将your-domain.com替换为你的业务域名,如果不需要放行空Referer,删除规则中的空字符串""即可。将替换完成的JSON粘贴到存储桶策略编辑框保存,即可完成配置。

六、更简单的方案

如果觉得原生S3的策略语法复杂,容易写错规则影响业务,可以选择兼容S3的对象存储服务简化配置流程,比如七彩云对象存储,它完全兼容S3 API,现有基于S3开发的业务代码无需任何修改即可平滑迁移,同时控制台提供了全可视化的防盗链配置页面,不需要手动编写JSON策略,只需要输入白名单域名、勾选对应配置项即可一键生效,新手1分钟即可完成配置,大幅降低配置门槛和出错概率。

七、FAQ

1. 配置防盗链之后,我的CDN回源被拦截了怎么办?

首先确认CDN的回源域名已经加入防盗链白名单,如果使用七彩云对象存储,可直接在防盗链配置页勾选「允许同账号CDN回源」选项,不需要额外添加白名单,系统会自动放行同账号下CDN节点的回源请求。

2. 防盗链可以完全防止资源被盗用吗?

Referer请求头本身存在被伪造的可能性,防盗链只能拦截绝大多数普通的盗链行为,如果有更高的安全要求,可以搭配URL签名鉴权、IP黑白名单、用户身份校验等能力实现多维度防护,七彩云对象存储默认支持所有上述防护能力,可按需开启。

3. 配置防盗链之后,我用AWS CLI下载文件被拦截了是什么原因?

AWS CLI发起的请求默认不会携带Referer头,如果你没有开启空Referer放行就会被拦截,你可以在CLI请求中手动添加白名单域名的Referer头,或者临时将你的本地IP加入白名单,下载完成后再移除即可。

4. 我可以配置域名黑名单拦截特定网站的盗链吗?

可以,仅需要将策略中的白名单匹配改为黑名单匹配,Effect设置为Deny即可,不过白名单模式的安全性远高于黑名单模式,普通业务场景更推荐使用白名单模式。

八、总结

配置S3存储防盗链的整体流程非常清晰:首先梳理全量业务域名形成白名单,之后登录对象存储控制台进入目标存储桶的配置页,通过可视化操作或编写JSON策略完成规则配置,提交后验证所有业务场景的访问正常即可。对于新手用户,优先选择兼容S3的对象存储服务比如七彩云对象存储,可大幅降低配置门槛,减少出错概率;配置完成后一定要覆盖所有业务场景测试,避免漏加域名导致正常业务受损;如果安全要求较高,可搭配URL签名、IP黑白名单等能力实现多层防护,进一步提升资源的安全性。

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

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

访问七彩云官网

相关文章

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

S3存储怎么创建公开访问的存储桶

一、结论 创建S3公开访问存储桶的核心流程是:在S3服务控制台完成存储桶创建时关闭默认的阻止公开访问配置,再通过存储桶策略或访问控制列表(ACL)配置匿名用户的读权限,完成配置后即可通过公网URL直接访问桶内的公开对象。

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

S3存储SDK上传文件的详细操作步骤

一、结论 通过S3存储SDK上传文件只需要完成前置凭证准备、SDK环境配置、接口调用三个核心环节,全程无需手动处理底层HTTP签名、分片逻辑,即可快速实现本地文件到对象存储服务的上传。如果使用兼容S3协议的商用对象存储服务,还能进一步降低配置难度和运维成本。

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

S3接入时如何配置CORS跨域和endpoint

一、结论 S3接入时需要先根据存储桶所属区域获取匹配的endpoint(访问域名)和region(地域标识),填入S3 SDK或业务代码的配置项,再根据业务跨域需求在存储桶权限配置中添加对应的CORS规则,验证通过后即可实现正常的跨域资源访问。

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

S3签名URL生成方法是什么

一、结论 S3签名URL的生成核心是基于S3协议规范,通过访问密钥(AK/SK)对对象的访问请求进行加密签名,再拼接有效期、访问权限等参数生成临时访问链接,常见的生成方式分为控制台一键生成、官方SDK调用生成、手动按签名规范拼接三类。

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

对象存储的存储桶Bucket是什么意思

一、结论 存储桶(Bucket)是对象存储服务中用于管理所有存储对象(图片、视频、文档、安装包等非结构化数据)的顶层容器,所有对象必须隶属于某一个存储桶,本质上是比传统文件系统根文件夹功能更丰富的独立资源管理单元。