对象存储COS-防盗刷指引

前言

近年来,越来越多的用户在搭建网站或图床时将图片视频等资源上传到对象存储COS,提升了访问稳定性的同时降低了服务器的存储空间压力,但随之而来的流量盗刷、图片盗链问题也困扰着不少开发者,一旦存储空间被恶意访问,会产生高额的流量费用,产生不必要的纠纷。这类问题实际上可以通过多种手段来防护,本文将主要介绍一些常见的防护手段,帮助开发者合理配置存储桶,建立安全机制,降低因类似问题带来的大额资金损失的风险。

防护

盗刷有很多防护方式,这里将按配置难易度和门槛来区分,开发者可根据实际情况和需求来选择。

基础防护

1、修改存储桶访问权限

访问权限是存储桶最核心和敏感的配置之一,据不完全统计,绝大部分被盗刷的原因都是因为用户设置了「公有读」权限,由于公有读权限可不带签名直接匿名访问,这给了黑产和攻击者可乘之机。将存储桶改为私有读写可大大降低盗刷风险,拿不到密钥就无法计算签名,访问会被拒绝。

如果业务没有特别需求,这里建议您平时尽量配置私有读写权限。

COS控制台目前有两个地方可以设置存储桶权限:

a、创建存储桶弹窗:

对象存储COS-防盗刷指引_第1张图片

b、存储桶详情页-权限管理:

对象存储COS-防盗刷指引_第2张图片

2 、开启存储桶防盗链

防盗链也是最常见的防护手段之一,其原理是通过HTTP的Referer头部进行判断校验,用户可通过配置白名单或黑名单,来允许或者禁止某些访问来源。

在COS控制台-存储桶详情页-安全管理可以找到防盗链设置:

对象存储COS-防盗刷指引_第3张图片

这里建议您配置拒绝空referer,黑白名单可根据业务实际情况来选择,如果是固定在某些域名下访问可设置白名单,如已经发现有恶意访问并明确知道访问域名或IP,可手动设置黑名单来拦截。

如需了解更多防盗链的使用技巧,可参考防盗链实践

3 、配置云监控告警

配置日志管理能帮助定位和分析盗刷的来源,提供了丰富的字段可查询,但缺点是需要开发者主动去关注日志。如需更加及时的发现盗刷问题,可以配置云监控告警。

目前COS控制台创建存储桶时,就支持同时配置告警:

对象存储COS-防盗刷指引_第4张图片

如果默认告警的策略不能满足要求,也可以手动去云监控【https://console.cloud.tencent.com/monitor/alarm/overview】创建自定义的告警策略:

对象存储COS-防盗刷指引_第5张图片

进入告警管理-策略管理,点击新建策略,在云产品监控下找到对象存储,然后在告警对象的实例ID里找到需要配置的存储桶,就可以自己指定触发条件了,所有COS存储桶的数据监控页面里展示的指标,这里都支持配置。

4 、开启日志管理

前面讲防盗链黑名单的时候提到过“如发现有恶意访问域名或IP”,这里就需要我们开启存储桶的日志管理,访问日志里会记录每一次请求的各种字段,帮助我们快速定位到访问来源。

在COS控制台-存储桶详情页-日志管理可以找到日志存储,开启后即可在存储桶指定的路径前缀下找到访问日志。

对象存储COS-防盗刷指引_第6张图片

日志文件里的字段可以参考日志管理概述-开发者指南文档,下面介绍一些常用的可分析字段:

userSecretKeyId:可以确定请求是通过哪个密钥KeyId进行的访问,如确定不是业务自己发起的请求,则很可能是密钥已经泄漏了,可前往腾讯云CAM控制台 禁用不安全的密钥。

referer:即防盗链设置里用于判断的条件,如发现不认识的referer,可能是被其他网站盗链,可配置防盗链-黑名单限制该referer访问,可参考1.2 开启存储桶防盗链。

remoteIp:可以确定访问来源IP,如发现是不可信任的IP,可前往存储桶详情-权限设置配置Policy禁止该IP访问存储桶,示例如下:

对象存储COS-防盗刷指引_第7张图片

进阶防护

1 、使用自定义CDN加速域名

腾讯云CDN也提供了很多配置项来进行防护,也能有效抵御盗刷。

如我们的业务使用了自定义CDN域名,可以前往CDN控制台-域名详情-访问控制页面进行配置,主要常用到的一些配置有以下几种:

防盗链配置:

对象存储COS-防盗刷指引_第8张图片

CDN鉴权配置:

对象存储COS-防盗刷指引_第9张图片

IP黑白名单配置:

对象存储COS-防盗刷指引_第10张图片

UA黑白名单配置:

对象存储COS-防盗刷指引_第11张图片

还有一些更为复杂的配置项,如IP访问限频配置、下行限速配置等,可查阅CDN相关文档【https://cloud.tencent.com/document/product/228/7865】来使用。

2、 SCF+云监控+COS API实现自动封堵

在基础防护里,我们提到了可以配置云监控告警来及时发现流量异常情况,但有些时候可能会有信息遗漏或人在外不方便及时处理的情况,这里可以通过自动化脚本代码调用API来实现一个简单的自动化逻辑:

从云监控获取到外网下行流量指标(InternetTraffic)异常 -> 自动调用COS PutBucketAcl修改存储桶权限为私有读写。

主要涉及以下2个API接口,这里提供了在线调用示例供调试参考:

云监控的 GetMonitorData (https://console.cloud.tencent.com/api/explorer?Product=monitor&Version=2018-07-24&Action=GetMonitorData)

COS的 PutBucketAcl (https://console.cloud.tencent.com/api/explorer?Product=cos&Version=2018-11-26&Action=PutBucketAcl)

如果没有方便的环境来运行脚本,也可以使用腾讯云SCF来快速实现,SCF提供了开箱即用的环境,并支持定时循环调用,这里提供了一篇具体的实践文章可供参考:

使用腾讯云SCF实现COS费用封顶的最佳实践

额外使用建议

以上为本文提供的一些盗刷问题的常见防护手段,除此之外,我们在日常使用COS时也需要注意一些小细节,这里提供一些额外的使用建议,也能一定程度上降低盗刷风险。

  • 避免在对外开源的代码里使用明文的API访问密钥,避免密钥泄露引发安全风险,建议参考最小权限原则来使用。

  • 避免配置跨域规则时允许所有来源(即Origin: *)访问,尽量设置明确的来源。

  • 上传大量文件时,避免使用规律过于简单的顺序前缀(如数字序号,时间戳等),这样可能会导致攻击者更容易遍历到存储桶下的文件。

你可能感兴趣的:(对象存储,防盗刷,功能上新)