レポートの読み方¶
daily_brief の出力はこのような形です。
# Cloud Armor brief — project example-prod, last 26h
## Enforced DENY: >= 2000 (capped at 2000)
rule 101 (自リージョン外からの深いパス巡回をブロック): 1803
rule 500 (AutoDiscover 探索のブロック): 149
rule 1002 (OWASP LFI 対策): 35
## JP-sourced DENY (false-positive lens): 214, suspicious 12
rule 1002 (OWASP LFI 対策) 198.51.100.7 https://198.51.100.7/.git/config
...
## Preview DENY: 0
ルール別 enforce 遮断¶
どのルールが発火したかで分けた、平常時の遮断量です。数が大きいこと自体は問題では ありません。公開サイトには常時スキャンが来るので、それを遮断しているのは WAF が 仕事をしている証拠です。
注目すべきは内訳の変化です。今まで発火していなかったルールが急に大半を占める、 あるいは発火していたルールがゼロになる(ルールの編集・無効化、または手前のルールに 先にマッチするようになった可能性)といった変化が確認の対象になります。
>= N (capped) は下限値です
クエリが上限に達すると見出しは >= N (capped at N) になります。実際の総数は
それより大きく、しばしば大幅に大きい値です。上限に達した数値と達していない
数値を比べて「減った」と判断しないでください。 正確な値が必要なときは
CLOUDARMOR_MAX_ENTRIES を上げるか since_hours を短くします。
自リージョン発の遮断(誤検知レンズ)¶
自国・自地域に属する IP から来て、それでも遮断されたリクエストです。誤りを捕まえる のはこのセクションです。海外のスキャナー向けのルールが自組織の利用者に当たることは 本来まれだからです。
known_normal_priorities に挙げた優先度は抑制された件数としてまとめられ、それ以外は
送信元 IP とリクエスト URL 付きで表示されるので、内容から判断できます。
| 見えているもの | 判断 |
|---|---|
| 住宅・モバイル回線からの通常のブラウジング経路、または正規のクローラー | 要対応 — 誤検知の可能性が高い(ルールが広すぎる) |
| ホスト名ではなくロードバランサの IP アドレス宛のリクエスト | 正常 — 利用者ではなくスキャナー |
.git/config・.env・wp-login.php・パストラバーサルのエンコード |
正常 — 自リージョン発でも遮断が正しい |
| 単一の内部ホストが1つのルールで大量に遮断されている | 要調査 — 攻撃ではなく内部ツールの設定不備であることが多い |
suspicious が 0 のときは何も出力しないのではなく、その旨を明示します。「出力が無い」 状態を解釈する必要が生じないようにするためです。
preview 遮断¶
ドライラン中のルールです。Cloud Armor は「遮断したはずの内容」を遮断せずに記録します。 一定期間、自リージョン発のヒットが出ない preview ルールは enforce への昇格候補です。
逆も同じくらい有用です。自リージョンの利用者を遮断してしまう preview ルールは、 本番投入前に条件を絞る必要があることを、無コストで教えてくれます。
実運用のリズム¶
daily_brief は1日1回、実行間隔より少し長い期間で回します(既定の since_hours=26
は日次実行に2時間の重なりを持たせた値なので、開始が多少遅れても穴が空きません)。
誤検知の詳細だけを見たいときは home_region_denies を単独で呼びます。