1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Akamai's cloud computing servicesでULSを構築し、SIA(ETP)のログファイルをサーバーに保存する

Last updated at Posted at 2023-07-03

Akamai Unified Log Streamer (ULS)とは

Akamai Unified Log Streamer (ULS)は Akamai EAA/SIA(ETP)/MFA/Guardicore/Akamai's cloud computing servicesのログを、SplunkなどのSIEMと連携するためのオープンソースのプロダクトです。
EAA/SIA(ETP)/MFA/Guardicore/Akamai's cloud computing servicesはそれぞれで管理用のAPIを持ち、ログも取得できます。
そのため、SIEM連携するためにはそれぞれのAPIに対応したログ取得方法が必要になります。
Akamai ULSは、それぞれのAPIを利用してログを収集し、SIEMへ一括で転送することができます。
今回の構築ではSecure Internet Access(SIA)、旧製品名Enterprise Threat Protector(ETP)のDNSログをLinodeのインスタンス内に保存する方法について紹介します。

image.png

Linode インスタンスを構築する

Akamai Cloud Managerにログインし、Linodeインスタンスを起動します。

image.png

今回は以下の設定で起動します。

Image : Ubuntu 22.04 LTS
Region : Tokyo
Linode Plan : Dedicated 4 GB

起動したサーバーにSSHでアクセスをします。

追加ディスクを付与

以下の記事を参考に1TBのディスクを付与します。

root@localhost:~# df -h /mnt/uls/
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc        984G   28K  934G   1% /mnt/uls

クレデンシャルの設定

以下の記事を参考にAPIクレデンシャルを発行します。

発行したAPIクレデンシャルをサーバー内のファイルに記載します。

root@localhost:~# vim /root/.edgerc

[default]
; Akamai {OPEN} API credentials
client_secret = XXXXXXXXXXXXX
host = XXXXXXXXXXXXXXXXXXXXX.luna.akamaiapis.net
access_token = akab-XXXXXXXXXXXXXXXXX
client_token = akab-XXXXXXXXXXXXXXXXX

Akamai Control CenterのハンバーガーメニューからEnterprise Centerにアクセスします。

以下のメニューを選択して、URL内の番号をコピーします。

image.png

コピーした番号を.edgercに追記します。

root@localhost:~# vim /root/.edgerc

; ETP Config ID (required for ETP usage, can be obtained from the Akamai Web Interface)
etp_config_id = XXXXXXXX

ULSをインストール

インストールに必要なパッケージをインストールします。

apt update
apt install python3-pip

ULSをインストールします。

curl -O https://raw.githubusercontent.com/akamai/uls/main/scripts/get-uls.sh
bash get-uls.sh

正しくインストールされているか動作確認します。

python3 uls/bin/uls.py --help

SIAで取得するログ

今回はSIAのDNS保護を利用した際のログを保存したいため、THREAT/AUP/DNSのログを保存します。

SIAのログ種類

ディレクトリの作成

3つのディレクトリを作成します。

mkdir -p /mnt/uls/sia/{aup,dns,threat}

ログ圧縮用のスクリプトを作成します。

Githubのドキュメントを参考に圧縮スクリプトを用意します。

スクリプトを配置するディレクトリを作成します。

mkdir /opt/sia

DNSのスクリプトを作成します。

vim /opt/sia/dns.sh

#!/bin/bash

target_dir="/mnt/uls/sia/dns"
file_name="log_dns_$(date +%Y%M%d-%H%m%S).gz"

if [[ -z $1 ]] ; then
        echo "No file given - please specify absolute path"
        exit 1
fi
gzip -cvf $1 > ${target_dir=}/${file_name=}
echo "->  ${target_dir=}/${file_name=}"
rm $1

# 90日経過したログは削除
find $target_dir -type f -mtime +90 -exec rm -f {} \;

AUPのスクリプトを作成します。

vim /opt/sia/aup.sh

#!/bin/bash

target_dir="/mnt/uls/sia/aup"
file_name="log_aup_$(date +%Y%M%d-%H%m%S).gz"

if [[ -z $1 ]] ; then
        echo "No file given - please specify absolute path"
        exit 1
fi
gzip -cvf $1 > ${target_dir=}/${file_name=}
echo "->  ${target_dir=}/${file_name=}"
rm $1

# 90日経過したログは削除
find $target_dir -type f -mtime +90 -exec rm -f {} \;

THREATのスクリプトを作成します。

vim /opt/sia/threat.sh

#!/bin/bash

target_dir="/mnt/uls/sia/threat"
file_name="log_threat_$(date +%Y%M%d-%H%m%S).gz"

if [[ -z $1 ]] ; then
        echo "No file given - please specify absolute path"
        exit 1
fi
gzip -cvf $1 > ${target_dir=}/${file_name=}
echo "->  ${target_dir=}/${file_name=}"
rm $1

# 90日経過したログは削除
find $target_dir -type f -mtime +90 -exec rm -f {} \;

実行権限を付与します。

