OSS适用于存储各类型的静态资源,为了防止OSS的资源被恶意盗用,OSS提供了几种安全防护功能,用户还可以集成安全类产品进行安全防护。本文会从两方面展开:OSS本身提供的安全防护功能(referer、跨域、权限控制、安全排查)及结合安全产品进行安全防护(高防、WAF结合OSS使用)。
一、OSS本身提供的安全防护功能
1. 防盗链
用户可以通过OSS管理控制台或者API的方式对一个Bucket设置referer字段的白名单和是否允许referer字段为空的请求访问。例如,对于一个名为oss-example的Bucket,设置其referer白名单为http://www.aliyun.com/ 。则所有referer为http://www.aliyun.com/ 的请求才能访问oss-example这个Bucket中的Object。
控制台——OSS——具体bucket——基础设置
2.跨域设置
跨域访问,或者说JavaScript的跨域访问问题,是浏览器出于安全考虑而设置的一个限制,即同源策略。当来自于A网站的页面中的JavaScript代码希望访问B网站的时候,浏览器会拒绝该访问,因为A、B两个网站是属于不同的域。
在实际应用中,经常会有跨域访问的需求,比如用户的网站www.a.com,后端使用了OSS。在网页中提供了使用JavaScript实现的上传功能,但是在该页面中,只能向www.a.com发送请求,向其他网站发送的请求都会被浏览器拒绝。这样就导致用户上传的数据必须从www.a.com中转。如果设置了跨域访问的话,用户就可以直接上传到OSS而无需从www.a.com中转。
控制台——OSS——具体bucket——基础设置
点击管理
3.权限控制
Bucket私有的情况下,object的访问得通过签名URL访问,签名URL存在过期时间,会定期过期,增加了一直恶意下载的成本,同时需要用户集成oss签名URL的API,有一定开发成本;
OSS签名URL算法:OSS签名URL算法
OSS签名URL实现的PHP demo 看:
OSS SDK 获取签名URL看:
4.异常流量安全排查
在控制台--OSS--资源监控--IP统计,看看哪些IP发起的请求,是否存在异常IP发起了请求
1)对于异常IP发起了请求
[1]如果bucket私有,建议迁移数据到新的bucket中,新的bucket私有,通过开启waf/高防 防护的自定义域名对外服务,如何为bucket开启WAF/高防防护看二
[2]如果bucket公共读: 可以bucket私有对外提供签名URL访问(需要业务端集成签名算法有一定开发成本)
或者 迁移数据到另外的bucket中,通过开启waf/高防 防护的自定义域名对外服务,如何为bucket开启WAF/高防防护看二
或者迁移数据到另外的bucket中,再使用自定义域名对外服务,开启CDN加速,利用CDN的 IP黑名单 进行限制访问
数据迁移参考:
OSS 开启CDN加速:
2) 排查下refer监控 看看哪些refer 发起了请求
看看是否存在恶意的盗链行为
存在的话,OSS 层面设置refer 白名单
3) 要详细排查哪些IP访问了什么资源,得分析OSS日志
OSS日志开启看: OSS日志开启
日志字段说明:OSS日志字段说明
二、结合安全产品进行安全防护
1.高防防护OSS
1) 自定义域名绑定bucket,但无需做cname 解析到bucket域名上,域名绑定可以参考: 域名绑定
2) 自定义域名配置高防:
3) 在域名服务商那边增加cname 解析,解析到高防提供的cname 地址上即可
通过http://dcgf.pier39.cn/objectname 来高防防护OSS的资源
2.WAF结合OSS使用
1) 自定义域名绑定bucket,但无需做cname 解析到bucket域名上,域名绑定可以参考: 自定义域名绑定
2) 自定义域名配置WAF ,参考:
3) 在域名服务商那边增加cname 解析,解析到WAF提供的cname地址上
通过http://dcgf.pier39.cn/objectname 来WAF防护OSS的资源