新しく出た Cloud Armor を試してみた

Samir Hammoudi
google-cloud-jp
Published in
10 min readMar 27, 2018

3月21日にセキュリティに関する重要な記事が GCP Blog (英語)に記載され、新しいセキュリティ機能が複数アナウンスされました。

この記事では、アナウンスされた Global HTTP(S) Load Balancer の新しいセキュリティ対策サービス Cloud Armor を試した結果を共有します。上記でご紹介した他のサービスについては、各サービスの正式ページで詳細をご参照ください。

早速ですが Cloud Armor の主な機能を紹介します。

  • DDoS 対策(GA)
  • IP 制限・Whitelist / Blacklist(Beta)
  • 高度なルールでのアクセス制限(Alpha)

本日は最初の2つの機能をご紹介します。高度なルールはまだ Alpha のため後日に詳細をご紹介したいと思いますが、主な機能だけを以下にリストしておきます。

  • WAF 機能(SQLi, XSS)
  • ロケーションベースの制御(例えば US からのアクセスはブロック)

ちょうど本日、正式ブログでも Cloud Armor の情報が公開されましたので、是非ご参照ください。高度なルールについても説明されています。

DDoS 対策機能(GA)

よくお客様から GCP の DDoS 対策機能について聞かれます。私は普段ゲームのお客様を担当しており、DDoS 攻撃はよく聞かれる課題です。確かにアカマイ・テクノロジーズの 2017 年第3四半期(7月〜9月)のセキュリティレポートによると、DDoS 攻撃の8割はゲーム業界が受けているようです(参考にした記事)。

Cloud Armor の一つの機能が DDoS 対策と上記に書きましたが、今までに DDoS 対策がなかったということではありません。それを知る方は非常に少ないかと思いますが、DDoS 対策は以前から提供しているサービスです。(十分情報を提供していなかったことは反省していますm(_ _)m)

実は DDoS 対策は昔から Global HTTP(S) Load Balancer のビルトイン機能として提供しております。既にご存知かもしれないですが、GCP の Global HTTP(S) LB はネットワークのエッジに存在し、GCP のデータセンタにたどり着くこともなく DDoS 攻撃をエッジでブロックします。なお、この DDoS 対策機能は Google の Search、YouTube や Gmail などにも使用されており、万全な守備となっているかと思います。

GAE の利用者でも Layer 4 までは DDoS 対策が対応されております。例えば、SYN flood や DNS amp 攻撃などから守られます。

Cloud Armor の DDoS 対策の設定方法

Cloud Armor の DDoS 対策機能は既に GA (General Availability) しているサービスとなります。DDoS 攻撃から守りたいウェブサービスの前に、負荷分散を行うための Global HTTP(S) Load Balancer を設定さるだけで完了です!守るサービスが GCE で起動しているのなら、HTTP(S) Load Balancer を設定して完了、GKE で起動しているのなら、Ingress オブジェクトを定義して、HTTP(S) Load Balancer がデプロイされます。

ちなみに Global HTTP(S) Load Balancer は名前通りにグローバルなリソースなので、1つの IP アドレスから Anycast で一番近いリージョンにリクエストを分散します。

リクエストを各リージョンに分散する Global HTTP(S) LB

IP 制限 - Whitelist / Blacklist (Beta)

次に試してみた機能は Cloud Armor の IP 制限機能です。こちらはベータ版として提供されているため、SLA が適用されておりませんのでご了承ください。

ではまず機能のご紹介をします。IP 制限機能は数々のお客様から要求されている機能となりますので、ようやくパブリックベータになるのが個人的にはほっとしています!Cloud Armor は Global HTTP(S) Load Balancer と連携しているサービスですので、IP 制限を実装するにはサービスの手前に Load Balancer を設定する必要があります。

IP 制限の方式は2つあります。

  • ホワイトリスト方式;デフォルトでは全アクセスブロック、そして特定の IP のみを許可する
  • ブラックリスト方式:デフォルトでは全アクセス許可、そして特定の IP のみをブロックする

GKE ユーザーへの注意点

GKE は HTTP(S) Load Balancer (Ingress) のセキュリテイポリシーを直接 YAML ファイルに定義することがまだサポートされていません。手動なステップとなりますが、セキュリテイポリシーを以下の手順通りに作成し、GKE がデプロイした HTTP(S) Load Balancer に紐づける必要があります。