chmod +x /opt/sia/*

サービススクリプトの作成

自動起動できるようにサービススクリプトを作成します。

コマンドのオプション説明のドキュメントは以下になります。

オプション 説明
--input etp SIA(ETP)のAPIを利用します
--feed dns/aup/threat 取得するログを選択します
--output file ファイルに保存します
--filename /mnt/uls/sia/dns/dns.log 出力先のファイル名を設定します
--filehandler SIZE ファイルサイズでローテートします
--filemaxbytes 10240000 10MBでローテートします
--filebackupcount 1 保存するバックアップファイルを設定します
--fileaction "/opt/sia/dns.sh '%%s'" ローテート時に指定したスクリプトを実行します

DNSのサービススクリプトを作成します。

vim /etc/systemd/system/uls-sia-dns.service

# ULS as systemd service example
# uls-sia-dns.service

[Unit]
Description=Akamai ULS feed SIA/DNS
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=root
WorkingDirectory=/root/uls
ExecStart=/usr/bin/python3 /root/uls/bin/uls.py --input etp --feed dns --output file --filename /mnt/uls/sia/dns/dns.log --filehandler SIZE --filemaxbytes 10240000 --filebackupcount 1 --fileaction "/opt/sia/dns.sh '%%s'"

[Install]
WantedBy=multi-user.target

AUPのサービススクリプトを作成します。

vim /etc/systemd/system/uls-sia-aup.service

# ULS as systemd service example
# uls-sia-aup.service

[Unit]
Description=Akamai ULS feed SIA/AUP
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=root
WorkingDirectory=/root/uls
ExecStart=/usr/bin/python3 /root/uls/bin/uls.py --input etp --feed aup --output file --filename /mnt/uls/sia/aup/aup.log --filehandler SIZE --filemaxbytes 10240000 --filebackupcount 1 --fileaction "/opt/sia/aup.sh '%%s'"

[Install]
WantedBy=multi-user.target

THREATのサービススクリプトを作成します。

vim /etc/systemd/system/uls-sia-threat.service

# ULS as systemd service example
# uls-sia-threat.service

[Unit]
Description=Akamai ULS feed SIA/THREAT
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=root
WorkingDirectory=/root/uls
ExecStart=/usr/bin/python3 /root/uls/bin/uls.py --input etp --feed threat --output file --filename /mnt/uls/sia/threat/threat.log --filehandler SIZE --filemaxbytes 10240000 --filebackupcount 1 --fileaction "/opt/sia/threat.sh '%%s'"

[Install]
WantedBy=multi-user.target

サービスを起動します。

systemctl daemon-reload
systemctl start uls-sia-dns.service
systemctl start uls-sia-aup.service
systemctl start uls-sia-threat.service
systemctl enable uls-sia-dns.service
systemctl enable uls-sia-aup.service
systemctl enable uls-sia-threat.service

確認

ログが蓄積されていることを確認します。

root@localhost:~# ls -lh /mnt/uls/sia/dns/ | head -10
total 219M
-rw-r--r-- 1 root root 2.0M Jun 14 05:30 dns.log
-rw-r--r-- 1 root root 404K Jun 13 00:00 log_dns_20230013-000606.gz
-rw-r--r-- 1 root root 401K Jun 13 11:00 log_dns_20230013-110619.gz
-rw-r--r-- 1 root root 403K Jun 13 21:00 log_dns_20230013-210608.gz
-rw-r--r-- 1 root root 421K Jun 13 23:00 log_dns_20230013-230608.gz
-rw-r--r-- 1 root root 396K Jun 14 05:00 log_dns_20230014-050615.gz
-rw-r--r-- 1 root root 406K Jun 13 01:01 log_dns_20230113-010606.gz
-rw-r--r-- 1 root root 411K Jun 13 03:01 log_dns_20230113-030606.gz
-rw-r--r-- 1 root root 383K Jun 13 04:01 log_dns_20230113-040608.gz

tips

今回のBashスクリプトでは90日経過したログを削除しましたが、ログを長期的に保存する場合にはLinode Object Storageに格納することも可能です。
以下のようにスクリプトを修正することで、転送することができます。
ファイルの転送にはs5cmdのインストールが必要です。

s3_bucket="s3://mybucket/path"  # ここに適切なバケット名を指定してください
s3_endpoint="https://us-southeast-1.linodeobjects.com"  # ここに適切なエンドポイント URL を指定してください

# Check if there are any files older than 3 months
old_files=$(find $target_dir -type f -mtime +90)

# If old files exist, copy them to the S3 bucket and then delete them
if [[ -n $old_files ]] ; then
        for file in $old_files; do
                s5cmd --endpoint-url $s3_endpoint cp "$file" "$s3_bucket"
                rm -f "$file"
        done
fi

まとめ

Akamai Unified Log Streamerを利用することで、ログを転送するのみではなくログを蓄積することも可能です。
また、Linode Object Storageを活用することで、長期的なログの保存も低価格で実現することができます。

関連記事

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?