3
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?

Akamai EAA/SIA/MFA/AGSのログを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/MFA/AGS)から取得したログを、SplunkなどのSIEMに連携するためのオープンソースログ収集ツールです。

各製品は個別のAPIを通じてログを提供していますが、ULSはそれらに対応し、ログ取得からSIEM転送までを一元化することが可能です。

ULS概要図

🔗 https://github.com/akamai/uls

Akamai 製品の概要

製品 説明
EAA ゼロトラストアーキテクチャに基づき、IaaS・SaaS・オンプレ環境へセキュアにアクセスできるアイデンティティ認識型プロキシ
SIA DNSフィルタリングとセキュアWebゲートウェイにより、マルウェア・フィッシングからの防御を実現
Akamai MFA FIDO準拠の多要素認証で、フィッシング耐性と高セキュリティな認証を提供
AGS (Akamai Guardicore Segmentation) マイクロセグメンテーションにより、東西トラフィックを制御し、ランサムウェアや内部攻撃を防御

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
EAA DIRHEALTH EAA {OPEN} API
SIA THREAT ETP {OPEN} API Reporting
SIA AUP ETP {OPEN} API Reporting
SIA DNS ETP {OPEN} API Reporting
SIA PROXY ETP {OPEN} API Reporting
SIA NETCON ETP {OPEN} API Reporting
MFA EVENT MFA Integration for logging
AGS NETLOG Guardicore API
AGS INCIDENT Guardicore API
AGS GC Audit Guardicore API

ULSがサポートする出力方法

送信方法 コマンドオプション
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

アクセス情報を用意する。

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

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

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

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

AGSの場合

AGS の ユーザー発行

発行したアクセスキーの情報を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

; Guardicore integration credentials
gc_hostname = your_hostname.guardicore.com          # Do not prepend https://
gc_username = XXXXXXXXXXXX
gc_password = XXXXXXXXXXXXX

Akamai ULSをインストールする

Helm ChartをGithubから取得します。

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

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

kubectl create namespace akamai-uls

先ほど作成したアクセス情報をシークレットに格納します。

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

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"

AGSの場合の例はこちらになります。

vim ags_netlog.yaml

akamai_uls:
  environment:
    ULS_INPUT: "GC"
    ULS_FEED: "NETLOG"
    ULS_OUTPUT: "HTTP"
    ULS_HTTP_URL: "https://xxxxxxxx.splunkcloud.com:8088/services/collector"
    ULS_HTTP_AUTH_HEADER: '{"Authorization": "Splunk XXXXXXXXXXXX"}'
    ULS_HTTP_INSECURE: "True"
    ULS_HTTP_LIVNESS_CHECK: "False"
    GC_SKIP_TLS_VALIDATION: "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 では、 Akamai Cloud 関連などの開発者向けの記事を掲載しております。

3
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
3
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?