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

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

相关文章

来自专栏IT笔记

Nginx学习之合并请求连接加速网站访问

作为这个世界上最好的web服务器之一,Nginx的优势不明而喻。下面来讲讲,Nginx是如何合并请求连接的。 小知识 当我们在浏览网页的时候,对浏览速度有一个重...

3216
来自专栏F_Alex

SpringCloud-微服务的注册与发现Eureka(二)

1.4K4
来自专栏张戈的专栏

Nginx发布1.9.0版本,新增支持TCP代理和负载均衡的stream模块

昨天在公司微信群,CTO 分享了这个消息,对运维来说以后基于 TCP 协议的后端业务的高可用又多了一个新的选择,实在是棒极了! 一直以来,Nginx 并不支持 ...

2785
来自专栏技术之路

go微服务框架go-micro深度学习(一) 整体架构介绍

      产品嘴里的一个小项目,从立项到开发上线,随着时间和需求的不断激增,会越来越复杂,变成一个大项目,如果前期项目架构没设计的不好,代码会越来越臃肿,难以...

2132
来自专栏张善友的专栏

Windows 远程管理WinRM

根据 WinRM SDK (msdn2.microsoft.com/aa384426),Windows 远程管理是“WS 管理协议的 Microsoft 实施,...

3325
来自专栏散尽浮华

非常强悍并实用的双机热备+负载均衡线上方案

Heartbeat+DRBD+NFS+Keepalived+Lnmp      对于网站服务器来说,可靠性之重要不用我多说,但要想做到可靠性一般需要昂贵的...

7196
来自专栏运维一切

xfs的故障记录

##前言 我使用xfs比较二一点,我是在ceph的rbd上直接格式化的xfs,所以ceph上的数据一般不会丢失,不过我的xfs是在docker内部进行的挂载,使...

1223
来自专栏Spark学习技巧

重磅:如何玩转kylin

1, kylin是什么?为什么需要? Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持...

2605
来自专栏walterlv - 吕毅的博客

在编写异步方法时,使用 ConfigureAwait(false) 避免使用者死锁

发布于 2018-03-23 13:54 更新于 2018-03...

471
来自专栏云计算教程系列

如何在Ubuntu 14.04上配置Redis群集

Redis是一个开源键值数据存储,使用内存存储模型和可选的磁盘写入来实现持久性。它具有事务,发布/订阅和自动故障转移等功能。建议将Redis与Linux一起用于...

200

扫码关注云+社区