GCP Cloud ArmorでXSS、SQLインジェクションのWAF導入

# はじめに
Google Cloud Platform環境で公開するWebサイトに Croud Armorを利用して、クロスサイトスクリプティング（XSS）、SQLインジェクションのセキュリティ対策（WAF）を導入しました。
Cloud ArmorでIPアクセス制限する例は、たくさん見ますが、XSS、SQLインジェクション対策の記事はGCP公式サイト以外では見ないため、導入までの手順を記録として投稿します。

# この投稿で扱う内容
* Croud Armor導入により、WebサイトにWAFを導入する。
* WAF機能として、XSS、SQLインジェクションのセキュリティ対策ルールを適用する。

>本記事は、XSS、SQLインジェクション以外のCroud Armorの機能は扱わない。
>（IPルールでのアクセス制限、XSS、SQLインジェクション以外のセキュリティ対策等）
>記載手順は、作業後に画面キャプチャ、手順をメモっているため、簡略記載です。

# Cloud Armorとは
インターネットに接続されたサービスを DDoS 攻撃から防御する。

[GCP公式サイト:Google Cloud Armor](https://cloud.google.com/armor/?hl=ja)

# 導入の前提事項
GCP環境で、WEBサイトをロードバランサー経由で公開していること。

## Cloud Armorの設定呼び出す
サービスのサイドメニューからCloud Armorを呼び出す。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117828/f482b99b-cace-18f9-f7ff-a42dc06fa24f.png" width=50%>

### ポリシーを登録する
ポリシー名を入力する。
デフォルトのルールアクションを拒否にする。
拒否ステータスを403にする。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117828/af921463-3fd9-ae9f-1ff3-e1f1f88d22d3.png" width=75%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117828/6fb5dfee-5d2b-ff6e-c875-2ec2dd2ba29e.png" width=75%>


### ブロック条件のルール設定
詳細モードを選択する。
一致の欄にルールの条件（XSS、SQLインジェクション）を、OR条件で入力する。
`evaluatePreconfiguredExpr('sqli-canary') || evaluatePreconfiguredExpr('xss-canary’)`
アクションを拒否にする。
優先度は、ルールが最優先される様に最小の直を入力する。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117828/34bb4019-da00-0a2b-830e-4e069f6eaa5e.png" width=75%>

[GCP公式サイト:ポリシールール](https://cloud.google.com/armor/docs/rule-tuning?hl=ja)

>evaluatePreconfiguredExprで組み込む、sqli-canary、xss-canaryは、ブロックするポリシールールが多数、組み込まれています。
>ポリシールールは、第２引数以降（複数）で指定することで、除外する（ブロックを弱める）ことが可能です。
>今後、この辺りのベスト事例が、出揃ってくる事を期待してます。
>例　
>evaluatePreconfiguredExpr('sqli-canary', ['owasp-crs-v030001-id942421-sqli',
 'owasp-crs-v030001-id942432-sqli']
)

### 許可条件のルール設定
基本モードを選択する。
一致の欄に * を入力する。
アクションを許可にする。
優先度は、ブロックするルールより、優先度が低くなる様に入力する。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117828/53085c34-ed3a-6b35-8c8f-b5f87f6cf05d.png" width=75%>

### ロードバランサー割当
適用するロードバランサーを設定する。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117828/d433899f-a655-7ae6-ee05-7d45431b2284.png" width=75%>


### 登録完了
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117828/eca7b753-f674-78ec-a962-2d5ede20e93f.png" width=75%>

## Cloud ArmorによるWAF導入検証
### XSSのブロック検証
Webサイトの検索入力欄に、Javascriptコードを入力し、検索（Post）すると403エラー画面が表示され、ブロックされることを確認。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117828/69d77c60-cbdb-2962-1593-8a7e41506dc1.png" width=75%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117828/6b96d051-65bc-6759-a849-49d13f4fbefe.png" width=75%>
StackDriverのログを見ると、ブロックルールと認識されて、403エラーとなっていることが分かる。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117828/720c12b2-43a4-c0ff-0792-ec3933f2d293.png" width=75%>


### SQLインジェクションのブロック検証
Webサイトの検索入力欄に、SQLインジェクションのコードを入力し、検索（Post）すると403エラー画面が表示され、ブロックされることを確認。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117828/22ac77a4-b711-cc7c-1309-feac2c825a28.png" width=75%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117828/a36643da-6bcf-7f30-a011-165b0eef2570.png" width=75%>