Partner SAの小梁川です。やってみようシリーズも増えてきましたので、タイムリーに情報を届けるためにブログ執筆に参加です。
さて、夏休みも終わり、日に日に秋を感じる日々がましていますが、運用に休みはありません。本日のテーマはsumologicでのログ相関分析になります。
運用要件としてログは取得しているが、取ったログをもっと有効に使いたい方と考えている方、ぜひご一読を。
設定(構築)する内容
6回目となる今回は、複数のログを使って相関分析を行ってみたいと思います。相関分析の対象とするログは、 Bastionサーバのアクセスログと操作ログとします。Bastionサーバは、クラウドデザインパターンのOndemand Activationパターンでも紹介されており、多くの方が利用されていると思います。
アクセスログは、ssh secureログ、操作ログはプロセスアカウンティングログ(psacct)を利用します。BastionサーバのOSはAmazon Linuxとします。
今回の主な実施内容は次のとおりです。
- Bastionサーバのアクセスログをsumologicへの取り込みます
- Bastionサーバの操作ログをsumologicへの取り込みます
- アクセスログと操作ログからユーザがログインからログアウトまでどのような操作を実施したか検索します
- まずは、BastionサーバのsecureログをS3バケットに保存します。色々な方法があると思いますが、ここではlogrotateのタイミングでS3バケットに保存するように、/etc/logrotate.d/secureファイルを用意します。
実行されると、アクセスログがS3バケットの”securelog”に保存されます。環境に合わせて、S3バケットは事前に作成してください。また、Bastionサーバには、IAMロールを設定してawsコマンドが実行できるようにしておいてください。
/var/log/secure { sharedscripts daily dateext rotate 31 create 0600 root root postrotate LOG=secure-`date +%Y%m%d` aws s3 cp /var/log/$LOG s3://securelog /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript } |
- 次に、アクセスログと同様に、操作ログもS3バケットに保存します。こちらも同様にlogrotateのタイミングで保存されるように、/etc/logrotate.d/pacctファイルを用意しています。
実行されると、操作がS3バケットの”psacctlog”に保存されます。環境に合わせて、S3バケットは事前に作成してください。
/var/account/pacct { prerotate LOG=pacct-`date +%Y%m%d`.log lastcomm > /var/account/$LOG aws s3 cp /var/account/$LOG s3://psacctlog endscript compress delaycompress notifempty daily rotate 31 create 0600 root root postrotate /usr/sbin/accton /var/account/pacct endscript } |
Amazon Linuxの場合、操作ログを取得するサービスpsacctはデフォルトでインストールされていますが、サービスが起動していませんので起動するようにしてください。
- S3バケットに保存したログをsumologicに取り込んでいきます。
- sumologic(https://service.au.sumologic.com/ui/)にアクセスし、[Email]と[Password]を入力し、[Sign in]をクリックしログインします。sumologicのアカウントを作成していない場合は、第1回目のブログ(http://aws.typepad.com/aws_partner_sa/2016/06/opsjaws-try-ops-with-sumologic-1.html)を参考に作成してください。
- [Manage] →[Collection]をクリックします。
- [Add Collector]をクリックします。
- [Hosted Collector]をクリックします。
- Collectorの名称を設定します。任意の”Name”を設定し、[Save]をクリックします。ここでは、”Bastion”と設定しています。
- [OK]をクリックします。
- [Amazon S3]をクリックします。
- アクセスログのCollectionを設定し、[Save]をクリックします。
Name |
任意の名称を設定します。ここでは、”secure”と設定しています |
Bucket Name |
ログを保存するS3バケット名を設定します |
Path Expression |
ログのファイル名となります。”secure-*”と設定すればよいでしょう |
Source Category |
任意の名称を設定します。ここでは、“bastion/secure”と設定します |
Access Key ID |
S3バケットにアクセスするAWSのアクセスキーを設定します |
Secret Access Key |
S3バケットにアクセスするAWSのシークレットキーを設定します |
Specify a format |
ログの時刻フォーマット”MMM dd HH:mm:ss”を設定します |
- 引き続き、操作ログの設定を行います。
- secureログと同じく、手順10、11を行います。
- 操作ログのCollectionを設定し、[Save]をクリックします。
Name |
任意の名称を設定します。ここでは、”psacct”と設定しています |
Bucket Name |
ログを保存するS3バケット名を設定します |
Path Expression |
ログのファイル名となります。”pacct-*.log”と設定すればよいでしょう |
Source Category |
任意の名称を設定します。ここでは、“bastion/psacct”と設定します |
Access Key ID |
S3バケットにアクセスするAWSのアクセスキーを設定します |
Secret Access Key |
S3バケットにアクセスするAWSのシークレットキーを設定します |
Specify a format |
ログの時刻フォーマット”MMM dd HH:mm”を設定します |
- S3バケットにログが保存されていれば、しばらくするとsumologicに取り込まれます。
- ようやく、複数ログの相関分析の準備が整ったので、順番に検索を行います。
- [Search]ページに移動します。
- はじめに、アクセスログと操作ログの2つのログを検索してみます。複数ログは、以下の様に”or”を指定することで検索できます。
_sourceCategory=bastion/secure or _sourceCategory=bastion/psacct |
あるいは、ワイルドカードを使った指定も可能です。
_sourceCategory=bastion/* |
- 次に、操作ログをparseします。正規表現を使ってparseを行うことで、操作ログに含まれる操作名(proc)とユーザ名(user)を抽出します。
_sourceCategory=bastion/secure or _sourceCategory=bastion/psacct | parse regex "^(?<proc>[^ ]+)\s+[SFCDX\s]*\s+(?<user>[^ ]+)\s+[^ ]+\s+[^ ]+\s+secs\s+(?<date>.*)$" nodrop |
正規表現を使ったparseについては、以下を参照してください。
https://help.sumologic.com/Search/Search_Query_Language/Parse_Operators/Parse_Regex_or_Extract_Operator
- さらに続けて、アクセスログを正規表現でparseします。これでアクセスログに含まれる操作名(proc)とユーザ名(user)を抽出します。今回の操作名は、sshセッションのログイン”opened”とログアウト”closed”を取得する正規表現としています。
_sourceCategory=bastion/secure or _sourceCategory=bastion/psacct | parse regex "^(?<proc>[^ ]+)\s+[SFCDX\s]*\s+(?<user>[^ ]+)\s+[^ ]+\s+[^ ]+\s+secs\s+(?<date>.*)$" nodrop | parse regex "pam_unix\(sshd:session\):\s+session\s+(?<proc>[^ ]+) for user (?<user>[^ ]+)" |
これで、操作ログとアクセスログがparseできました。
- 最後に、操作ログとアクセスログをユーザ名(user)で関連づけて、どのような操作があったか確認します。そのためには、transactionオペレータを使用します。transactionオペレータを使うことで関連するログを横断的に検索することができます。transactionオペレータの詳細は、以下を参照してください。
https://help.sumologic.com/Search/Search_Query_Language/Transaction_Analytics
_sourceCategory=bastion/secure or _sourceCategory=bastion/psacct | parse regex "^(?<proc>[^ ]+)\s+[SFCDX\s]*\s+(?<user>[^ ]+)\s+[^ ]+\s+[^ ]+\s+secs\s+(?<date>.*)$" nodrop | parse regex "pam_unix\(sshd:session\):\s+session\s+(?<proc>[^ ]+) for user (?<user>[^ ]+)" | transaction on user with states opened, sh, bash, sshd, ls, id, find, grep, cp, mv, rm, closed in proc |
これで、Bastionサーバに誰が何回アクセスして、どのような操作を何回実施したかを確認することができました。
まとめ
- sumologicでは、複数のログを簡単に横断的に検索することができます
- 今回は、Bastionサーバのアクセスログと操作ログを使って、ユーザがログインからログアウトまでにどのような操作を実施している確認しました
- また、アクセスログと操作ログのユーザ名をtransactionオペレータで関連づけましたが、セッションIDやIPアドレスなど、複数ログで一意になる値であれば、どのようなものでも利用できます
- 是非、みなさんも色々なログを使って相関分析を試してみてください
参考情報
- AWSでの導入実績
- 大容量ファイル転送サービスである「宅ふぁいる便」のログ監査に利用し、AWS操作権限をもつ運用担当者が未承認の作業を実施していないか、時間外の作業を実施していないかを確認しています。
- AWS上に構築し、多くの部門や開発パートナーが携わる開発環境に対して、セキュリティガイドライン外の操作がないか確認しています。
http://dc.ogis-ri.co.jp/securitylogpack
- ライセンス体系とコスト
- オージス総研にてsumologicのライセンス費用と運用をセットにしてサービス提供しています。
- 初期費用:\100,000
- 月額費用:\98,000~(1GB/30日保管)
- 質問や詳細なご要望はお気軽にお問合せください
- オージス総研にてsumologicのライセンス費用と運用をセットにしてサービス提供しています。
お問い合わせ先
- 株式会社オージス総研
- URL: http://www.ogis-ri.co.jp/
- E-mail: [email protected]
- TEL: 03-6712-1201(東京)、052-209-9390(名古屋)、06-6871-8054(大阪)
--
OpsJAWSメインページ (@opsjaws)
クラウド運用に興味のある方はユーザ登録とイベント参加下さい。