ログ運用について

読者の皆さんはどのように社内のログを管理・運用しているでしょうか?
ログ管理は第三者による不正なアクティビティなどを検知することだけではなく社内におけるアクティビティの監査としても重要な役割を担っています。

IPA「情報セキュリティ10大脅威 2021」より引用

昨今、大企業に限らず中小規模の企業に対しても不正アクセスや攻撃が常態化しているため、自社のセキュリティ基盤はセキュアなのか?よりよいセキュリティ基盤にするために整備をしたいと考えている方は多いかと思います。

皆さんはログを自分たちが見やすい形に可視化できているでしょうか?
中にはログは取得しているが調査の際はCLI(サーバーにSSHしてtail, grepなど)でログを確認している方も多いのではないでしょうか。

今回はセキュリティ基盤の一案としてElasticsearchを使ったデータ基盤構築を紹介します。(最終的にこんな感じのものができます)

左下のデータが表示されないですが気にしないでください

※AWSのCloudWatchを触ったことがある方なら馴染みがあるかと思います

Elasticsearchとは?

Elastic社が開発している高速に検索や分析を行うためのツールです。

クラスタによる分散処理を行うことができるため動作が非常に高速で可用性に優れていることが特徴です。

Elasticには検索ロジックなどを行うElasticsearch、
データの取得、整形を行うLogstash(&Beats)、
取得したデータを自分が見やすい形で可視化するのがKibanaと
それぞれ役割が分かれています。
これらは総称で「Elastic Stack」と呼ばれています。

クラスメソッド様より引用

過去記事でElastic Stackについて解説した記事があるので興味がある方はこちらも合わせて閲覧いただければと思います。
https://www.casleyconsulting.co.jp/blog/engineer/253/
また、各コンポーネントの詳細についての最新情報は公式サイトを参照ください。

Elasticsearchの設定

AWS(EC2)を使って構築していきたいと思います。
※マネージドサービスのAmazonOpenSearchではなくEC2上にセルフマネージド版をセットアップしていきます。
OpenSearchはElasticsearchから派生(Fork)してできたサービスなのでElasticsearchの仕組みを理解しておくとOpenSearchを使う上で役に立つかと思います。
詳細はこちらの記事を閲覧してみてください

AMIは「Amazon Linux 2 AMI (HVM) – Kernel 5.10」を選択

インスタンスタイプは「t2.medium」を選択

パブリックサブネットで起動するよう設定

※画像では課金を最小限にするためにスポットインスタンスを適用しています

下の方にある「高度な設定」→「ユーザーデータ」に以下のシェルスクリプトを記述

#!/bin/bash
yum update -y
yum install -y java-1.8.0-openjdk.x86_64

# Elastic Stackインストールに必要な認証鍵を登録
cat > /etc/yum.repos.d/elasticsearch.repo <<EOF
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

# Elastic Stackインストール
yum install -y elasticsearch kibana logstash

# kibanaに必要な設定&日本語化の設定を追記
echo "server.host: 0.0.0.0" >> /etc/kibana/kibana.yml
echo "i18n.locale: "ja-JP"" >> /etc/kibana/kibana.yml

# Elasticsearchで使用するメモリ量を指定(これが無いとメモリ不足でエラーになる)
echo "-Xms1g" >> /etc/elasticsearch/jvm.options
echo "-Xmx1g" >> /etc/elasticsearch/jvm.options

# Elastic Stack起動
systemctl enable elasticsearch
systemctl start elasticsearch

systemctl enable kibana
systemctl start kibana

systemctl enable logstash
systemctl start logstash

セキュリティグループで5601(Kibana)のポートを許可する

必要に応じて22(SSH)を有効化する

使用するキーペアを確認して起動

数分待ってパブリックIPアドレス:5601をブラウザで起動

しばらくお待ちください・・・

下の方にある「サンプルデータを試す」を選択

このページが表示された場合は「独りで閲覧」を選択

3種類あるので好きなものを選択(今回は「Sample web logs」を選択)

「データを表示」→「ダッシュボード」を選択

ダッシュボードの画面が出てきたらOK

左上のハンバーガーメニューから「Discover」を選択してみる

ログについて詳細情報を閲覧できることを確認

時間帯ごとのログ数だったり特定の文言で通知などを設定することもできる

今回の記事では予めKibanaで用意されているサンプルデータを使って可視化しました。
(自分が可視化させたいログはLogstashやFilebeatで設定ください)
https://www.n-novice.com/entry/2018/03/01/005142
JSONやCSVの一定のフォーマットのファイルであればファイル単位で
分析することもできるので手軽に試したい方にもおすすめです。

最後に

今回はElastic Stackを使った最低限のログ運用基盤を構築しました。
(環境完成後も定期的に見直すことで不備やより良いやり方が出てきたりするので定期的に運用を見直すことが大切です)

本記事が誰かにとってセキュリティ基盤構築の一助になることを期待して本記事は締めとさせていただきます。

最後まで閲覧いただきありがとうございました。

HK
HK
趣味はゲームや漫画です