LoginSignup
2
0

More than 1 year has passed since last update.

Akamai EAA/SIA/MFAのログをSIEMに連携するAkamai ULSをLinode Kubernetes Engineで構築する

Last updated at Posted at 2022-10-11

Akamai Unified Log Streamer (ULS)とは

Akamai Unified Log Streamer (ULS)は Akamai EAA/SIA(ETP)/MFAのログを、SplunkなどのSIEMを連携するためのオープンソースのプロダクトです。
Akamai EAA/SIA(ETP)/MFAはそれぞれで管理用のAPIを持ち、ログも取得できます。
そのため、SIEM連携するためにはそれぞれのAPIに対応したログ取得方法が必要になります。
Akamai ULSは、それぞれのAPIを利用してログを収集し、SIEMへ一括で転送することができます。

image.png

EAA(Enterprise Application Access)
アイデンティティ認識型プロキシにより、IaaS、SaaSおよび、社内DCなどのオンプレミス環境に対して、セキュアなアクセスを提供します。
https://www.akamai.com/ja/products/enterprise-application-access

SIA (Secure Internet Access) : 旧製品名ETP
「DNSセキュリティ」と「セキュアWebゲートウェイ(SWG)」により、デバイスをマルウェアサイト、フィッシングサイトから保護し、安全なインターネットアクセスを提供します。
https://www.akamai.com/ja/products/secure-internet-access

Akamai MFA
FIDOに準拠したMFAにより、従業員アカウントの乗っ取りやデータ漏えいを徹底的に防ぐフィッシング対抗の多要素認証機能を提供します。
https://www.akamai.com/ja/products/akamai-mfa

Akamai ULSで取得できるログの種類と送信方法

以下はAkamai EAA/SIA(ETP)/MFAで取得できるログの種類の一覧になります。
表のLogの列を選択するとサンプルのLogFormatが確認できます。
また、ログ取得に必要なAPIの種別を記載しています。

Product Log API
EAA ACCESS EAA Legacy API
EAA ADMIN EAA Legacy API
EAA CONHEALTH EAA {OPEN} API
EAA DEVINV EAA {OPEN} API
SIA(ETP) THREAT ETP {OPEN} API Reporting
SIA(ETP) AUP ETP {OPEN} API Reporting
SIA(ETP) DNS ETP {OPEN} API Reporting
SIA(ETP) PROXY ETP {OPEN} API Reporting
MFA EVENT MFA Integration for logging

サポートするログの送信方法はこちらになります。

