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

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 条评论
登录 后参与评论

相关文章

来自专栏前端萌媛的成长之路

一波webpack

1924
来自专栏蓝天

Rsync完全配置

系统环境---Rsync完全配置 rsync version 2.6.3 protocol version 28 Slackware 9.2 配置/etc/...

1193
来自专栏漫漫前端路

前端安全知识

xss: 跨站脚本攻击(Cross Site Scripting)是最常见和基本的攻击 WEB 网站方法,攻击者通过注入非法的 html 标签或者 javasc...

1152
来自专栏互扯程序

Linux常用Shell脚本,值得学习及收藏

在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运...

2301
来自专栏优启梦

获取lofter官方首页背景壁纸

35610
来自专栏Java编程技术

Druid连接池原理学习

(1)、 如果设置了maxWait或者构造函数参数传入的为true,则创建的ReentrantLock为公平锁,否者为非公平锁 (2)、 如果设置了initi...

1.8K1
来自专栏Aloys的开发之路

VirtualBox相关问题总结

VirtualBox Images: http://www.osboxes.org/virtualbox-images VirtualBoxes – Free ...

2648
来自专栏Felix的技术分享

Stetho的通信原理

3213
来自专栏Linyb极客之路

运维管理之防止"rm -rf /" 误删除

大概懂点linux的程序员都知道“rm -rf /”意味着擦除根路径“/”下挂载的所有内容而无需询问。以前一个主管说过,在你不充分了解某个工具的原理的时候,不要...

1504
来自专栏北京马哥教育

DNS从入门到管理(一)

DNS概述 DNS(Domain Name System,域名系统),域名和IP地址相互映射的一个分布式数据库,通过主机名,最终得到该主机名对应的IP地址的过程...

6546

扫码关注云+社区

领取腾讯云代金券