Google Cloud では、WAF に当たるサービスとして、Cloud Armor が存在します。
Cloud Armor では IP アドレスの列挙による通信の許可・拒否や、条件式による許可・拒否の設定を行うことが可能です。このサービスを利用している際に割り当てと上限に引っかかることがあり、terraform apply で失敗することがあったので、調べてみました。
今回は、このサービスを使うにあたり知っておきたい(あるいは引っかかりやすい)仕様について記事にします。
主な参考は以下のリンクです。
Cloud Armor の構成
Cloud Armor は簡単に表すと以下のような構成となっています。
この様に複数のルールをまとめた「セキュリティポリシー」が存在し、それがロードバランサなどにアタッチされるという仕組みです。例えば、ロードバランサの場合はこのセキュリティポリシーが「バックエンドサービス」にアタッチされます。
上限などの制約
「セキュリティポリシー」そのものの数はプロジェクトに対して 10 個がデフォルトの上限になっています。
セキュリティポリシー内に記述される「セキュリティポリシールール」については、そのルールが「どのようなルールであるか」でプロジェクト内の上限が変わってきます。
セキュリティポリシールールの制約
セキュリティポリシールールは大きく分けて 2 種類のルールに分類されます。
- IP アドレスを列挙するタイプの(通常の)ルール
- 高度な一致条件を持つルール
どの種類のルールであるかによって、制約も変わることに注意が必要です。
IP アドレスを列挙するタイプの(通常の)ルール
このルールの場合、1 つのルールに含むことができる IP アドレス(IP アドレスの範囲)の数は 10 までとなります。範囲指定をしたい場合は、/24 のようにサブネットマスクをつけて表現します。
サブネットマスクを記述しない場合は、/32 と同様の意味になります。
このルールは、通常ではプロジェクト全体で 200 個です。
高度な一致条件を持つルール
このルールは、様々な条件式を利用して WAF を構成するというルールです。
例えば、OWASP TOP 10 のルールに対するルールを作成したい場合はこのルールを用いる必要があります。
1 つのルールの中に複数の条件式を含むことができますが、式の数は 1 ルールにつき 5 式までという上限があります。
また、この種類のルールは 1 プロジェクトにつき最大 20 個までとなっている点に注意が必要です。
まとめ
Cloud Armor を利用する際は、以下の仕様を把握しておくことが重要です。
| 項目 | デフォルト上限 |
|---|---|
| セキュリティポリシー数(プロジェクトあたり) | 10 |
| 通常ルール数(プロジェクトあたり) | 200 |
| 通常ルール内の IP アドレス数(ルールあたり) | 10 |
| 高度な一致条件ルール数(プロジェクトあたり) | 20 |
| 高度な一致条件ルール内の条件式数(ルールあたり) | 5 |
特に、高度な一致条件を持つルールは通常ルールに比べて上限が厳しいため、OWASP TOP 10 対策などを実装する際は計画的なルール設計が求められます。上限の引き上げが必要な場合は、Google Cloud コンソールから割り当ての増加をリクエストする必要があります。