門番はAIにお任せ!GCP Cloud ArmorでWebサイトを「鉄壁」にする方法
皆さん、こんにちは!SREの現場で日々クラウドのパケットと格闘しているエンジニアです。
Webサイトを公開すると、世界中から色々な「郵便(リクエスト)」が届きます。もちろん、心温まるお手紙(正当なユーザーからのアクセス)もあれば、中には「爆発物」や「怪しい勧誘チラシ」のような攻撃的な郵便物も混ざっています。
これらをすべて人間が目で見て選別していたら、あっという間に夜が明けてしまいますよね。そこで登場するのが、GCPの「Cloud Armor(クラウド・アーマー)」です。今日は、この「最強の門番」がどのようにして悪いリクエストをブロックしているのか、その仕組みとコツを優しく紐解いていきましょう!
—
Cloud Armorって、一体何者?
簡単に言えば、Cloud Armorは「Webサイト専用の高性能な受付係兼セキュリティガードマン」です。
Googleの巨大なネットワークの入り口で、やってくるリクエストを一つひとつチェックし、「これはOK!」「これは怪しいからポイッ!」と瞬時に判断してくれます。特に便利なのが、世界中で猛威を振るっている攻撃手法をあらかじめ学習済みの「事前構成済みルール」です。
なぜ「事前構成済み」が重要なのか?
攻撃者の手口は日々進化しています。自分で「こんな文字列が来たらブロックして」とイチからルールを書くのは、イタチごっこで疲弊してしまいますよね。
Cloud Armorの「事前構成済みルール」は、セキュリティの専門家たちが「これぞ鉄板の攻撃パターン!」と定義したデータベース。これを使うことで、私たちは複雑な攻撃の仕組みを深く理解していなくても、プロレベルの防御を数クリックで導入できるんです。
—
代表的な「困った郵便物」たち
Cloud Armorが守ってくれる、主な脅威を見てみましょう。
- SQLインジェクション (SQLi): データベースに「お前の秘密を全部教えろ!」と命令を送るような、卑劣な小細工です。
- クロスサイトスクリプティング (XSS): 掲示板などに「開くとウイルスに感染する罠」を仕込むような悪質な手口です。
- レートリミット (EXCEEDS-RATE-LIMIT): 短時間に大量の郵便を送りつけて、郵便受けをパンクさせる嫌がらせ(DDoS攻撃の入り口ですね)。
これらを、Cloud Armorは「ModSecurity」という世界的に有名なルールセットをベースに検知してくれます。
—
さあ、設定してみよう!
まずは、基本的なルールを適用するコマンドを見てみましょう。怖がらなくて大丈夫、gcloud コマンドで簡単に設定できます。
# セキュリティポリシーを作成します
gcloud compute security-policies create my-web-policy \
--description="Webサイトを守るためのポリシー"
# SQLインジェクション攻撃を防御するルールを追加
gcloud compute security-policies rules create 1000 \
--security-policy=my-web-policy \
--expression="evaluatePreconfiguredExpr('sqli-stable')" \
--action=deny-403 \
--description="SQLインジェクションをブロックする"
このコマンドで、sqli-stable という設定を有効にしました。これで、悪意あるSQL文が含まれたリクエストは、門前払いで 403 Forbidden(拒否)されるようになります。
—
現場の知恵:チューニングという名の「見極め」
ここで一つ注意点です。最初から厳しくしすぎると、「本物のお客さんまで追い返してしまう(誤検知)」という悲しい事件が起きます。
例えば、ブログのコメント欄で「SQLの勉強方法」なんて書いたら、それがSQLインジェクションだと誤解されてブロックされる……なんてこともあり得ますよね。
そんな時は、まずは「プレビューモード」を使いましょう。
1. いきなりブロックせず「記録」だけ残す
まずは deny-403 にせず、preview オプションを付けて様子を見ます。
# プレビューモードで設定(ブロックはせず、ログだけ残す)
gcloud compute security-policies rules update 1000 \
--security-policy=my-web-policy \
--preview
2. ログを見て、本物か攻撃かを見分ける
GCPの「ログエクスプローラー」を開いてみてください。jsonPayload.enforcedSecurityPolicy.preconfiguredExprIds のような項目に、どのルールに引っかかったかが記録されています。
「あ、これ自分たちが書いた正当なリクエストだ!」と分かったら、そのルールだけを除外する「上書きルール」を先に追加してあげましょう。
—
最後に:完璧を目指さない勇気
インフラエンジニアとして大切なことは、「一度設定したら終わりではない」ということです。
セキュリティは、常に「利便性」と「安全性」のバランスです。Cloud Armorは強力ですが、まずは基本ルールを適用し、ログを見ながら少しずつ調整していく……。この「対話」こそが、堅牢なシステムを作るための最も確実な道です。
皆さんのWebサイトが、今日も元気に、そして安全に世界中のユーザーと繋がれることを願っています。もし迷ったら、いつでもこの記事を見返して、一歩ずつ設定を進めてみてくださいね!
それでは、良いクラウド・ライフを!
コメント