用 AWS Athena 查詢 CloudTrail 日誌
前言
AWS CloudTrail 是一個可以監控所有帳戶活動的工具,你可以使用 CloudTrail 來查看、搜尋、下載帳戶在各基礎設施上活動的詳細情形,藉由 Event history 你可以在 CloudTrail 主控台中對前 90 天的操作與安全事件進行故障診斷。
AWS Athena 是一個無伺服器互動的查詢服務可使用標準 SQL 輕鬆地在 Amazon Simple Storage Service (Amazon S3) 中直接分析資料,不需要管理任何基礎設施。
藉由結合兩個服務增強帳戶服務活動分析是非常強的一種方式,你可以查詢到帳戶的活動情形,例如:哪些服務是最常使用的、帳戶中IAM User的活動情形等相關資訊,可以用來識帳戶活動趨勢,並做進一步處理,或者是查詢帳戶內的資源使用情況等等。
情境
在這個 lab,你會學到如何使用 AWS Athena 去讀取 CloudTrail 位於 S3 的 logs,並且運用 SQL 語法查詢 logs,獲取帳戶活動訊息,並可另存為 CSV 檔加以儲存與利用。
建置過程
CloudTrail logs 到 AWS Athena
你可以透過 CloudTrail Console 直接自動建立 tables 讓 AWS Athena 查詢。
-
確保你已經在 CloudTrail 建立 Tail 並且正在監控你的帳戶。
-
在服務選單,選擇 CloudTrail, Event history 然後點選 Run advanced queries in Amazon Athena。
- 選擇帳號中儲存 logs 的 bucket (在 CloudTrail 服務中,Trails 指定存入的 S3 bucket)然後 建立 table。
- 按下按鈕,頁面會導到 Athena. > 如果在建置的過程中發現錯誤,可能是你已經操作過這項服務。你可以複製以下 Query sample 到儲存 CloudTrail logs 中的 Region 的 Athena console 下 SQL,一樣可以進入查詢模式。
在 Athena 中使用 SQL 語法查詢日誌
使用 AWS Athena 查詢 CloudTrail 日誌來分析 AWS 帳戶活動情形。
-
透過標準 SQL 語法來尋找資訊。
-
使用下方的範例 SQL 查詢然後 Run Query。
下方的範例查詢 IAM User : Joy 在 3 月 19 日,做了哪些關於 Create、Launch、Start、Run 的事情,並且按照時間順序排列。 可以定義自己的 SQL query查詢你感到興趣的資料。
SELECT eventtime, eventname, eventSource, awsRegion, requestID, eventID FROM cloudtrail_logs_test WHERE userIdentity.username = ‘Joy’ AND (eventname LIKE ‘%Create%’ OR eventname LIKE ‘%Launch%’ OR eventname LIKE ‘%Start%’OR eventname LIKE ‘%Run%’) AND eventtime Like ‘%2019-03-19%’ ORDER BY eventtime DESC
如果你想要更改查詢資訊,可以參考更多關於 SQL 的資訊,可以參考CloudTrail 日誌的範例查詢。
- 結果如下圖。 > 下載查詢結果,你可以點選右上角下載 csv 檔案。
從查詢結果建立新資料表
從查詢結果建立資料表,不需重複查詢原始資料。可以輕鬆使用原始資料,將查詢結果轉存為其他儲存格式,例如 Parquet 和 ORC。可以改善查詢效能並降低查詢成本。
- 儲存成另外一個 table ,點選 Create table form query。
-
輸入以下資訊然後 Next。
- Database : 選擇 default。
- Table name :
yourtablename
> 注意 : 必須 為小寫而且 只能 使用下底線的特殊符號 - Output location :
s3://mybucket/myfolder/
> 輸入文字下方有 Default location,你可以根據指示輸入 bucket 位址,請將 mybucket 以及 folder 換成你的bucket以及folder - Output data format : 選擇 Parquet
-
確認完 S3 內的 Bucket 以及 Folder 正確被創建之後 next -> 點選 Create 並且稍等約 1-2 分鐘。
- 建立 然後等待兩分鐘。 > 可以開始做進階的 SQL查詢 CloudTrail 的日誌。
儲存查詢結果
-
點選 Create 旁的 Save as 按鈕儲存查詢,Athena 會幫你保留查詢記錄。
-
輸入以下資訊:
- Name :
joydid0319
* Description :createrunstartlaunch
在 Name 和 Description 的部分可以自行做更改
- 上方的導覽列,選擇 Saved Queries。 > 你可以看到你剛剛儲存的查詢,方便之後再利用
透過儲存查詢結果,你可以持續紀錄這個查詢,沒有時間限制,直到刪除。
歷史查詢記錄
- 上方的導覽列,點選在 Saved Query 旁邊的 History。 > Athena 幫你保留你的紀錄 45 天 > 你可以在這裡看到你的查詢狀態,查詢時間以及下載結果
- 從 History 按下其中一筆 Query 紀錄,如下圖所示。
- 你將會被重新導至 Query Editor 頁面,可以直接查看當時的查詢狀況。
使用 Athena 做進階查詢
- 仔細查看 CloudTrail 建立 Athena 的 table,可以發現有些參數的格式為 string,如 requestParameters,responseelements。
-
如果想要從 JSON 格式的資訊擷取出裡頭的資料,可以使用 json_extract。舉例查詢如下: > json_extract(requestParameters, ‘$.roleName’)as roleName 為從 requestParameters 的欄位中找到 roleName 並把 roleName 取出新增一個欄位為 roleName
SELECT DISTINCT eventtime, eventname, eventSource, awsRegion, requestID, eventID, json_extract(requestParameters, ‘$.roleName’)as roleName , json_extract(requestParameters, ‘$.resourcesSet’)as resourceitem , json_extract(requestParameters, ‘$.tagSet’)as tag, json_extract(requestParameters, ‘$.routeTableId’)as routeTableId, json_extract(requestParameters, ‘$.vpcId’)as vpcId, requestParameters FROM cloudtrail_logs_test WHERE userIdentity.username = ‘Jerry’ AND (eventname LIKE ‘%Create%’ OR eventname LIKE ‘%Launch%’ OR eventname LIKE ‘%Start%’OR eventname LIKE ‘%Run%’) AND eventtime Like ‘%2019-03-19%’ ORDER BY eventtime DESC LIMIT 100
-
Run query 直到完成可以看到結果。 > 可以看見已經把原本在 requestParameters 裡的詳細資訊取出。
結論
現在你已經學會如何運用 Athena 和 Cloudtrail 兩個服務,協助你簡單的查詢、分析帳戶活動做了什麼反應,此外你可以運用查詢服務清理日誌尋找出你要的資訊,並可以再結合資訊視覺化服務( AWS Quicksight )來預測並且提升帳戶安全。
參考資料
Tag:AWS, AWS Athena, AWS Cloud Trail, CloudTrail logs, S3, serverless