前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【云端安全小建议】-如何正确的使用云审计

【云端安全小建议】-如何正确的使用云审计

原创
作者头像
AY
修改2018-12-25 19:33:55
2.4K1
修改2018-12-25 19:33:55
举报

前言

云端安全小建议的系列文章,是由腾讯云账号与权限团队的一线开发人员推出的关于用户安全的小建议。该系列文章旨在帮助腾讯云用户能够充分利用腾讯云提供的产品特性,安全的解决自己在实际生产中的遇到的问题。文章中会提到很多应用场景以及错误的解决方法和正确的安全的解决方法。该系列文章不仅会有场景分析还会有技术分析,所以只要是腾讯云的用户,无论是技术小白用户还是技术大神都可以一起来讨论和实践。对于用户提出的安全问题,我们会第一时间跟进,站在平台方的角度给出安全合理的解决方案。

应该怎么充分利用云审计来监控账户的安全呢?

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

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

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

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

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

代码语言:javascript
复制
{
    "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即是这个字段的值。)

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

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

云审计控制台 然后,再进行关键字搜索,假如要搜索登录事件的话,便在输入框中输入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。

代码语言:javascript
复制
<?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)。

下期预告

使用EMR分析云审计,建立海陆空全面审计

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 应该怎么充分利用云审计来监控账户的安全呢?
  • 首先,云审计的日志格式是什么样的?
  • 然后,怎么丰富的日志里,哪个字段可以标识登录呢?
  • 最关键的问题,怎么检索这个日志?
  • 最后,要是真的检索到了异常操作怎么及时通知到我啊?
  • 下期预告
相关产品与服务
操作审计
操作审计 CloudAudit 是一项支持对您的腾讯云账号进行监管、合规性检查、操作审核和风险审核的服务。借助 CloudAudit,您可以记录日志、持续监控并保留与整个腾讯云基础设施中操作相关的账号活动。CloudAudit 提供腾讯云账号活动的事件历史记录,这些活动包括通过腾讯云管理控制台、API 服务、命令行工具和其他腾讯云服务执行的操作。这一事件历史记录可以简化安全性分析、资源更改跟踪和问题排查工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档