JCB デジタルソリューション開発部の平松です。
今回はWebサービスを構築するにあたり必須となるGCPのWeb Application Firewall(WAF)機能Cloud Armorの当プロジェクトでの活用方式についてご紹介します。
Cloud Armorの公式ドキュメントはこちらです。
基本的な活用
Cloud Armorは、図の通りLoad Balancingに紐付けて利用する形となりますが、TCP Load Balancing構築時は設置できません。HTTP(S) Load Balancingのみ適用可能です。(2022/3時点)
こちら2022/6に、TCP LBにもCloud Armorを設置できるようになりました。
主な目的としては、以下の2通りとなります。
- SQLインジェクション等のサーバ・アプリケーションに対する攻撃への無効化対策
- アクセス可能なIPアドレスの制限
以下に、各項目の活用について記載しています。
サーバ・アプリケーションに対する攻撃への無効化対策
WAF機能に求められることは、攻撃プログラムに対する抑止力かと思います。 当プロジェクトでも、WAFを導入する一番の目的はいわゆるOWASP Top10に代表される攻撃への対策としての活用でした。
Cloud Armorでは、以下の公式ドキュメントの記載にあるように、OWASP Top10に対応可能な事前構成済みのWAFルールがあらかじめ用意されており、基本的な防御策をスムーズに適用可能です。
Google Cloud Armor WAF ルールのチューニング https://cloud.google.com/armor/docs/rule-tuning
なお、このWAFルールに組み込まれているシグネチャについては、現状リリースノートにシグニチャバージョン等の記載がありません。 そのため、定期的にマニュアルを確認するか以下のプリセットルール一覧表示コマンドの結果に差分がないかを確認する必要があります。
gcloud compute security-policies list-preconfigured-expression-sets
上記コマンドのドキュメントはこちらです。
IPアドレスの制限
パブリッククラウド上に設置するアプリケーションだとしても社内端末からしかアクセスできないようにする等、限られた人にしか公開しないWebアプリケーションを構築することは時に要件として発生します。
その対応として、Cloud Armorにてリクエスト元となるIPアドレスを制限します。 この制限設定についてもルールの1つとして扱うことが可能です。
ルールの評価順序
上記2つの目的を同時に達成するため、ルール同士の組み合わせを行います。 Cloud Armorにおけるルールの評価順序は、ルールの優先度というパラメータによって、制御されます。
割り当てられた数値が最も低いルール(最小値:0)は論理優先度が最も高く、論理優先度が低いルール(最大値:2,147,483,646)よりも前に評価されます。 同じ優先度で2つ以上のルールは構成できません。 また、優先度の高いものから順番に評価され、該当した時点で評価は打ち切られます。
脆弱性対応とIPアドレス制限対応を同時に実現するため、以下の順番で評価されるようにルール優先度を設計しました。
- 攻撃対策ルールの適用
- 特定のIPアドレスを許可
- 全てのIPアドレスを抑止
これにより、「まずリクエストの攻撃を遮断し、攻撃ではなくともリクエスト元IPアドレスが想定と異なる場合に拒否する」ことが可能となりました。
ログの監視
攻撃を検知した場合、件数やアクセス元といった情報を報告する必要があります。 素早くこれらの情報を取得するため、ログベースメトリクスを用いて解析しています。 当プロジェクトでは、基本的には以下のステップに従ってメトリクスをDatadogに送付して分析できる体制を整えました。
- Cloud Armorが攻撃を検知
- Cloud Loggingへ攻撃のログをLBログとして出力
- Cloud Loggingがログベースメトリクスを集計し、DataDogへメトリクスを1分おきに送信
ログベースメトリクス設計
以下の単位でログベースメトリクスのユーザー定義を作成しています。
- LB単位
- ルール単位(攻撃種別(SQLi,xss,etc…)を判別するため)
検知時にDatadogのアラートを出力することでPagerDutyに通知を飛ばし、攻撃を察知しています。
まとめ
ここまで、Cloud Armorの活用方式についてご説明してきました。 他にもログの活用、Adaptive Protectionなど様々な機能があるので、今後も運用しやすいPlatformの構築に向けて進めていけたらと思います。
最後になりますが、JCBでは我々と一緒に働きたいという人材を募集しています。 詳しい募集要項等についてはリンク先の採用ページをご覧下さい。
本文および図表中では、「™」、「®」を明記しておりません。
Google Cloud, GCPならびにすべてのGoogleの商標およびロゴはGoogle LLCの商標または登録商標です。
記載されている会社名、製品名は、各社の登録商標または商標です。