AkamaiのLinode Object Storageにサーバの監査ログを保管して、もしもの時に備える

# はじめに

サーバーで何か問題が発生した際、調査の一つとして設定変更や操作履歴を確認する必要があります。また、定期的なセキュリティ監査の一環として、「いつ」「誰が」「何をしたか」を記録する環境を整えることで、さまざまなリスクに対応できるようになります。

この記事では、AkamaiのLinode Object Storageを利用して監査ログを安全かつ効率的に管理する方法を解説します。


# 監査ログの重要性
サーバーの監査ログを記録することは、情報セキュリティや運用の観点から非常に重要な役割を果たします。以下に、監査ログ記録の必要性とそのメリットについて解説します。

## セキュリティ強化と運用効率化
監査ログはシステム上の操作履歴やイベントを記録し、不正アクセスや異常行動を検出するのに役立ちます。攻撃や不正操作が発生した場合、迅速な対応と被害の最小化が可能です。

## 法令遵守とコンプライアンス対応
多くの業界でアクセス管理や操作履歴の記録が義務化されています。監査ログは法的証拠としても機能し、内部・外部監査への対応をスムーズにします。

## 効果的なログ管理のポイント
ログは増加する一方なので、効率的なログ管理も求められます。不要なログを定期的に削除するポリシーを設けたり、ログ管理ツールを導入して分析を効率化することも有効です。

---

それでは Linode Object Storage にサーバーの監査ログを保管して、いつでも検索・閲覧できる環境を構築していきましょう。

# システム構成の概要

以下のシステム構成で監査ログの記録・管理を行います
![qiita-blog-img-audit-15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949489/c86e5d8a-fe54-dc35-50f2-aea163ab45e9.jpeg)

- **サーバー群**
    - 任意のLinuxサーバー
        - auditd
        - rsyslog
