[OpsJAWS: やってみようシリーズ] Sumologicの検索(CloudTrailのログ解析)
こんにちは、Partner SA酒徳です。本日のやってみようシリーズは、sumologic第2弾、sumologicを使ったサーチ方法についてご紹介頂きます。前回取り込んだCloudTrailのログ活用について、オージス総研の新谷様にご紹介頂きます。
オージス総研の新谷泰平です。クラウド環境の監視・監査環境の提案、構築を行っています。二回目となる今回は、第一回で取り込んだCloudTrailのログを使い、sumologicの基本的な検索の使い方をご説明します。第一回の内容はこちらを参照してください。
サービス・製品の説明と特徴
sumologicは完全SaaS型のログ分析ツールで、OS、ミドルウェアのログからCloudTrailに代表されるようなAWSのログを取り込んで分析することができます。
サービス・製品の特徴
主要なOS、ミドルウェア、クラウドのログを分析するためのテンプレートが用意されています。テンプレートの利用すると、取り込みからダッシュボードの利用まで短時間で可能です。 また最近なにかと話題となる機械学習に利用する機能も用意されています。
- LogReduce機能(大量ログからノイズを除去)
- SummarizeDelta機能(過去のある時点のログと比較)
- Outlier機能(ログの傾向から異常値を検索)
- Predict機能(ログの傾向から将来の値を予測)
設定(構築)する内容
本日は、下記の流れでご説明していきます。
- sumologicの基本的な検索方法
- CloudTrailのDashboardからログを検索
1. まずはsumologicを使った検索の方法をご説明します。
1.1. sumologicにアクセスし、[Email]と[Password]を入力しsumologicにログインします。
1.2. sumologicを使ってログを検索するには、Searchのページに移動します。Searchのページに移動するには上部の[Search]→[Search]と選択します。
1.3. Searchページのご説明をします。検索を行うために検索用のフォームにクエリを入力します。続いて検索対象の期間を入力し、[Start]を押下することで検索が始まります。検索が始まると時間ごとのログの量がColumnチャートで表示され、ページ下部に検索した結果が表示されます。
1.4. 基本的なログの検索方法として、下記の4つの検索クエリについてご紹介します。
- count
- parse
- where
- sort
1.5. まずは[count]を使って取り込んだログのカウントをしてみたいと思います。 [_sourceCategory="cloudtrail_aws_logs"]と入力することで、第一回の時に取り込んだCloudTrailのログを対象に検索を行ないます。[_sourceCategory="cloudtrail_aws_logs" | count]のように”|”(パイプ)の後に[count]を入力することで取り込んだログのレコード数をカウントすることができます。
_sourceCategory="cloudtrail_aws_logs" | count |
1.6. 次は、取り込んだログから必要な箇所を抜き出して、条件に合うものを抽出してみたいと思います。ログから必要な箇所を抜き出すには[parse]を、条件に合うものを探すためには[where]を使います。[parse "\"eventSource\":\"*\"" as eventsource]と入力することでログの中から[”eventSource: “\”*\”]のワイルドカードの部分に該当する部分を抜き出し、[where eventsource = "cloudformation.amazonaws.com"]と条件を付与することで、[eventsource]が["cloudformation.amazonaws.com"]に一致するもののみ抽出することができます。
_sourceCategory="cloudtrail_aws_logs" | parse "\"eventSource\":\"*\"" as eventsource | where eventsource = "cloudformation.amazonaws.com" |
1.7. 続いてログを並び替えてみたいと思います。並び替えるには[sort]を使います。先ほどと同様にログの中から必要な箇所を抜き出し、抜き出した項目について[sort by eventsource]を使うことで、[eventsource]を並び替えることができます。
_sourceCategory="cloudtrail_aws_logs" | parse "\"eventSource\":\"*\"" as eventsource | sort by eventsource |
1.8. 最後に検索するためのクエリについていくつかご紹介します。下記のクエリ以外にも色々なクエリを組み合わせてログを検索していきます。
検索クエリ |
用途 |
使用例 |
parse |
ログの中から特定(”*”ワイルドカード)の部分を取り出す |
parse “GET * HTTP/1.1” as url |
json |
json形式のログから指定したvalueを取り出す |
json “type” |
where |
条件がtrueとなるログを選択する |
where _count > 100 |
timeslice |
指定期間のログを単位時間でグルーピングする |
timeslice by 1m |
count |
該当するログのレコード数をカウントする |
count by url |
sort |
結果を降順でソートする 昇順にするには[asc]を追加する |
sort by _count(降順) sort by _count asc(昇順) |
top |
該当するログの上位を抽出する |
top 10 src_ip |
transpose |
Columnチャートを作成するときに行と列を指定する |
transpose row _timeslice column ipaddress |
他にも色々な検索クエリが用意されているので詳細はこちらをご参照ください。
以上がsumologicを使ったログの検索方法になります。次に具体的なクエリの使い方をCloudTrailのログを使ってご説明していきます。
2. 続いてCloudTrailのDashboardからさらにログを検索する方法に移りたいと思います。第一回で取り込んだCloudTrailのログから検索して、情報を絞り込んでいく方法をご説明します。CloudTrailのログにはアカウントID(AccountID)やユーザ名(username)などのIAM情報(userIdentity)、操作した時間(eventTime)、操作内容(eventname)、リージョン(aws_Region)、操作元のIPアドレス(sourceIPAddress)などの情報が入っています。
2.1. 第一回のブログで作成したCloudTrailのDashboardのうち[AWS CloudTrail - Operations]を開きます。[Library]→[Personal] →[AWS CloudTrail] →[AWS CloudTrail - Operations]と選択します。第一回のブログは以下より参照してください。
2.2. Dashboardが表示され、色々なチャートが表示されます。ここでは、[Events by AWS Region]に注目してみたいと思います。普段東京リージョンしか使っていない場合、他のリージョンでイベントが発生しないはずなのに、イベントが発生しているようです。具体的なイベントを調べるためにさらに情報を絞り込んでみたいと思います。図の赤枠で囲んだ矢印アイコンのところを押下してください。押下すると検索が始まります。
2.3. Searchページに戻って検索が始まり、結果が表示されると思います。Dashboardに各種チャートが表示されていますが、それらはsumologicの検索クエリがバックグラウンドで実行され、結果をチャートにしたものが表示されています。[Events by AWS Region]に設定されている検索クエリを説明すると、[parse]というのはログの中から必要な箇所を抜き出すときに使います。ログの[”awsRegion”: “*”]のワイルドカードに該当する箇所を抜き出すという意味になります。[timeslice]はログを1時間単位でグルーピングするという意味になります。[count by _timeslice,aws_region]と入力することで、1時間ごとにグルーピングした単位でaws_regionごとにイベントをカウントしてくれます。最後の[transpose]でX軸が時間、Y軸がaws_regionごとのイベントの数になりチャート化された結果が表示されます。
2.4. ここから東京リージョンでのイベントを除いていきます。東京リージョンを除くためにクエリを図のように変更します。合わせて[parse “\”userName\”:\”*\””]を使って誰が操作したのかというのも合わせて抜き出したい思います。東京リージョンを除くためには[where]を使います。[where aws_region != "ap-northeast-1"]と入力することで、ログから抜き出した[aws_region]が”ap-northeast-1”(東京リージョン)でないログを検索します。
_sourceCategory=cloudtrail_aws_logs awsRegion | parse "awsRegion\":\"*\"" as aws_Region | timeslice 1h | where aws_region != "ap-northeast-1" | parse "\"userName\":\"*\"" as username |
2.5. [Start]を押下すると検索が始まり、図のような結果が得られます。赤枠で囲んだところにログから抜き出した[aws_region]と[username]が表示されます。
2.6. 午後2時頃から午後4時頃にかけて多くのイベントが発生しているようなので、この時間に絞って検索してみたいと思います。検索対象の時間を絞るためには[Start]ボタンのとなりにあるテキストボックスに該当の時間を入力します。ここでは午後2時頃から午後4時頃にしぼりたいと思います。入力し終わったら[Start]を押下します。
2.7. [aws_region]と[username]だけでは誰がどこのリージョンに対して操作したかしかわからないので、さらにログを深く調べてみたいと思います。深く調べるためにログの中から[eventSource]を抜き出してみたいと思います。[eventSource]を抜き出すためにクエリを図のように変更し、[Start]を押下します。[eventSource]には、[iam.amazonaws.com]や[ec2.amazonaws.com]などAWS上のサービス名が入ります。
_sourceCategory=cloudtrail_aws_logs awsRegion | parse "awsRegion\":\"*\"" as aws_Region | timeslice 1h | where aws_region != "ap-northeast-1" | parse "\"userName\":\"*\"" as username | parse "\"eventSource\":\"*\"" as eventsource |
2.8. 検索結果が表示され、午後2時から午後4時の間でどのユーザがどのサービスに対して操作を行なったか確認出来るようになりました。
2.9. ここでもう一つ検索方法をご紹介します。画面左側に[Display Fields]があると思います。
2.10. この中から[eventsource]を押下するとそのフィールドにある具体的なログの種類が表示されます。[#]がログのレコード数になります。特にIAM(iam.amazonaws.com)に対する操作が多いことがわかりました。そこでIAMに対する操作を深掘りするために[iam.amazonaws.com]を押下します。
2.11. 押下すると[| where eventsource = “iam.amazonaws.com”]が自動的に入力され検索が始まります。
_sourceCategory=cloudtrail_aws_logs awsRegion | parse "awsRegion\":\"*\"" as aws_Region | timeslice 1h | where aws_region != "ap-northeast-1" | parse "\"userName\":\"*\"" as username | parse "\"eventSource\":\"*\"" as eventsource | where eventsource = "iam.amazonaws.com" |
2.12. 結果として[eventsource]が[iam.amazonaws.com]のログを検索してくれます。
2.13. ここからさらに深掘りをして、具体的にどのような操作があったかを調べていきます。そのために、検索クエリに[eventName]を取り出すクエリを指定します。
_sourceCategory=cloudtrail_aws_logs awsRegion | parse "awsRegion\":\"*\"" as aws_Region | timeslice 1h | where aws_region != "ap-northeast-1" | parse "\"userName\":\"*\"" as username | parse "\"eventSource\":\"*\"" as eventsource | where eventsource = "iam.amazonaws.com" | parse "\"eventName\":\"*\"" as eventname |
2.14. 検索結果について、[Display Fields]の[eventname]を押下します。普段使うことのない東京リージョン以外でRoleの操作が行われているようです。そこで[PutRolePolicy]を押下して、更に検索してみます。
2.15. 自動的に[| where eventname = "PutRolePolicy"]が入力され、最終的にクエリは下記のようになるかと思います。
_sourceCategory=cloudtrail_aws_logs awsRegion | parse "awsRegion\":\"*\"" as aws_Region | timeslice 1h | where aws_region != "ap-northeast-1" | parse "\"userName\":\"*\"" as username | parse "\"eventSource\":\"*\"" as eventsource | where eventsource = "iam.amazonaws.com" | parse "\"eventName\":\"*\"" as eventname | where eventname = "PutRolePolicy" |
2.16. 検索結果にユーザや操作した時間等が表示されていますので、当該ユーザに操作を確認し、意図した操作かどうか確認できるようになりました。
以上がCloudTrailのログを使った検索方法のご説明になります。いかがだったでしょうか。Dashboardから検索を始め、ユーザ名、操作内容を深掘りし、気になるログを見つけることができました。
次回はVCP Flow Logの取り込みから、検索までをご紹介させて頂きます。是非、次回もお楽しみに!
ライセンス体系とコスト
オージス総研にてsumologicのライセンス費用と運用をセットにしてサービス提供しています。
- 初期費用:\100,000
- 月額費用:\98,000~(1GB/30日保管)
- 質問や詳細なご要望はお気軽にお問合せください。
お問い合わせ先
株式会社オージス総研
- URL: http://www.ogis-ri.co.jp/
- E-mail: AWS-QA@ogis-ri.co.jp
- TEL: 03-6712-1201(東京)、052-209-9390(名古屋)、06-6871-8054(大阪)
****
OpsJAWS メインページはこちら。
クラウド運用にご興味ある方は、こちらからOpsJAWSに登録ください。
コメント