IBM Cloud: CIS(IBM Cloud Internet Service)のWAFイベントをIBM Cloud Log Analysisに連携する

# 1. 初めに
2022年3月8日のrelease notesによると、HTTP requestやFirewall eventをIBM Cloud Log Analysis(旧称: IBM Log Analysis with LogDNA)にLogPushしてリアルタイム表示をしたりイベント通知することが可能になったようです。この記事ではWAFイベントがLog Analysisに送付されることを確認してみます。
https://cloud.ibm.com/docs/cis?topic=cis-release-notes&interface=ui&locale=en
https://cloud.ibm.com/docs/cis?topic=cis-logpush&interface=cli&locale=en
https://cloud.ibm.com/docs/cis?topic=cis-cli-plugin-cis-cli#log-push-cli-ref&locale=en


# 2. 前提条件

- CISのEnterprise planを利用していること(そもそもLogPush自体がEnterprise planでのみ利用可能）。
- CISでドメイン登録・WAFの設定がされていること。
- IBM Cloud Log Analysisを利用していること。

# 3. 設定方法

## 3.1. CISにおけるDOMAIN_IDの取得

```
$ ibmcloud cis instances
Retrieving service instances for service 'internet-svcs' ...
OK
Name                    ID                                                                                                                     Location   State    Service Name
CIS-Enterprise-Usage1   crn:v1:bluemix:public:internet-svcs:global:a/039dbe6794084c7cb514a276dd2345da:cf4d8b04-b49e-4bf0-a99d-9303bba2cd90::   global     active   internet-svcs

$ ibmcloud cis instance-set CIS-Enterprise-Usage1
Setting context service instance to 'CIS-Enterprise-Usage1' ...
OK
Context service instance set succeeded.

$ ibmcloud cis domains
Listing domains for service instance 'CIS-Enterprise-Usage1' ...
OK
ID                                 Name                  Status   Paused   Type
a4135402d38fff24e32ef13c82c1ab4a   xxxxxx.tk             active   false    full
```

ここで`a4135402d38fff24e32ef13c82c1ab4a`が今回の対象のドメインIDである。

## 3.2. Log AnalysisのLog転送先URLの確認

Tokyo regionのLog AnalysisのURLは以下になる。
`https://logs.jp-tok.logging.cloud.ibm.com`

（参考）
https://cloud.ibm.com/docs/log-analysis?topic=log-analysis-endpoints&locale=en

## 3.3 Log AnalysisのIngestion Keyの確認
Organization -> API Keys -> Ingestion Keysにて登録及び取得。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/4a5793e5-a08d-5434-4b39-83a9b384f0b1.png)


# 4. 設定

注意点
- hostnameは、「一連のイベントをLog Analysisにどのようなhost名で登録するか」、を指定する。よって、必ずしもCIS上のFQDNなどと合致する必要はない。
- apikeyは、IBM CloudのAPI Keyではなく、LogDNAのIngestion Key。
- `--name`はCIS上で管理されるLogPushジョブの名称。
- `--fields`は全部の情報を送信するならば、`all`を指定する。
- `--dataset`のデフォルトは`http_requests`なので、WAF Eventを取得したい場合は`firewall_events`を指定する。
- Logpushの頻度を上げるためには、`--frequency high`を利用する。


```
ibmcloud cis logpush-job-create a4135402d38fff24e32ef13c82c1ab4a --destination 'https://logs.jp-tok.logging.cloud.ibm.com/logs/ingest?hostname=cisibm-waflog&apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxf765' --name waflogpush1 --fields all --dataset firewall_events --frequency high --enable true

Creating logpush job in domain 'a4135402d38fff24e32ef13c82c1ab4a' ...
OK

Dataset            firewall_events
Enabled            true
Name               waflogpush1
ID                 69696
Fields             ClientRequestQuery,OriginResponseStatus,RuleID,ClientIPClass,ClientRefererQuery,ClientRefererScheme,ClientRequestProtocol,ClientRefererPath,Metadata,EdgeResponseStatus,ClientASNDescription,ClientIP,ClientRequestPath,OriginatorRayID,ClientASN,ClientRequestMethod,RayID,Source,ClientRefererHost,Datetime,Kind,ClientRequestScheme,Action,ClientRequestHost,ClientCountry,ClientRequestUserAgent,EdgeColoCode,MatchIndex
Timestamp format   rfc3339
Destination        https://logs.jp-tok.logging.cloud.ibm.com/logs/ingest?hostname=cisibm-waflog&apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxf765
Frequency          high
Last complete
Last error
Error message
```

# 5. 動作確認

[ここ](https://qiita.com/testnin2/items/cd6349b1655e6bdb7272)の方法にしたがってWAFのイベントを生成する。
Log Analysisで確認すると、

1. CLIで指定した`cisibm-waflog`というhostnameがsourcesに新たに現れている。<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/020da2e0-3329-f489-f141-0be5184a26d5.png)
2. 対象のWAFイベントがLog Analsysで確認できた。<br> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/d290d392-0386-7e03-11e2-f2d3932bf120.png)