はじめに
本記事ではGoogle Cloudのセキュリティサービスである「Google Cloud Armor」(以下、Cloud Armor)について、セキュリティポリシーがどういう仕組みになっているのか解説します。
Cloud Armor
「Cloud Armor」は分散型サービス拒否(DDoS)攻撃や、クロスサイト スクリプティング(XSS)、SQL インジェクション(SQLi)などのアプリケーション攻撃をはじめとしたさまざまなタイプの脅威からGoogle Cloudにデプロイされているリソースを保護するいわゆるWAFとして機能するサービスです。
今回検証にするセキュリティポリシーを使用することでロードバランサの背後で実行されているアプリケーションを分散型サービス拒否攻撃(DDoS)やその他のウェブベースの攻撃から保護します。
Cloud Armorは基本的に従量課金制のサービスですが、年間サブスクリプションであるGoogle Cloud Armor Enterpriseに契約することでさらに多くの機能を利用できます。
詳細な機能については下記の公式ドキュメントを参照ください。
セキュリティポリシーについて
本記事ではセキュリティポリシーのすべてを説明しているわけではないため、本記事以外の内容は以下公式ドキュメントを参照ください。
https://cloud.google.com/armor/docs/security-policy-overview?hl=ja
Cloud Armorのセキュリティポリシーは、L7属性のリクエストをL7フィルタリングなどでブロックし、その後ろにあるバックエンドサービスへのリクエストを防ぐことで、アプリケーションを保護します。
各セキュリティポリシーは、受信リクエストのIPアドレス、IP範囲、リクエストヘッダーなどの条件に基づいてトラフィックをフィルタリングする一連のルールで構成することができます。そして、このルールはトラフィックの一致条件とその条件が満たされたときに実行する以下アクションで構成されます。
- 許可
- 拒否
- リダイレクト
- スロットル
- レートベースの禁止
評価されるルールは優先度によって小さいルールから評価され、0 ~ 2,147,483,646の優先度を設定します。(2,147,483,647はデフォルトの拒否ルールとして予約されています)
ルールには基本一致条件と詳細一致条件があり、基本一致条件はIPアドレスやIPアドレス範囲を、詳細一致条件はCEL(Common Expression Language)を使ってルール式を定義できます。
CELについては下記参考資料を参照してください。今後このCELについても記事を執筆予定です。
リクエストがルールに一致するとそれより低い優先度のルールは無視されます。
例えば、以下のセキュリティポリシーが設定されているCloud Armorに送信元IPアドレスが0.0.0.1のリクエストを受信したときは優先度2のルールが適用されます。
優先度 | ルール | アクション | 評価 |
---|---|---|---|
1 | 0.0.0.2/32 | 拒否 | ルールに一致しないため次の優先度が評価 |
2 | 0.0.0.1/32 | 拒否 | ルールに一致しているため、リクエストは拒否される |
3 | 0.0.0.1/32 | 許可 | リクエストがすでに評価されているため、スキップ |
2,147,483,647 | * | 拒否 | 同上 |
アクションのうち、許可、拒否、リダイレクトについては他に記事がたくさんあるのでレートベースのルールであるスロットルとレートベースの禁止について解説します。
レートベースのルール
Cloud Armorには受信したリクエストのレートによって処理を定義することができます。
スロットル
1クライアントまたは全クライアントに対して最大のリクエスト量を制限することができます。
たとえば、パラメータとして10秒間に1000リクエストと設定した場合、1000を超えるリクエストはスロットリングされて、バックエンドには到達しません。ちなみに、リクエストが1000以下の場合、このルールは評価されますが閾値を下回っているためACCEPTとなりバックエンドにリクエストが到達します。
レートベースの禁止
クライアントごとに設定したルール一致するリクエストのレート制限を適用できます。ユーザーが構成した式い値を超えると、一時的にクライアントからのリクエストを禁止できます。
参考:
https://cloud.google.com/armor/docs/rate-limiting-overview?hl=ja
さいごに
今回は仕組みの紹介にとどまりましたが、視覚的に理解できるようにするため実際に検証をして示す予定です。