サーバーを守る「門番」の正体!Cloud Armorで学ぶレートリミッティングの仕組み
こんにちは!クラウドインフラの現場で、日々パケットの荒波と格闘しているSREです。
皆さんは、Webサイトを運営していて「なんだか急にアクセスが集中してサーバーが重い…」「誰かが執拗にログインを試みている?」といった不安を感じたことはありませんか?
今日は、Google Cloudの強力な防壁である「Cloud Armor(クラウドアーマー)」を使って、そんな脅威からサービスを守る「レートリミッティング(通信制限)」について、一緒に紐解いていきましょう。難しいネットワーク用語は一旦脇に置いて、身近な例えから入っていきますので安心してくださいね!
—
1. レートリミッティングって何?「郵便配達」でイメージしよう
まず、「レートリミッティング」という言葉、響きからして難しそうですよね。でも、イメージはとってもシンプルです。
想像してみてください。あなたは人気カフェの店長です。お店にはたくさんの注文が届きますが、もし「1秒間に1,000杯のコーヒーを淹れてくれ!」という無茶な注文が届いたらどうなるでしょう?当然、キッチンはパニックになり、本当に美味しいコーヒーを待っている他のお客さんに迷惑がかかってしまいますよね。
この「無茶な注文」をしてくる人やプログラムを、玄関先で「ちょっと待って!一度にそんなに頼まれたら困るから、ゆっくりにしてね」と止めるのが、レートリミッティングの役割です。
なぜこれが重要なのか
- ブルートフォース攻撃対策: パスワードを何万通りも試すような攻撃者は、ものすごいスピードでアクセスしてきます。これを制限すれば、攻撃を無効化できます。
- スクレイピング対策: サイトの情報を丸ごとコピーしようとするロボットの動きを抑えられます。
- リソース保護: 想定外のアクセス過多から、背後のデータベースやサーバーを守り、サービスを安定させます。
—
2. 「429 Too Many Requests」というメッセージ
Cloud Armorで制限をかけると、制限を超えたリクエストに対してサーバーは 429 Too Many Requests というステータスコードを返します。
これは、「君、ちょっと注文しすぎだよ。今はこれ以上受け付けられないから、少し落ち着いてからまた来てね」という、サーバーからの丁寧なお断りメッセージなんです。
—
3. 実践!Cloud Armorで制限をかけてみよう
では、実際にGoogle Cloud上でどのように設定するかを見てみましょう。Google Cloudのコンソールや gcloud コマンドで設定できますが、今回はCLIでの設定例を紹介します。
例えば、「同じIPアドレスから1分間に100回以上のアクセスがあったら遮断する」というルールを作る場合、以下のような考え方で設定を行います。
# 1. セキュリティポリシーの作成(まずは空っぽの盾を作ります)
gcloud compute security-policies create my-web-policy \
--description="レート制限付きのポリシー"
# 2. ルールの追加(ここで「1分間に100リクエストまで」というルールを定義)
gcloud compute security-policies rules create 1000 \
--security-policy=my-web-policy \
--expression="origin.ip == '1.2.3.4'" \
--action=rate-based-ban \
--rate-limit-threshold-count=100 \
--rate-limit-threshold-interval-sec=60 \
--ban-duration-sec=300 \
# 1分間に100回を超えたら、300秒間(5分間)アクセス禁止にする設定です
パラメーターのポイント
rate-limit-threshold-count: 許容する回数です。ここを小さくすると厳しく、大きくすると緩くなります。rate-limit-threshold-interval-sec: 「何秒の間に」という期間です。ban-duration-sec: 制限を超えた相手を、何秒間「出入り禁止」にするかという設定です。
—
4. 現場で役立つ「設定のコツ」
初めて設定する際、一番怖いのは「普通のお客さんまでブロックしてしまわないか?」ということですよね。現場のSREが気をつけているポイントをこっそり教えます。
1. 最初は「監視モード」で始める
いきなりブロックするのではなく、まずは「どのIPがどれくらいアクセスしているか」をログで確認し、閾値(しきいち)が適切かを見極めるのが定石です。
2. IPアドレスだけで判断しないことも大事
大きなオフィスや大学など、一つのIPアドレスから多数の人がアクセスしている場合、全員をまとめてブロックしてしまうリスクがあります。必要に応じて、Cookieや特定のヘッダーを組み合わせるなど、より高度な識別方法を検討しましょう。
3. エラーページを親切に
429 エラーが出たとき、真っ白な画面が出るだけではユーザーは困惑します。「アクセスが集中しています。時間をおいて再読み込みしてください」といったメッセージを表示させるよう、バックエンド側でも準備しておくと親切ですね。
—
まとめ:クラウドの門番を味方につけよう!
Cloud Armorのレートリミッティングは、一度設定してしまえば、あとはGoogleの巨大なネットワークが自動で「門番」として働いてくれます。
最初は難しく感じるかもしれませんが、まずは「制限をかける」というより「サーバーを優しく守るための交通整理をする」という感覚で触ってみてください。皆さんのWebサイトが、より安全で快適な場所になることを心から応援しています!
インフラの道は一歩ずつ。また次の記事でお会いしましょう!
コメント