使用云审计实时监控腾讯云账户

2017年11月26号腾讯云推出了云审计(CloudAudit)服务,该服务可以记录云账户资源操作,提供操作记录查询,并可以将记录文件保存到用户指定的COS存储空间。这份记录不仅仅可以记录主账号的操作,还可以记录这个主账号的子账号的操作记录。假如用户开通了云审计服务以后,用户便可以清晰的知道自己的云账户中的资源被哪个账号在什么时候从哪个IP发起过什么操作。

上面的描述有点拗口,那到底云审计给用户带来了什么呢?

  1. 用户(包含子账号)在腾讯云上的操作日志可以查询。
  2. 云审计提供了云API可以供用户调用。
  3. 云审计提供了PHP版本的SDK更加方便用户去查询自己的日志。
  4. 云审计还提供了腾讯云实验室教程,手把手引导用户来查询自己的日志,是不是很贴心。

用户如果很关心自己的账户安全的话,不妨试一试云审计,实时监控自己的腾讯云账户。当敏感操作发生以后及时告知到自己。

说了怎么多,到底应该怎么充分利用云审计来监控账户的安全呢?

假如我们的目的是:监控自己的账号是否在不是特定的IP发生过登录,如果是则及时告警。那么我们肯定会有以下疑问。

  • 云审计提供的日志格式是什么样的?
  • 这样的日志里哪个字段可以标识登录,换句话说登录对应的日志是那一条?
  • IP又是哪个字段标识?
  • 怎么检索这个日志?
  • 要是真的检索到了异常操作怎么及时通知到我啊?

现在怀着一脸懵逼的心情来探索一下,如何实现使用云审计实时监控腾讯云账户。

首先,云审计的日志格式是什么样的?

啥也不说,先上个审计日志的例子,然后再给出每个字段的详细含义。以下便是审计日志的一条登录日志的实例。出于安全的考虑,我把账号还有IP做了打码操作。

{
    "userIdentity": {
        "type": "Root",//账号类型
        "principalId": "1150xxxxxx",//当前操作账号ID
        "accountId": 1150xxxxxxx,//主账号ID
        "userName": "root",
        "secretId": "",
        "sessionContext": {
            "userIp": "127.0.0.1"
        }
    },
    "eventTime": "2018-01-02 21:50:51",
    "eventVersion": "1.0",
    "eventSource": "cloud.tencent.com/login",
    "requestParameters": {
        "s_url": "cloud.tencent.com"
    },
    "sourceIPAddress": "127.0.0.1",
    "eventRegion": "gz",
    "eventName": "ConsoleLogin",
    "resourceType": "account",
    "userAgent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
    "errorCode": 0,
    "errorMessage": "",
    "additionalEventData": {
        "LoginType": "qq",//账号登录类型
        "LoginTo": "https://console.cloud.tencent.com/cloudaudit",//登录成功后跳转到的页面
        "MFAUsed": "No"//此次登录是否开启了MFA验证
    },
    "requestID": "38a3b876d45c9a4d569359ec2e87d633",
    "eventID": "7fbfd66c5d5af7e6ea7f209f6bf769b71",
    "eventType": "ConsoleLogin",
    "apiVersion": "1.0",
    "resources": "*",
    "resourceName": "*"
}

原来登录一下便产生了怎么丰富的日志啊,那这个日志的每个字段的含义是什么啊?

字段

描述

userIdentity

账户基本信息

eventTime

事件发生的时间

eventVersion

日志版本目前是1.0

eventSource

事件源

requestParameters

事件发生时的请求参数

sourceIPAddress

发起操作的IP

eventRegion

发起操作的资源的地域

eventName

事件名称

resourceType

资源类型

userAgent

客户端

errorCode

错误码

errorMessage

错误信息

additionalEventData

额外参数

requestID

请求ID

eventID

事件ID

eventType

事件类型

apiVersion

API版本

resources

资源

resources

资源名称

然后,怎么丰富的日志里,哪个字段可以标识登录呢?

