您的位置:首頁>科技>正文

使用雲審計即時監控騰訊雲帳戶

更多騰訊海量技術文章, 請關注雲加社區:https://cloud.tencent.com/developer

作者:SUN

2017年11月26號騰訊雲推出了雲審計(CloudAudit)服務, 該服務可以記錄雲帳戶資源操作, 提供操作記錄查詢, 並可以將記錄檔保存到使用者指定的COS存儲空間。 這份記錄不僅僅可以記錄主帳號的操作, 還可以記錄這個主帳號的子帳號的操作記錄。 假如使用者開通了雲審計服務以後, 使用者便可以清晰的知道自己的雲帳戶中的資源被哪個帳號在什麼時候從哪個IP發起過什麼操作。

上面的描述有點拗口, 那到底雲審計給用戶帶來了什麼呢?

用戶(包含子帳號)在騰訊雲上的操作日誌可以查詢。

雲審計提供了雲API可以供用戶調用。

雲審計提供了PHP版本的SDK更加方便使用者去查詢自己的日誌。

雲審計還提供了騰訊雲實驗室教程, 手把手引導使用者來查詢自己的日誌, 是不是很貼心。

用戶如果很關心自己的帳戶安全的話, 不妨試一試雲審計, 即時監控自己的騰訊雲帳戶。 當敏感操作發生以後及時告知到自己。

說了怎麼多, 到底應該怎麼充分利用雲審計來監控帳戶的安全呢?

假如我們的目的是:監控自己的帳號是否在不是特定的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。

'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() . ". "; echo "message:" . $error->getMessage() . ". "; echo "ext:" . var_export($error->getExt(), true) . ". "; } 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。如果在使用上發現問題,或者想提建議的話。我們非常歡迎,可以加入騰訊云云審計討論群組。

同時提供了命令列發送工具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。如果在使用上發現問題,或者想提建議的話。我們非常歡迎,可以加入騰訊云云審計討論群組。

Next Article
喜欢就按个赞吧!!!
点击关闭提示