IP 制限の設定方法

では早速 GCP の画面を見せながら試していきたいと思います。

Cloud Console に「Networking」の配下に新しいサブカテゴリー「Network Security」が追加されました

Cloud Console を開らき、左のメニューから「Networking」>「Network Security」へ移動します。

そして「Create policy」をクリックします。

注意点:本ベータでは、CDN が有効された HTTP(S) Load Balancer はサポートされておりません。

Cloud Armor のセキュリティポリシーの作成画面

Cloud Armor のセキュリテイポリシーは3つのステップで作成します。

ステップ1

ポリシーのデフォルトの挙動:このステップでホワイトリスト方式(Deny)かブラックリスト方式(Allow)としてポリシーを作成するか決めます。テスト用にホワイトリストポリシーを以下に作ってみました。

  1. ポリシーの名前
  2. ポリシーの詳細
  3. デフォルトの挙動(Allow = Blacklist, Deny = Whitelist)
  4. HTTP エラーコードを選択(403, 404, 502)
  5. 次の画面に進む

ステップ2

ステップ1でホワイトリストポリシーを選択したため、ステップ2ではアクセス許可する IP アドレスを選択しました。

  1. ルールの詳細
  2. 許可する IP アドレス(IP レンジでも OK、例えば 192.168.1.0/24)
  3. ルールのアクション:許可・拒否
  4. ルールの優先順位。値が低いほど、優先度が高いです。「1」が一番高い優先度であり、デフォルトのルールに設定された「2'147'483'647」が一番低い優先度となります。
  5. Done ボタンを押すと、ルールが保存されます

上記で利用していない Preview only を説明します。

  • Preview only を有効にすると、ルール自体は適用されないがルールのログは Stackdriver Logging の記録されます。ルールをプロダクションで使う前にお試しするのに最適です。

次のステップを押すと、最終ステップ3の画面に進みます。

ステップ3

最終ステップとしては、ステップ1・2で設定したルールをロードバレンサーに適用するものとなります。

  1. ポリシーを適用する対象のロードバレンサーを選択
  2. Done で終了
ポリシーの確認画面

「Create policy」ボタンを押せば、ポリシーが適用されます。

注意点:本番環境でポリシーを適用する前に Preview only でまず動作確認をするのがオススメです。Stackdriver Logging で許可・拒否されているアクセスを確認し、想定通りであれば Preview only のフラグを外して、本番にポリシーを適用ください。

ポリシーの作成が完了

ポリシーの動作確認

上記で作成したポリシーには、自分の IP アドレスを許可しましたので、LB の背後にある Nginx にはアクセスできるはず。試してみました。

許可した IP アドレスからはアクセスができた!

想定通りアクセスできました!では Stackdriver Logging でアクセスログを確認してみましょう。

注意点:Cloud Armor のログを表示するには、ポリシーが適用されたロードバレンサーを選択する必要があります。

HTTP GET が成功したログエントリーを見つけました。その詳細を確認すると、jsonPayload に適用されたポリシーの情報が表示されています!そして、outcome(結果)が “ACCEPT”(許可)とちゃんと確認できました。

次に確認したいのは、許可していない IP アドレスからアクセスした場合ですね。

許可されていない IP からアクセスしたら、403 が返された

こちらも想定通りですが、許可されていない IP アドレスからアクセスしたら、403 が返されてきました。IP 制御がちゃんと効いてること確認取れました。Stackdriver Logging で拒否されたアクセスのログを確認してみましょう。

今回は “outcome” は “DENY”(拒否)となっていることも確認できました。

最後に

Cloud Armor いかがでしょうか?HTTP(S) Load Balancer を設定するだけで DDoS 攻撃を心配する必要が無くなりますし、アクセスポリシーで誰がサービスにアクセスできるかも気軽に設定できます。

本日(3月26日)の段階では高度のアクセスルール機能はまだ Private Alpha ですが、パブリックになりましたらご紹介する予定です。また、Private Alpha をお試ししたいという方がございましたら、御社担当のグーグルチームに直接ご連絡ください。

--

--

Samir Hammoudi
google-cloud-jp

Technical Product Expert, Google Stadia. All views and opinions are my own. @ksimir