在上面的日志字段里面,有一个字段叫做事件名称,其中这个字段便可以标识登录事件。当eventName是ConsoleLogin的时候,即标识了这个字段。(PS:我不想监控登录了,我想监控机器重启,怎么确定这个字段的值呢?这个暂时可以参考https://cloud.tencent.com/document/api,其中API概览里面的ActionName即是这个字段的值。)

接着IP又是哪个字段标识?

经过上面两个问题的解释,这个问题好像是废了。sourceIPAddress这个字段就是发起操作的IP了。

最关键的问题,怎么检索这个日志?

审计日志中最关键的便是检索日志了,所以腾讯云提供了两种方案供用户来做选择。

  • 在控制台上进行检索。首先,打开云审计的控制台(https://console.cloud.tencent.com/cloudaudit)。
    云审计控制台
    然后,再进行关键字搜索,假如要搜索登录事件的话,便在输入框中输入ConsoleLogin即可。(PS:日志会有5到15分钟的延迟)最后,便可以看到搜索结果了。这种方式,适合人工来查看审计日志详情。但是不能够自动化的做账户监控。如果用户想要做自动化的监控的话,可以试试下面的方式。
  • 调用云API进行检索。(目前仅支持PHP版本的SDK)

以使用PHP SDK为例,如何监控登录事件。

首先,下载PHP的SDK(http://devcloudaudit-1254962721.cosgz.myqcloud.com/qcloudapi-sdk-php-master.tar)。

然后,将这个SDK代码解压,编辑demo.php。

<?php
error_reporting(E_ALL ^ E_NOTICE);
require_once './src/QcloudApi/QcloudApi.php';


$config = array('SecretId'=> 'AKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX','SecretKey'=> 'hDXXXXXXXXXXXXXXXXXXXXXXXXXXXXX','RequestMethod'  => 'GET','DefaultRegion'  => 'gz');
$ca = QcloudApi::load(QcloudApi::MODULE_CLOUDAUDIT, $config);
$nowTime = time();
$startTime = $nowTime-120;
$alarmAction = 'ConsoleLogin'; //您认为是敏感的action
$package = array('EndTime'=>$nowTime,'LookupAttributes'=>'[{"AttributeKey":"string","AttributeValue":"'.$alarmAction.'"}]','MaxResults'=>10,'StartTime'=>$startTime);
$a = $ca->LookUpEvents($package);
if ($a === false) {
    $error = $ca->getError();
    echo "Error code:" . $error->getCode() . ".\n";
    echo "message:" . $error->getMessage() . ".\n";
    echo "ext:" . var_export($error->getExt(), true) . ".\n";
} else {
    var_dump($a);
}

$response = $ca->getLastResponse();
$response = json_decode($response,true);
$events = $response['data']['Events'];
$alarmFlag = false;
foreach ($events as $event){
    if($event['EventName'] == $alarmAction){
        $alarmFlag = true;
    }
}
$alarmContent = '';
if($response['code'] != 0){
	$alarmContent = 'API failed';
}else if ($alarmFlag === true){
	$alarmContent = $alarmAction .'IsOccur!';
}
if($alarmContent != ''){
  $cmd = 'cagent_tools alarm '.$alarmContent;
  shell_exec($cmd);
}

其中代码里面的SecretId和SecretKey两个变量是用户调用腾讯云API的凭证。可以在这里获取(https://console.cloud.tencent.com/cam/capi)。细心的读者会发现在代码的倒数第二行有一句话,shell_exc($cmd);执行shell命令的,而shell命令的值是cagent_tools alarm $alarmContent。这个不是标准的shell命令啊。是不是还要装什么依赖?这样便引出了最后一个疑问。

最后,要是真的检索到了异常操作怎么及时通知到我啊?

腾讯云同样提供了免费短信通知的功能(但是条数有限:1000条),同时提供了命令行发送工具cagent_tools,没错就是上面的shell命令中的cagent_tools。具体使用方式可以参考:https://cloud.tencent.com/document/product/248/6218

感谢您看到了文章的最后,如果您觉得这篇文章的描述条理不够清晰的话。您可以试试腾讯云实验室提供的关于云审计的教程(https://cloud.tencent.com/developer/labs/lab/10328)。再次感谢您,如果还有疑问的话,可以参考https://cloud.tencent.com/product/cloudaudit。如果在使用上发现问题,或者想提建议的话。我们非常欢迎,可以加入腾讯云云审计讨论组。

云审计交流群

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

云审计

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大魏分享(微信公众号:david-share)

讲真,Ansible 可以管理Windows?

前言: 本文是我和李尧老师一起实验。李尧是红帽高级培训讲师,目前负责红帽中国区员工内部技术培训与认证。 一、Ansible能对windows做什么操作? Ans...

4495
来自专栏FreeBuf

史上最全的njRAT通信协议分析

*本文原创作者:菠菜,本文属FreeBuf原创奖励计划,未经许可禁止转载 Njrat,又称Bladabindi,该木马家族使用.NET框架编写,是一个典型的RA...

2056
来自专栏李雄的专栏

python 中单独调用 django 的数据库模块

数据入库的时候各种拼接 sql 语句,有时候文本中包含“,会直接报错,烦不胜烦,考虑是否有简单的数据库的 orm 框架,方便数据库这块的操作,考虑到之前接触过一...

5870
来自专栏Java帮帮-微信公众号-技术文章全总结

Java(web)项目安全漏洞及解决方式【面试+工作】

1592
来自专栏腾讯移动品质中心TMQ的专栏

Android权限机制,你真的了解吗?

一、Android的权限机制 Android是目前最流行的智能手机软件平台之一,在智能移动终端如火如荼发展的同时,其安全态势也日益严峻。有调查表明,恶意软件的...

33510
来自专栏FreeBuf

安全科普:利用WireShark破解网站密码

当我们输入账号、密码登录一个网站时,如果网站允许你使用HTTP(明文)进行身份验证,那么此时捕获通信流量非常简单,我们完全可以对捕获到的流量进行分析以获取登录账...

1745
来自专栏性能与架构

负载均衡策略

1. HTTP重定向 当用户发来请求的时候,Web服务器通过修改HTTP响应头中的Location标记来返回一个新的url,然后浏览器再继续请求这个新url,...

3427
来自专栏Rainbond开源「容器云平台」

敲黑板 | 云帮储存那点事儿

1383
来自专栏三木的博客

Linux基础知识总结

###一:什么是Linux? Linux被称为类Unix操作系统,遵循POSIX标准。Linux与Unix的最大不同在于源代码的开放性和自由性。 Linux的发...

1839
来自专栏腾讯云实验室

基于 CentOS 搭建微信小程序服务

腾讯云提供了开发者实验室帮助用户搭建微信小程序服务,教程内容如下,用户可以点击开发者实验室快速上机完成实验。

45014

扫码关注云+社区