- **Log中継・可視化サーバー**
    - Ubuntu 24.04
        - Fluent Bit
        - OpenObserve
    - Linode Object Storage(OpenObserveで管理するログの保存先）

# 環境構築の流れ
- **Log中継・可視化サーバーの構築**
    - Linode Object Storageの準備
    - Ubuntuのインスタンス作成
    - Fluent Bitのインストールと設定
    - OpenObserveのインストールと設定
- **各サーバーの監査ログ送信設定**
    - auditdとaudispのインストールと設定
    - rsyslogのインストールと設定
- **動作確認**
    - OpenObserveへのログインとログ閲覧・検索

# 設定手順

## 1. Log中継・可視化サーバーの構築

### 1.1 Linode Object Storageの準備

以下の記事を参考に、Object Storageを設定してください

https://qiita.com/tkmt91/items/93fc1604645c46415503

:::note warn
記事内にあるCloud Access Managerの設定は不要です
:::

今回準備が必要な項目は以下です
後ほど利用するので各項目をメモしておくとスムーズです
- Object StorageのエンドポイントURL：https://\<region\>.linodeobjects.com
- Bucket名：mybucketなど任意の名前
- Region名：jp-osa-1
- Object Storage の Access Key & Secret Key (Read/Write権限)
- 監査ログを保管するディレクトリとそのPath：/logsなど任意のディレクトリ名

:::note info
Linode Object StorageのエンドポイントURLは以下のような形式になっています。
**https://\<label(Bucket)\>.\<region\>.linodeobjects.com**
メモに残す際、「label(bucket)」部分は不要ですので削除してください。
:::



---

### 1.2 Ubuntuインスタンスの作成
 今回はUbuntu 24.04のインスタンスを作成します

**新規インスタンスの作成**
Akamai Cloud Computingのダッシュボードで「Create Linode」をクリックし、以下の設定を行います
   - Region: Asia (JP, Osaka (jp-osa))
   - OS（Image）：Ubuntu 24.04 LTS
   - Linode Plan：ニーズに合わせたプランを選択します
（例：SharedプランやDedicatedプランなど）
   - rootパスワード：rootパスワードを設定します

**Ubuntu 24.04の作成実行** 
すべての設定を確認したら、画面一番下の「Create Linode」ボタンを押して、インスタンスを作成します。このプロセスには数分かかることがあります。LinodeがUbuntu 24.04を選択したリージョンにデプロイし、準備が整うまで待ちます。

:::note warn
完了後は速やかに以下の記事を参考にsshの設定をセキュアな状態へ変更してください
:::

 https://qiita.com/tarooishi/items/5f8ec51323eeed919818

<br>

**Firewallの設定**  
こちらの記事を参考にし、作成したUbuntuインスタンスにFirewallを適用してください

https://qiita.com/mtsuchih/items/cd4402e96a80e66a4581

:::note info
Inbound Ruleを追加し特定のIPのみインターネットからのアクセスを許可します
以下のポートは、ご自身の利用されるグローバルIPアドレスのみ許可します
 - TCP/22
 - TCP/5080
:::

:::note info
以下のポートは監査ログを送信するサーバーの送信元IPアドレスのみ許可します
 - TCP/5140
:::

---
### 1.3 Fluent Bitのインストールと設定

ここからは、ログ、メトリック、トレースを収集・加工するオープンソース エージェントである Fluent Bit と、ログのオブザーバービリティ(Logs, Metrics, Traces) 、を一元管理・可視化するプラットフォームの OpenObserve をインストール・設定していきます。

**Fluent BitとOpenObserve用のユーザーを作成しsudo権限を付与**
```bash
sudo adduser hoge
sudo gpasswd -a hoge sudo
```
**Fluent Bitをインストール**
apt-getでインストールするため、Server GPG key を追加します
```bash
sudo curl https://packages.fluentbit.io/fluentbit.key | gpg --dearmor -o /usr/share/keyrings/fluentbit-keyring.gpg
```

Source listに APT server entryを追加します
```bash
sudo vi /etc/apt/sources.list
```
一番下の行に以下を追記
```txt
deb [signed-by=/usr/share/keyrings/fluentbit-keyring.gpg] https://packages.fluentbit.io/ubuntu/${CODENAME} \\${CODENAME} main
```
:::note info
${CODENAME}は、Ubuntu 24.04の場合「noble」に置き換えて追記
:::


リポジトリデータベースを更新し最新バージョンをインストールを実行します
```bash
sudo apt-get update
sudo apt-get install fluent-bit
```
v3.1.10 のインストールが完了（2024年11月5日時点）
 参考：https://docs.fluentbit.io/manual/installation/linux/ubuntu
 
### 1.4 Fluent Bitを設定
 Fluent Bitの設定ファイル/etc/fluent-bit/fluent-bit.confを開き、INPUTとOUTPUTを設定します
 ```bash
 sudo vi /etc/fluent-bit/fluent-bit.conf 
 ```
デフォルト設定の以下の行を削除し、今回必要な設定を追加します
```bash
#削除するデフォルト設定
 [INPUT]
    name cpu
    tag  cpu.local

    # Read interval (sec) Default: 1
    interval_sec 1

 [OUTPUT]
     name  stdout
     match *
 
 #追加する設定
 [INPUT]                                                  #Fluent Bitへの入力設定を定義する
     Name     syslog                                      #入力形式の指定
     Parser   syslog-rfc3164                              #rfc3164形式のSyslogをパースする設定
     Path     /tmp/in_syslog                              #TCP用Unix ソケット ファイルの絶対パスを設定
     Listen   0.0.0.0                                     #待受IPアドレスの指定、0.0.0.0はany指定
     Port     5140                                        #待受ポート番号の指定
     Mode     tcp                                         #Syslogのプロトコルタイプを指定
     Tag      audit_log                                   #この入力設定にタグ名を指定
 
 [OUTPUT]                                                 #Fluent Bitからの出力設定を定義する
     Name            http                                 #出力形式の指定
     Host            127.0.0.1                            #出力先IPの指定(OpenObserveのIPアドレスを指定)
     Port            5080                                 #出力先ポートの指定(OpenObserveのポートを指定)
     URI             /api/default/audit_logs/_json        #送信先APIエンドポイントURLの指定
     Format          json                                 #送信するデータフォーマットの指定
     tls             Off                                  #httpsで通信するかの指定
     HTTP_User       hoge@hoge.hoge                       #OpenObserveのログインユーザーIDの指定
     HTTP_Passwd     hogehogehoge                         #OpenObserveのログインパスワードの指定
     Match           audit_log                            #入力設定との関連付け用にタグ名を指定
```
設定ファイルを保存し閉じる
参考：https://docs.fluentbit.io/manual/pipeline/outputs/openobserve

<br>

**systemdでFluent Bitサービスを起動しステータスを確認**
```bash
sudo systemctl start fluent-bit
sudo systemctl status fluent-bit
 ● fluent-bit.service - Fluent Bit
     Loaded: loaded (/usr/lib/systemd/system/fluent-bit.service; enabled; preset: enabled)
     Active: active (running) since Wed 2024-XX-XX XX:XX:XX UTC; 17h ago
       Docs: https://docs.fluentbit.io/manual/
   Main PID: 30303 (fluent-bit)
      Tasks: 5 (limit: 2276)
     Memory: 4.0M (peak: 4.7M)
        CPU: 7.924s
     CGroup: /system.slice/fluent-bit.service
```

systemed でFluent Bit サービスの自動起動を設定します
```bash
sudo systemctl enable fluent-bit
```
---
### 1.5 OpenObserveのインストールと設定
**OpenObserveのインストール**
以下から最新のOpenObserveをダウンロードし、/usr/local/binに解凍したファイルを置きます
https://github.com/openobserve/openobserve/releases
```bash
wget https://github.com/openobserve/openobserve/releases/download/v0.13.1-rc2/openobserve-v0.13.1-rc2-linux-amd64.tar.gz
```
ダウンロードした圧縮ファイルを /usr/local/bin/ へ解凍します
OpenObserveのバイナリファイルは以下に配置されます
- /usr/local/bin/openobserve
```bash
sudo tar zxvf ./openobserve-v0.13.1-rc2-linux-amd64.tar.gz -C /usr/local/bin
```
実行権限を付与し、v0.13.1-rc2のインストール完了（2024年11月5日時点）
```bash
sudo chmod +x /usr/local/bin/openobserve
```

<br>

**OpenObserveのsystemd用のユニットファイルを作成**
```bash
sudo vi /etc/systemd/system/openobserve.service
```
以下の内容を記載し、保存して閉じます
```bash
[Unit]
Description=The OpenObserve server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=simple
LimitNOFILE=65535
EnvironmentFile=/etc/openobserve.env
ExecStart=/usr/local/bin/openobserve
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
```

systemed をリロードして OpenObserve サービスの有効化と自動起動を設定します
```bash
systemctl daemon-reload
systemctl enable openobserve
```
参考：https://openobserve.ai/docs/operator-guide/systemd/#create-systemd-service-file

<br>

**OpenObserveの設定ファイルを作成**
```bash
sudo vi /etc/openobserve.env
```
以下の内容を記載し、保存して閉じます
```
ZO_ROOT_USER_EMAIL=hoge@hoge.hoge                              #OpenObserveのログインユーザーIDを設定（任意のメールアドレスを指定
ZO_ROOT_USER_PASSWORD=hogehogehoge                             #OpenObserveのログインパスワードを設定（任意のパスワード文字列を指定
#以下はLinode Object Storageへログを保管するための設定
ZO_LOCAL_MODE_STORAGE=s3                                       #ログの保存先を指定（S3互換のため
ZO_S3_SERVER_URL=https://<region>.linodeobjects.com            #Linode Object StorageのエンドポイントURLを指定
ZO_S3_REGION_NAME=jp-osa-1                                     #Object StorageのRegionを指定（日本の場合は2024/11/07時点「jp-osa-1」のみ
ZO_S3_ACCESS_KEY=00XX00XX00XX00XX00XX                          #Linode Object StorageのACCESS KEYを指定
ZO_S3_SECRET_KEY=QQ99QQ99QQ99QQ99QQ99QQ99QQ99QQ99QQ99QQ99      #Linode Object StorageのSECRET KEYを指定      
ZO_S3_BUCKET_NAME=mybucket                                     #Linode Object Storageに作成したBucket名を指定
ZO_S3_BUCKET_PREFIX=hoge/                                      #上記Bucket内に作成したディレクトリ名を指定（この設定は必須ではありません
```

:::note info
Linode Object StorageのエンドポイントURLは以下のような形式になっています。
**https://\<label(Bucket)\>.\<region\>.linodeobjects.com**
ZO_S3_SERVER_URLに指定する際、「label(bucket)」部分は不要ですので削除してください。
:::

<br>

**OpenObserveを起動しステータスを確認する**
```bash
sudo systemctl start openobserve
sudo systemctl status openobserve
 ● openobserve.service - The OpenObserve server
     Loaded: loaded (/etc/systemd/system/openobserve.service; enabled; preset: enabled)
     Active: active (running) since Wed 2024-XX-XX XX:XX:XX UTC; 17h ago
   Main PID: 30330 (openobserve)
      Tasks: 23 (limit: 2276)
     Memory: 428.2M (peak: 447.5M)
        CPU: 1min 51.439s
     CGroup: /system.slice/openobserve.service
```

---

## 2. 各サーバーの監査ログ送信設定
### 2.1 auditdとaudispのインストールと設定
監査ログを記録しておきたい重要なサーバーにsshでログインして、syslog転送のための設定を行います

**auditdとaudispをインストール**
auditdとaudispを以下のコマンドでインストールします　※以下は、ubuntuを想定したコマンド
```bash
apt update
apt install auditd
apt-get update
apt-get install audispd-plugins
```
auditdの設定ファイル/etc/audit/auditd.confを開き、log_formatとdispatcherを設定します
```bash
sudo vi /etc/audit/auditd.conf
```
以下を変更または追記し、保存して閉じます
```
log_format = ENRICHED  # またはRAW
dispatcher = /sbin/audispd
```

<br>

audispdを通じてsyslog転送するには、/etc/audit/plugins.d/syslog.conf または /etc/audisp/plugins.d/syslog.conf ファイルを編集します
```bash
sudo vi /etc/audit/plugins.d/syslog.conf
```
以下のように編集することでauditログのsyslog転送準備が完了です
```
active = yes
direction = out
path = /sbin/audisp-syslog
type = always
args = LOG_INFO LOG_LOCAL5
format = string
```

<br>

 
**rsyslogのインストールと設定**
リポジトリデータベースを更新し、rsyslogをインストールを実行します
```bash
sudo apt-get update
sudo apt-get install rsyslog
```

rsyslogの設定ファイル /etc/rsyslog.d/50-default.conf を開き、auditログをFluent Bitへ転送するための設定をします
```bash 
 sudo vi /etc/rsyslog.d/50-default.conf
```

以下を一番下の行に追記し、保存して閉じます
```
local5.*    @@<Fluent BitサーバーのIPアドレス>:5140             #@@はTCP転送、@はUDP転送です
```
:::note info
もし、auditログをローカルディスクに保存したくない場合は以下の設定も同時に行うことで、ローカルへのログ出力を停止できます。
```
 #*.*;auth,authpriv.none         -/var/log/syslog                        #デフォルトのこちらの行をコメントアウト
 *.*;local5.none;auth,authpriv.none              -/var/log/syslog        #「local5.none;」を追記したこちらの行を追加
```
:::

<br>

**auditdおよびrsyslogサービスを再起動**
```bash
sudo systemctl restart auditd
sudo systemctl restart rsyslog
```

---

## 3. 動作確認
### 3.1 OpenObserveで監査ログの閲覧と検索
**OpenObserveへアクセスしログイン**
http://\<UbuntuサーバーのIP\>:5080/ へブラウザーでアクセスします
![qiita-blog-img-audit-01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949489/2d8f269f-f67a-9f75-2bfa-956fc681cd0d.jpeg)

 /etc/openobserve.env で指定したログインIDとパスワードを入力しログインします
![qiita-blog-img-audit-02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949489/1adba4da-1d9a-c6bc-5149-8ebdd8eaa594.jpeg)

<br>

 **OpenObserveで監査ログの受信状況を確認**
ホームの以下の赤枠のリンクをクリックし、ストリームメニューへ移動します
![qiita-blog-img-audit-08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949489/758e73ef-9b64-cc15-43b1-5a1d928c90f1.jpeg)

虫眼鏡マークをクリックすると、
![qiita-blog-img-audit-03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949489/d59c7b20-b04f-fece-de55-064759f8aef3.jpeg)

ログ閲覧画面が表示されます
![qiita-blog-img-audit-04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949489/e7931543-f8cc-27ba-c6c1-f550a004ce63.jpeg)

**OpenObserveで監査ログを閲覧・検索**
確認したいタイムレンジを選択し、クエリー実行
過去〇〇形式の指定
![qiita-blog-img-audit-09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949489/c97cb6e8-2857-2534-54ef-ab446951333c.jpeg)

期間指定形式
![qiita-blog-img-audit-11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949489/7d6ba8c7-0b64-430d-9348-cfd20e08d8a8.jpeg)

期間指定しクエリー実行をした結果
![qiita-blog-img-audit-12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949489/c241905d-a295-aeb3-e1c4-e10ccc5e1f3f.jpeg)

<br>

**検索したい文字列を入力し、クエリー実行**
左上の「Query Editor」に検索したい文字列を入力し、「クエリーを実行」をクリックすることでログの検索が可能です

過去15分間のログに対する「type=SERVICE」の検索結果
![qiita-blog-img-audit-05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949489/1357651f-1203-d45f-67fc-27ac24e466c1.jpeg)

過去2日間のログに対する「type=SERVICE」の検索結果
![qiita-blog-img-audit-06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949489/6656364c-f3bf-13d7-e487-a862993507b5.jpeg)

Linode Object Storageに格納した大量のログへ検索を行っても、数秒で結果を取得できました

:::note info
今回のLog中継・可視化サーバーのLinode Planは「Shared 2GB」で構築しました
:::

# まとめ
サーバーの監査ログを記録することは、セキュリティ対策、法令遵守、そしてシステム運用の効率化といった多くの面で組織にメリットをもたらします。特に、セキュリティインシデントの増加が懸念される現代では、監査ログの有効活用がますます重要となっています。
SaaSのSIEMサービスやログ可視化サービスは敷居が高く、なかなか利用できないケースもあると思いますので、OSS(オープンソースソフトウェア)を上手く活用し、もしもの時に備えていきましょう。

Akamai はCDN、セキュリティ、クラウドサービスを通じ、オンラインライフの力となり守っています。本稿でご紹介したような課題やご相談があれば、お気軽にお問い合わせください

[Akamai 営業担当者へのお問い合わせ](https://www.akamai.com/ja/why-akamai/contact-us/contact-sales)


## 関連記事

アカマイ・テクノロジーズ合同会社のQiitaではAkamai Cloud Computing Services関連など開発者向けの記事を記載しております

https://qiita.com/xenbase/items/52e2956a64cedc772bd9