ActionTrail会将事件压缩之后保存到OSS中。用户使用和分析OSS中的文件比较麻烦。如果能将审计事件写入到SLS,会给用户提供很大的便利。阿里云函数计算是实现这个迁移的好办法,成本低,见效快。本文将介绍如何通过函数计算将ActionTrail事件从OSS导入到SLS中。

创建服务

首先进入函数计算控制台创建服务。在高级配置中配置好SLS project,用于保存函数计算运行的信息,方便排查问题。函数计算会往里面写入函数运行的信息,用户也可以用过logger对象写入自定义的信息。

创建服务的过程中涉及到很多授权,需要根据提示授予权限。具体到这个例子,是要给OSS服务授权调用函数计算的触发器。给函数计算服务授权,读取OSS的数据,往SLS写入事件。

函数计算目前支持的Region不多,会限制目标OSS的区域。比如在华东2创建服务,就要求读的OSS要在华东2

创建触发器

ActionTrail通过OSS PutObject方法往OSS写入文件,因此触发函数选择PubObject。

创建函数

通过Python 2.7实现处理逻辑。在线编辑器还不错,不过没有智能提示功能。先获取ActionTrail的压缩文件,将其解压后,使用SLS客户端将其上传到指定的SLS Project中。需要将OSS client的endpoint和bucket name,SLS client的endpoint、log project、logstore替换成自己的。

# coding=utf-8import time
from hashlib import md5
import zlibimport json
import logging
import oss2
from aliyun.log.logclient import LogClient
from aliyun.log.putlogsrequest import PutLogsRequest
from aliyun.log.logitem import LogItemdef handler(event, context):logger = logging.getLogger()endpoint = 'oss-cn-shanghai.aliyuncs.com'.format(context.region)creds = context.credentialsauth = oss2.StsAuth(creds.access_key_id, creds.access_key_secret, creds.security_token)sls_client = LogClient('cn-shanghai.log.aliyuncs.com', creds.access_key_id, creds.access_key_secret, securityToken=creds.security_token)for evt in json.loads(event)['events']:bucket_name = evt['oss']['bucket']['name']bucket = oss2.Bucket(auth, endpoint, bucket_name)object_name = evt['oss']['object']['key']r = bucket.get_object(object_name)zipData = r.read(409600) #ActionTrail一个文件压缩前不会超过8KB,所以超过8KB就OK。actionTrailEvents = zlib.decompress(zipData, zlib.MAX_WBITS|16)logitemList = []for actionTrailEvent in json.loads(actionTrailEvents):logItem = LogItem()event_time = time.mktime(time.strptime(actionTrailEvent['eventTime'], '%Y-%m-%dT%XZ'))logItem.set_time(event_time)#这里只配置了'eventName',可以增加更多需要单独展示或者检索的字段。logItem.set_contents([('eventName', actionTrailEvent['eventName']), ('event', json.dumps(actionTrailEvent))])logitemList.append(logItem)req = PutLogsRequest('actiontrail-events-from-oss-to-sls', 'actiontrail-events', 'ActionTrail', 'henshao', logitemList)res = sls_client.put_logs(req)logger.info(res.log_print())return 'OK'

开发调试

函数计算的调试非常方便。在触发事件中,选择自定义事件,拿一个真实的ActionTrail文件来做测试(需要替换JSON里面的oss.bucket.arn、oss.object.key,以及所有的阿里云id)。每次修改代码之后,点击保存并运行。函数运行的信息都会在Web页上打印出来。

验证结果

通过一个登录事件来验证函数计算的运行情况。这里有一点需要注意,SLS开启检索功能之前的日志在查询里面是不能展示的,可以去预览里面翻翻。

参考资料

实践中,我发现函数计算是可以使用阿里云Python SDK的,相关的Python代码直接帖进去都可以使用,所以函数计算可以实现非常复杂的功能。

  1. 操作事件(Event)结构定义
  2. aliyun-log-python-sdk

