基于SCF+CloudMonitor实现COS敏感操作监控告警

2020-07-14 10:10:35 浏览数 (1)

作者介绍

饶云枭:腾讯云前端高级工程师,现主要负责对象存储COS相关前端研发工作,最近正在探索COS与其他云产品进行结合的轻应用场景。

导读

数据,是一家公司最核心的资产,也是业务的生命线,随着近年来数据上云的趋势,越来越多的公司都选择将数据托管在对象存储服务上。

有这么一个故事

这其实是一次事故,成立不久的创业公司T公司也是其中一员,他们最近就遇到数据安全相关的问题,一个新员工的误操作导致数据丢失,让我们看看到底发生了什么并分析下如何规避该类问题。

画面切换到T公司办公室,今天是程序员小Y第一天入职T公司,在安装和配置好办公设备后,领导把他叫了过去。

“小Y,今天你第一天来,主要熟悉下项目,我们现在的技术栈是…..,开发模式是……,对了,我们的业务的相关数据现在都上云了,就存在腾讯云的COS上,你可以先熟悉下这块代码”,领导笑着说道。

于是,小Y开始看起了腾讯云对象存储COS的文档,并研究起了项目代码。

“这个SDK封装的真不错,文档也挺详细,我来试试操作看看”,小Y并没有多想,他将SDK的几个接口都调试了一下,都符合预期。

“对了,小Y,忘记提醒你了,不要随便动现网数据哦”,领导忙完手头的事,顺便提醒了一句。

小Y突然想起刚刚自己好像有实际调用了几个接口,好像还返回成功了,赶忙看了眼之前的日志,这一看不得了,原来刚刚他有调用好几次删除操作,删除了好几个文件。

“我才刚入职,这要是被领导知道了就完了”,心存侥幸的小Y并没有将这件事告诉领导。

时间很快到了月底最后一天,这天也是小Y试用期满的日子,一切如常,似乎并没有人发现什么,小Y也觉得这事过去了。

“我之前上传的日志怎么不见了几个?”,突然,角落里传来了一阵急促的声音,小Y抬起头,发现是负责审计的同事小A。

由于这些丢失的文件比较重要,领导决定要全面排查下丢失原因。小Y这下慌了,万般无奈之下,只好给领导吐露了实情。

最终,小Y试用期没过,而丢失的数据也没能找回,T公司的业务受到了影响,领导也要求大家重新进行安全规范学习。

现有措施

上述T公司遇到的问题,腾讯云COS提供了一些方案来解决。

1. 通过子账号授权,给小Y分配一个权限有限的账号,这样就避免了操作一些敏感数据。

2. 存储桶开启对象多版本,这样删除对象之后,还能通过历史版本来找回一些数据。

这些方案都能有效降低数据丢失的风险,但是并不能完全避免一些人为的极端情况,针对这一点,我们还需要有一套实时监控告警的流程,在业务受到影响之前就能提前得到消息并排除隐患。

解决方案

本文给大家分享了基于腾讯云的SCF(云函数)和CloudMonitor(云监控)来快速实现监控COS存储桶敏感操作,并实时推送告警的简单教程。

这里提到的云函数和云监控都是腾讯云官方提供的服务,其基本概念和使用方式可以通过官方文档来了解,这里本文就不一一赘述。

方案流程

流程中需要用到的一些基础服务和配置如下:

  1. 一个COS存储桶。
  2. 一个云函数。
  3. 一个绑定到云函数的COS触发器。
  4. 一个云监控自定义消息策略。
  5. 一个接收消息的用户组。

具体操作

1、登录腾讯云COS控制台,点击创建存储桶,命名为cos-alarm-test,这里选择广州地域,其他选项直接使用默认的,后续我们的测试都使用这个存储桶。

2、再切换到云函数控制台,点击新建一个云函数cos_sens_monitor,这里我们以Node.js环境为例子,创建一个模版函数,其他选项直接使用默认的,后续我们的测试都以这个云函数和运行环境为基础。

3、按要求创建好云函数之后,我们现在需要配置COS触发器了,这也是打通COS到SCF的关键,点击进入创建好的云函数的详情页面,跳到左侧菜单的触发管理,创建一个触发器。

如上图,触发方式选择COS触发,COS Bucket选择我们之前创建好的cos-alarm-test,事件类型选择全部删除,这里的前后缀过滤可以根据自己的需求来配置,这里我们不填写,默认对整个桶里的对象都生效。

