IBM CIS: ドメインの特定のURLに対してWAFのActionを設定する


##1.目的
CISのWAFはIBM Cloud PortalのGUI画面を見れば明らかなようにRuleID/グループ単位にAction(Block,Simulate,Challenge,OFF)の設定を行います。
ただURL毎にセキュリティ要件が異なる場合に、URL単位にこの設定を行う必要が出てくることがあります。
![スクリーンショット 2021-09-27 17.08.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/9e5bf2d0-9ef5-1112-900d-03ea46e16ac9.png)

ドメイン全体またはサブドメイン全体ではなく、ドメインの特定のURLに対してWAFのAction設定することもできます。ただしエンタープライズプランのみの機能になります。
またIBM Cloud PortalのGUI画面ではできなくてCLI/APIを利用することになります。当ガイドはこのCLIの手順説明及び確認テストを記述しています。
[ibmcloud cis waf-override-createコマンド](https://cloud.ibm.com/docs/cis?topic=cis-cli-plugin-cis-cli&locale=ja#create-waf-override)

[参考]
特定のURLに対してWAFの全てのRuleIDのチェックを無効化することはIBM Cloud PortalのGUI画面のPageRule設定により行います。
[ページ・ルールの使用-セキュリティ-WAF]
(https://cloud.ibm.com/docs/cis?topic=cis-use-page-rules#page-rules-security)



##2.手順及び確認

現状下記のCIS GUI画面の通り100008Eルールは無効化に設定されています。

![スクリーンショット 2021-09-17 16.04.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/434ba91f-979e-2a48-fa4a-1ea8024c2844.png)

念のためブラウザーよりテスト対象URLの後に"?id=admin&password=' or 1=1"等のパラメーターを付加しても問題なくアクセスできることを確認します
![スクリーンショット 2021-09-17 16.16.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/ecffba5b-e1d3-be6f-f3fb-3273aba06b9c.png)

ここからはIBM Cloud CLI手順になります。環境準備できていなければ下記よりCLIダウンロード/CIS pluginのアップデートをしてください。
[ibmcloud cli及びcis pluginの準備]
(https://cloud.ibm.com/docs/cis?topic=cis-cli-plugin-cis-cli#-cli-prereqs)

ibmcloud login後、まずドメインの一覧を照会して該当のドメインのIDを取得します。

```
 % ibmcloud cis domains
サービス・インスタンス 'CIS-Enterprise-Usage1' のドメインをリスト中...
OK
ID                                 名前          状況         一時停止   タイプ   
3476b3464d25f1ba478e1d0753a34bf7   certest.tk    アクティブ   false      full   
3cf328422b34b8e5420831c3efe4c3c3   cis****.tk   アクティブ   false      secondary   
a4135402d38fff24e32ef13c82c1ab4a   cis****.tk     アクティブ   false      full 
```

まずJSON Fileを作成します。最低限設定が必要になるのは対象のURL名、RuleID、Actionになります。ここでは"host-ibm-cloud-poc.certest.tk"のURLで"100008E"のRuleに対して"Block"を指定して"waf_rule_on.json"の名前でファイルを保存します。


```
{
    "description": "enable Rule ID:10008E for host-ibm-cloud-poc.certest.tk",
    "urls": [
       "host-ibm-cloud-poc.certest.tk/*"
    ],
    "rules": {
       "100008E": "block"
    } 
}
```
上記で作成したJSON File、及びドメインIDを指定してwaf-override-createを実行します。 

```
 % ibmcloud cis waf-override-create 3476b3464d25f1ba478e1d0753a34bf7 --json @waf_rule_on.json
URL ベースの WAF ルールを作成中 ...
OK
                          
ID                     b9d0ff936a9141eb973b1f08e14920eb   
説明                   enable Rule ID:10008E for host-ibm-cloud-poc.certest.tk   
URLs                      
	0:                     	host-ibm-cloud-poc.certest.tk/*   
グループ               
ルール                    
	100008E:               	block   
再書き込みアクション
```

再度同一URLにアクセスしてBlockされることを確認します。

![スクリーンショット 2021-09-17 16.19.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/d6627fb4-ad68-9ef1-c9e9-686e974295da.png)

念のためCISのSecurity Event Logを照会してBlockされていることが確認できました。

```
 % ibmcloud cis firewall-event-analytics 3476b3464d25f1ba478e1d0753a34bf7
ドメイン '3476b3464d25f1ba478e1d0753a34bf7' のファイアウォール・イベントを取得中...
OK
                                        
                                        
次元                                    
	アクション                           block   
	クライアントの国名                   JP   
	クライアント IP                      61.25.32.91   
	クライアント IP クラス               noRecord   
	クライアント・リファラー・スキーム   unknown   
	クライアント要求 HTTP ホスト         host-ibm-cloud-poc.certest.tk   
	クライアント要求 HTTP メソッド名     GET   
	クライアント要求 HTTP プロトコル     HTTP/1.1   
	クライアント要求パス                 /   
	日時                                 2021-09-17T06:59:10Z   
	エッジ・コロケーション名             NRT   
	種類                                 firewall   
	インデックスに一致                   0   
	レイ名                               69007347ffa33535   
	ルール ID                            100008E   
	ソース                               waf   
	ユーザー・エージェント               Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36 
```