送信方法 コマンドオプション
TCP Socket (tcp://host:port) --output tcp
UDP Socket (udp://host:port) --output udp
HTTP and HTTPS URL (http(s)://host:port/path) (Authentication対応) --output http
RAW (>STDOUT) --output raw
FILE (ローカルのファイルに書き込み) --output file

Linode Kubernetes Engine (LKE) で Akamai ULSを構築してSplunkのログを送る

Akamai ULSはログをSplunk(SIEM)に送るためのサーバーが必要となります。
構築するには以下の4つの方法のうちいずれかで対応する必要があります。

今回は、Linode Kubernetes Engineを利用して、Akamai ULSを構築する方法を紹介します。

SplunkのData Inputを設定する

Splunkにログを送信するためにData Inputsの設定をします。

image.png

Akamai ULSではHTTPでのログ送信に対応しているため、HTTP Event Collectorを作成します。
また、Akamai ULSはTCP,UDPの送信にも対応しています。

image.png

わかりやすいように転送したいログの種類を名前にしてNextを選択します。
今回はEAAのAccessログを取得する設定になります。

image.png

Source typeをjsonとして設定します。

image.png

問題なければSubmitを選択します。

image.png

発行されたTokenを控えておきます。

image.png

Linode Kubernetes Engine (LKE) を構築する

Akamai ULSを実行するためのKubernetes環境をLinodeで用意します。

コンソールからKubernetesを選択し、Create Clusterを選択します。

image.png

今回は最小のインスタンスを選択し、Node数は3台にします。
Linodeでは、KubernetesのControl Planeの料金はシングル構成であれば無料で利用できます。

image.png

kubectlを利用するため、Kubeconfigをダウンロードします。

image.png

ダウンロードしたConfigファイルをkubectlが利用できるようにexportします

export KUBECONFIG=test-kubeconfig.yaml

akamai ulsを利用するためのnamespaceを作成します。

kubectl create namespace akamai-uls

edgercを用意する

各APIにアクセスするためにアクセスキーの発行を行います。
すべてのAPIキーを発行する必要はありません、取得したい製品EAA/SIA(ETP)/MFAに合わせて設定してください。

EAAの場合
EAA Legacy APIのアクセスキー発行
EAA {OPEN} APIのアクセスキー発行

SIA(ETP)の場合
ETP {OPEN} API Reportingのアクセスキー発行

MFAの場合
MFA Integration for loggingのアクセスキー発行

発行したアクセスキーの情報をedgercのファイルに記載します。

vim .edgerc

[default]
; EAA Legacy APIで発行した情報
eaa_api_host = manage.akamai-access.com
eaa_api_key = xxxxxxxxxxxxxxxxx
eaa_api_secret = xxxxxxxxxxxxxxxxxxxxxxxxxx

; EAAのContract_IDを記載
contract_id = xxxx

; Akamai {OPEN} API で発行した情報
client_secret = XXXXXXXXXXXXXXXXXXXXXXXXXXX
host = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.luna.akamaiapis.net
access_token = XXXXXXXXXXXXXXXXXXXXXXXXXXXX
client_token = XXXXXXXXXXXXXXXXXXXXXXXXXXXX

;ETP {OPEN} API Reportingで取得した ETP Config IDの番号 
etp_config_id = 111111

; MFA Integration for loggingで発行した情報
mfa_integration_id = app_XXXXXXXXXXXXXXXXXX
mfa_signing_key = XXXXXXXXXXXXXXXXXXXXXXXxxxx

Podからアクセスキーの情報を取得できるようにするため、Secretを作成します。

kubectl create secret generic akamai-edgerc -n akamai-uls --from-file=edgerc=./.edgerc

Akamai ULSをインストールする

インストールにはHelmを利用します。

HelmのファイルをGitから取得します。

git clone git@github.com:akamai/uls.git
cp -r uls/docs/examples/kubernetes/helm/akamai-uls ./

Helmで利用するSplunkにログを転送するための設定ファイルを記載します。
今回はEAAのAccessログを取得する設定になります。
複数設定する必要がある場合には、設定ファイルも複数用意します。

vim eaa_access.yaml

akamai_uls:
    environment:
      ULS_INPUT: "EAA"
      ULS_FEED: "ACCESS"
      ULS_OUTPUT: "HTTP"
      ULS_HTTP_URL: "https://[host].splunkcloud.com:8088/services/collector/event"
      ULS_HTTP_AUTH_HEADER: '{"Authorization": "Splunk [Data Inputで発行したアクセスキー]"}'
      ULS_HTTP_INSECURE: "TRUE"

設定するパラメーターについてはこちらに説明があります。

HelmでKubernetes上にAkamai ULSをインストールします。

helm install --namespace akamai-uls -f eaa_access.yaml uls-eaa-access akamai-uls

helm listでインストールされていることを確認します。

helm list -n akamai-uls

NAME          	NAMESPACE 	REVISION	UPDATED                             	STATUS  	CHART           	APP VERSION
uls-eaa-access	akamai-uls	1       	2022-09-13 14:19:27.321941 +0900 JST	deployed	akamai-uls-1.5.1	1.5.1

podのログを確認してログ転送が行われているか確認します。

kubectl -n akamai-uls logs uls-eaa-access-xxxxxxxxx

2022-09-13 05:19:31,727 ULS W UlsOutput TLS CA Certificate verification has been disabled - this is insecure !!
{"dt": "2022-09-13T05:24:30.726002", "uls_product": "EAA", "uls_feed": "ACCESS", "uls_output": "HTTP", "uls_version": "1.5.1", "uls_runtime": 300, "event_count": 2, "event_count_interval": 2, "event_ingested_interval": 2, "event_bytes_interval": 1810, "event_rate": 0.01, "mon_interval": 300}
{"dt": "2022-09-13T05:29:30.728046", "uls_product": "EAA", "uls_feed": "ACCESS", "uls_output": "HTTP", "uls_version": "1.5.1", "uls_runtime": 600, "event_count": 7, "event_count_interval": 5, "event_ingested_interval": 5, "event_bytes_interval": 4487, "event_rate": 0.02, "mon_interval": 300}

Splunk側にログが転送されていることを確認してインストールは完了です。

image.png

さいごに

Akamai ULSを利用することで、SIEMへのログ連携が行うことができました
今回のようにKubernetes上で構築することで、単一のサーバーに異常があった際でも、別のサーバーでPodが自動的に復旧することができ、高い可用性を維持して運用していくことができます。
Linodeはインスタンス費用も安く、Control Planeが無料なLinode Kubernetes Engineを利用することで、低コストでサーバーを用意できます。
ぜひEAA/SIA(ETP)/MFAのログを活用し、セキュリティ向上に役立ててください。

関連記事

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

2
0
1

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
2
0