4、云函数和触发器配置好之后,我们来到云监控控制台,并进入左侧菜单(告警配置-自定义消息),在这里新建消息策略。

如果你的账号之前是没有设置过用户组的,那么此时下面的表格里会提示暂无告警接受组(如果已经有自己的用户组了,也可以直接使用并跳过下面一段教程)。

这里我们需要去访问管理控制台的用户组页面创建一个用于接收消息的用户组,这里可以只填写组名称,其他选项可以暂时不用。

然后我们可以根据自己的需要,去到用户列表页选择更多操作-添加到组,将需要接收消息的用户添加到刚刚创建的组。

这里,我们只添加了主账号,实际场景里,一般会根据需要,还要添加需要接受告警的子账号进来。

有了用户组之后,我们再回到刚刚新建消息策略的界面,此时下面的表格里就出现了刚刚我们创建好的用户组了,勾选并完成策略的创建。

5、至此,前期准备工作就做好了,接下来,我们需要编写实际的发送告警代码,然后接入到流程里。

我们可以借助腾讯云官方提供的API工具,直接生成我们需要的代码,然后做一些非常小的修改就能直接使用了。

6、进入云监控发送自定义消息的接口页面,我们只需要填写左边表单需要的信息,就能在右侧代码预览区生成代码,左边的字段都有对应文档说明(例如PolicyId就是之前创建的消息策略Id,在控制台列表就能看到),由于我们之前云函数创建的环境是Node.js环境,那么这里我们选择生成的代码也对应是Node.js的,此时将代码复制出来。

切换到云函数控制台,进入我们最开始创建的云函数的详情页面,点击进入页面上的函数代码菜单,会进入到一个可视化代码编辑器的界面,我们在根目录创建一个alarm.js文件,将上一步复制的代码粘贴进去,做一些小修改。

7、将依赖的包里面的相对路径去掉。

8、  将发送消息的逻辑封装成一个对外的方法。

9、 修改云函数的入口文件index.js,在入口handler执行刚刚的方法。

10、这里由于依赖了tencentcloud-sdk-nodejs这个包,还需要将依赖也安装在当前根目录。

在根目录创建一个package.json文件,将包写在配置文件里。

修改左下角的上传方式为在线安装依赖,然后点击保存,此时等待数秒后,我们刚刚写好的代码和外部依赖都同步到云函数上了。

测试效果

本篇内容只介绍了使用Node.js实现的版本,其他语言也有对应的API代码页面和相关文档,可以根据实际需求来选择实现的语言和方式。

现在,我们可以测试一下整套流程了,去到我们第一步创建好的存储桶,在控制台上传一个文件,然后点击删除,或者使用API/SDK等工具来删除,此时COS就会通知云函数的触发器,然后触发调用我们刚刚导入的代码逻辑,调用云监控API来推送告警消息给指定用户组。

拓展

上面的告警内容目前是固定填写的,如果我们想进行个性化开发,应该怎么办呢?

其实也是可行的,在云函数详情页的日志查询菜单里,我们可以看到刚刚流程的调用日志,如下图所示。

通过日志,我们可以看到COS通知云函数的时候还会带上很多有用的字段信息,例如存储桶名称、园区、请求头部和源IP等。

这些数据给后续的定制化开发带来了更多可能性,例如推送的告警文案可以根据这些字段来自行拼接,又或者如果我们的业务有自己的异常统计分析需求,也可以将这些数据传递给其他服务或者模块来使用。

这些开发都是基于腾讯云的云函数SCF服务,官方也提供了一些可直接使用的组件,基于用户的具体场景,直接对各类云资源进行组织编排,这里可以通过Serverless Framework的官方文档进行学习了解,里面也有对象存储COS的组件,可以快速方便的管理COS存储桶。

小Y的反思

小Y回家之后痛定思痛,决定研究下如何避免之前的事情再次发生,他关注了腾讯云COS公众号想看看有没有人分享类似经验,刚好看到了这篇文章,通过学习和实践后,在下一家同样使用COS的公司推动并建立了更加全面的数据安全机制,成为了公司的主力。

关注腾讯云 掌握云技术

没看过瘾?这里还有

  • 网站-全套服务-从0到1
  • 存储分发加速解决方案
  • 混合云存储:大数据应用的上云之道
  • 丝滑的博客:基于COS/CDN/CI/Hexo/DNS

点击阅读原文,领取 COS 限时1元礼包!

0 人点赞