阿里云函数计算应用:将ActionTrail审计事件从OSS导入到SLS中相关推荐

  1. 深度揭秘阿里云函数计算异步任务能力

    作者: 渐意 在上篇文章<解密函数计算异步任务能力之「任务的状态及生命周期管理」>中,我们介绍了任务系统的状态管理,并介绍了用户应如何根据需求,对任务状态信息进行实时的查询等操作.在本篇中 ...

  2. Python Flask web 项目零改动迁移至阿里云函数计算

    引言 最近尝试了一下阿里云的函数计算,整体感觉很好,主要是省钱!下面就简单聊一下,如何将 Python Flask 的 web 项目迁移至函数计算. 创建一个银行卡校验的 RestAPI 文件名:in ...

  3. 独家对话阿里云函数计算负责人不瞋:你所不知道的 Serverless

    作者 | 杨丽 来源 | 雷锋网(ID:leiphone-sz) Serverless 其实离我们并没有那么遥远. 如果你是一名互联网研发人员,那么极有可能了解并应用过 Serverless 这套技术 ...

  4. 阿里云函数计算 FC再次荣获最受观众喜爱奖

    简介:就这几天,同事给我转了一个调查报告,说你们 FC 又获奖了,我还纳闷什么奖,原来是 CNCF 发布了 2020 年度的中国云原生调查报告,在报告中的 Serverless 调查部分,阿里云函数计 ...

  5. 在阿里云函数计算上部署.NET Core 3.1

    使用阿里云ECS或者其他常见的VPS服务部署应用的时候,需要手动配置环境,并且监测ECS的行为,做补丁之类的,搞得有点复杂.好在很多云厂商(阿里云.Azure等)提供了Serverless服务,借助于 ...

  6. Serverless 实战 —— 阿里云函数计算配合SpringBoot项目

    阿里云函数计算配合SpringBoot项目 DecentAnt 2019-06-24 15:16:13 浏览2862 作者:DecentAnt 首先要弄清楚,阿里云的函数计算项目和SpringBoot ...

  7. 只更新代码,然后发布版本:基于 Serverless Devs 原子化操作阿里云函数计算

    众所周知,随着时间的发展,Serverless 命令行工具也逐渐的玩出了更多的花样,就目前来看,常见的形态有两种,一种是通过 Yaml 来进行资源的描述,另外一种是纯粹的命令行操作,而不依赖这些内容. ...

  8. 阿里云函数计算快速入门

    关于阿里云函数计算详细内容:阿里云函数计算使用教程 (阿里云函数计算(Function Compute)是一个事件驱动的全托管计算服务.通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传.函 ...

  9. 阿里云函数计算(fc)使用体验

    为什么会有无服务(Serverless)构架 经过最近几年容器化和Devops的发展,程序员已经变得越来越"懒惰"了--对于部署环境,开发能不管理尽量不管理.于是乎,Docker, ...

最新文章

  1. 解决Adobe Reader安装错误150120
  2. 关于error:Cannot assign to 'self' outside of a method in the init family
  3. shell+vim——05
  4. svn 1.8.11 命令行提交新添加文件错误
  5. 迭代器模式和组合模式混用
  6. python中对数组合并的方法
  7. 生成式模型:LDA与LSI-SVD分解
  8. 如何查看SAP Leonardo模型重新训练的日志
  9. php和mysql一键安装包_iis+php+mysql一键安装教程和安装包
  10. 【编程题目】给你 10 分钟时间,根据上排给出十个数,在其下排填出对应的十个数...
  11. p1和p7签名的区别
  12. 20145231熊梓宏 《网络对抗》 实验四 恶意代码分析
  13. 阶段3 3.SpringMVC·_03.SpringMVC常用注解_4 HiddentHttpMethodFilter过滤器
  14. 非常强大的时间日期插件 --- JeDate.js
  15. 服务器压力测试实现步骤,测试web性能时 做一个压力测试的四大步骤
  16. Java操作Excel表读取的数字变成科学计数法
  17. TC流量控制HTB示例
  18. 捞王再度冲刺上市:盈利规模现腰斩,2021年下半年亏损749万元
  19. 如何写一个高逼格 README
  20. 解决ERROR: distribution port 25672 in use by another node: rabbit@

热门文章

  1. akka actor行为切换实现
  2. java中soo_soo_ - SegmentFault 思否
  3. 一图解惑SQL JOINS
  4. 中国未来的可能性思考- 系统化思维-公司培训
  5. JVM调优思路、订单秒杀jvm调优案例
  6. SpringMVC框架搭建( 使用Jar包搭建)
  7. 怎样避免MYSQLD被OOM-KILLER杀死?
  8. Markdown Test
  9. 如何更好地理解Javascript对象的自有属性和原型继承属性
  10. 关于Feign的几个问题