チェックポイント
Configure HTTP and health check firewall rules
/ 25
Configure instance templates and instance group
/ 25
Configure the HTTP Load Balancer
/ 25
Blacklist the siege-vm
/ 25
Cloud Armor を使用した HTTP ロードバランサ
GSP215
概要
Google Cloud HTTP(S) ロード バランシングは、世界中の Google のポイント オブ プレゼンス(POP)で Google ネットワークのエッジに実装されています。HTTP(S) ロードバランサを送信先とするユーザー トラフィックは、ユーザーに最も近い POP に入った後、Google のグローバル ネットワークでロードバランスされて、十分な容量がある最も近いバックエンドに送られます。
Cloud Armor の IP の許可リスト / 拒否リストを使用すると、ユーザーや悪意のあるトラフィックにできるだけ近い Google Cloud のエッジで、HTTP(S) ロードバランサへのアクセスを制限または許可できます。これにより、悪意のあるユーザーまたはトラフィックがリソースを消費したり、Virtual Private Cloud(VPC)ネットワークに侵入したりすることを防止できます。
次の図に示されるように、このラボではグローバルなバックエンドを使って HTTP ロードバランサを構成します。さらに、そのロードバランサに対するストレステストを実施し、Cloud Armor を使ってストレステストの IP アドレスを拒否リストに登録します。
目標
このラボでは、次のタスクの実行方法について学びます。
- HTTP とヘルスチェックのファイアウォール ルールを作成する
- インスタンス テンプレートを 2 つ構成する
- マネージド インスタンス グループを 2 つ作成する
- HTTP ロードバランサを IPv4 と IPv6 で構成する
- HTTP ロードバランサのストレステストを実施する
- IP アドレスを拒否リストに登録して HTTP ロードバランサへのアクセスを制限する
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
- ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。
ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。 -
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}} [ラボの詳細] パネルでも [ユーザー名] を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}} [ラボの詳細] パネルでも [パスワード] を確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。 -
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
タスク 1. HTTP とヘルスチェックのファイアウォール ルールを構成する
バックエンドへの HTTP トラフィックと Google Cloud ヘルス チェッカーからの TCP トラフィックを許可するファイアウォール ルールを構成します。
HTTP ファイアウォール ルールを作成する
バックエンドへの HTTP トラフィックを許可するファイアウォール ルールを作成します。
-
Cloud コンソールで、ナビゲーション メニュー() > [VPC ネットワーク] > [ファイアウォール] に移動します。
-
すでに ICMP、内部、RDP、SSH のファイアウォール ルールが存在します。
各 Google Cloud プロジェクトには、default ネットワークとこれらのファイアウォール ルールが始めから用意されています。
-
[ファイアウォール ルールを作成] をクリックします。
-
以下の値を設定し、他はすべてデフォルト値のままにします。
プロパティ 値(値を入力するか、指定されたオプションを選択) 名前 default-allow-http ネットワーク default ターゲット 指定されたターゲットタグ ターゲットタグ http-server ソースフィルタ IPv4 範囲 送信元 IPv4 範囲 0.0.0.0/0 プロトコルとポート プロトコルとポートを指定し、[TCP] のチェックボックスをオンにして「80」と入力
すべてのネットワークを指定するために、[送信元 IPv4 範囲] には /0 を含めます。
- [作成] をクリックします。
ヘルスチェックのファイアウォール ルールを作成する
ヘルスチェックでは、ロードバランサのどのインスタンスが新しい接続を受け取れるかを確認します。HTTP ロード バランシングでは、ロードバランスされたインスタンスへのヘルスチェックのプローブが、130.211.0.0/22
と 35.191.0.0/16
の範囲のアドレスから送信されます。ファイアウォール ルールで、この接続を許可する必要があります。
-
[ファイアウォール ポリシー] ページで、[ファイアウォール ルールを作成] をクリックします。
-
以下の値を設定し、他はすべてデフォルト値のままにします。
プロパティ 値(値を入力するか、指定されたオプションを選択) 名前 default-allow-health-check ネットワーク default ターゲット 指定されたターゲットタグ ターゲットタグ http-server ソースフィルタ IPv4 範囲 送信元 IPv4 範囲 130.211.0.0/22
、35.191.0.0/16
プロトコルとポート プロトコルとポートを指定し、[TCP] のチェックボックスをオンにする 注: 2 つの送信元 IPv4 範囲は 1 つずつ入力し、区切りには Space キーを使用します。 -
[作成] をクリックします。
[進行状況を確認] をクリックして、目標に沿って進行していることを確認します。
タスク 2. インスタンス テンプレートを構成し、インスタンス グループを作成する
マネージド インスタンス グループは、インスタンス テンプレートを使用して同一インスタンスのグループを作成します。これらを使用して、HTTP ロードバランサのバックエンドを作成します。
インスタンス テンプレートを構成する
インスタンス テンプレートは、VM インスタンスとマネージド インスタンス グループの作成に使用する API リソースです。 このテンプレートでは、マシンタイプ、ブートディスク イメージ、サブネット、ラベル、その他のインスタンス プロパティを定義します。
-
Cloud コンソールで、ナビゲーション メニュー() > [Compute Engine] > [インスタンス テンプレート] に移動して、[インスタンス テンプレートを作成] をクリックします。
-
[名前] に「
-template」と入力します。 -
[ロケーション] で [グローバル] を選択します。
-
[シリーズ] で [E2] を選択します。
-
[マシンタイプ] で [e2-micro] を選択します。
-
[詳細オプション] をクリックします。
-
[ネットワーキング] をクリックします。以下の値を設定し、他はすべてデフォルト値のままにします。
プロパティ 値(値を入力するか、指定されたオプションを選択) ネットワーク タグ http-server -
[ネットワーク インターフェース] で [default] をクリックします。以下の値を設定し、他はすべてデフォルト値のままにします。
プロパティ 値(値を入力するか、指定されたオプションを選択) ネットワーク default サブネットワーク default [完了] をクリックします。
ネットワーク タグの http-server によって、HTTP とヘルスチェックのファイアウォール ルールがこれらのインスタンスに確実に適用されます。
-
[管理] タブをクリックします。
-
[メタデータ] で [+ 項目を追加] をクリックし、次の値を指定します。
キー 値 startup-script-url gs://cloud-training/gcpnet/httplb/startup.sh
startup-script-url
は、インスタンスの開始時に実行されるスクリプトを指定します。このスクリプトが Apache をインストールして、クライアント IP や、VM インスタンスの名前、リージョン、ゾーンを含めるようスタートページを変更します。こちらのスクリプトを参照してください。
- [作成] をクリックします。
- インスタンス テンプレートの作成が完了するまで待ちます。
次に、
- [
-template] をクリックし、上部の [+同様のものを作成] オプションをクリックします。 - [名前] に「
-template」と入力します。 - [ロケーション] で [グローバル] が選択されていることを確認します。
- [詳細オプション] をクリックします。
- [ネットワーキング] をクリックします。
- [ネットワーク タグ]に「http-server」と入力します。
- [ネットワーク インターフェース] の [サブネットワーク] でデフォルト(
)を選択します。 - [完了] をクリックします。
- [作成] をクリックします。
マネージド インスタンス グループを作成する
マネージド インスタンス グループを
-
引き続き [Compute Engine] で、左側のメニューの [インスタンス グループ] をクリックします。
-
[インスタンス グループの作成] をクリックします。
-
以下の値を設定し、他はすべてデフォルト値のままにします。
プロパティ 値(値を入力するか、指定されたオプションを選択) 名前 -mig(必要に応じて、名前から余分なスペースを削除してください) インスタンス テンプレート -template ロケーション マルチゾーン リージョン インスタンスの最小数 1 インスタンスの最大数 2 Autoscaling signals > プルダウンをクリック > シグナルタイプ CPU 使用率 CPU 使用率の目標値 80、[完了] をクリック 初期化期間 45
マネージド インスタンス グループには、負荷の増減に基づいて、マネージド インスタンス グループのインスタンスを自動的に追加または削除できる自動スケーリング機能が備わっています。自動スケーリングにより、アプリケーションはトラフィックの増加を適切に処理することができ、必要なリソース量が少ないときには費用を抑えることができます。自動スケーリングのポリシーを定義しておけば、測定した負荷に基づいてオートスケーラーで自動スケーリングが実行されます。
- [作成] をクリックします。
同じ手順を繰り返して、2 つ目のインスタンス グループ
-
[インスタンス グループを作成] をクリックします。
-
以下の値を設定し、他はすべてデフォルト値のままにします。
プロパティ 値(値を入力するか、指定されたオプションを選択) 名前 -mig インスタンス テンプレート -template ロケーション マルチゾーン リージョン インスタンスの最小数 1 インスタンスの最大数 2 Autoscaling signals > プルダウンをクリック > シグナルタイプ CPU 使用率 CPU 使用率の目標値 80、[完了] をクリック 初期化期間 45 -
[作成] をクリックします。
[進行状況を確認] をクリックして、目標に沿って進行していることを確認します。
バックエンドを確認する
両方のリージョンで VM インスタンスが作成されていることを確認し、それらの HTTP サイトにアクセスします。
-
引き続き [Compute Engine] で、左側のメニューの [VM インスタンス] をクリックします。
-
名前が「
-mig」で始まるインスタンスと「 -mig」で始まるインスタンスが存在します。 これらのインスタンスはマネージド インスタンス グループに含まれています。
-
-mig のインスタンスの [外部 IP] をクリックします。 [クライアント IP](自分の IP アドレス)、[ホスト名](
-mig で始まるもの)、[サーバーのロケーション]( のゾーン)が表示されるはずです。 -
-mig のインスタンスの [外部 IP] をクリックします。 [クライアント IP](自分の IP アドレス)、[ホスト名](
-mig で始まるもの)、[サーバーのロケーション]( のゾーン)が表示されるはずです。
タスク 3. HTTP ロードバランサを構成する
以下のネットワーク図に示されるように、HTTP ロードバランサを構成して、2 つのバックエンド(
構成を開始する
-
Cloud コンソールで、ナビゲーション メニュー()> [ネットワーク サービス] > [ロード バランシング] をクリックします。
-
[ロードバランサを作成] をクリックします。
-
[アプリケーション ロードバランサ HTTP(S)] で [次へ] をクリックします。
-
[インターネット接続または内部] で [インターネット接続(外部)] を選択し、[次へ] をクリックします。
-
[グローバルまたはシングル リージョンのデプロイ] で [グローバル ワークロードに最適] を選択し、[次へ] をクリックします。
-
[ロードバランサを作成] で [構成] をクリックします。
-
新しい HTTP(S) ロードバランサの名前として「
http-lb
」と入力します。
フロントエンドを構成する
ホストとパスのルールによって、トラフィックの転送方法が決定されます。たとえば、動画のトラフィックと静的トラフィックをそれぞれ異なるバックエンドに転送できます。ただし、このラボではホストとパスのルールは構成しません。
-
[フロントエンドの構成] をクリックします。
-
以下の値を設定し、他はすべてデフォルト値のままにします。
プロパティ 値(値を入力するか、指定されたオプションを選択) プロトコル HTTP IP バージョン IPv4 IP アドレス エフェメラル ポート 80 -
[完了] をクリックします。
-
[フロントエンドの IP とポートを追加] をクリックします。
-
以下の値を設定し、他はすべてデフォルト値のままにします。
プロパティ 値(値を入力するか、指定されたオプションを選択) プロトコル HTTP IP バージョン IPv6 IP アドレス 自動割り当て ポート 80 -
[完了] をクリックします。
HTTP(S) ロード バランシングは、IPv4 アドレスと IPv6 アドレスのクライアント トラフィックに対応しています。クライアントの IPv6 リクエストはグローバル ロード バランシング層で終端され、IPv4 経由でバックエンドにプロキシされます。
バックエンドを構成する
バックエンド サービスによって、受信トラフィックが、接続されている 1 つ以上のバックエンドに振り向けられます。各バックエンドは、1 つのインスタンス グループと、追加の提供容量メタデータで構成されます。
-
[バックエンドの構成] をクリックします。
-
[バックエンド サービスとバックエンド バケット] で、[バックエンド サービスを作成] をクリックします。
-
以下の値を設定し、他はすべてデフォルト値のままにします。
プロパティ 値(指定されたオプションを選択) 名前 http-backend インスタンス グループ -mig ポート番号 80 分散モード レート 最大 RPS 50 容量 100
この構成は、ロードバランサが
-
[完了] をクリックします。
-
[バックエンドを追加] をクリックします。
-
以下の値を設定し、他はすべてデフォルト値のままにします。
プロパティ 値(指定されたオプションを選択) インスタンス グループ -mig ポート番号 80 分散モード 使用率 バックエンドの最大使用率 80 容量 100
この構成は、ロードバランサが
-
[完了] をクリックします。
-
[ヘルスチェック] で [ヘルスチェックを作成] を選択します。
-
以下の値を設定し、他はすべてデフォルト値のままにします。
プロパティ 値(指定されたオプションを選択) 名前 http-health-check プロトコル TCP ポート 80
ヘルスチェックでは、どのインスタンスが新しい接続を受け取れるかを確認します。この HTTP ヘルスチェックは、5 秒ごとにインスタンスをポーリングし、レスポンスを最大 5 秒間待機して、2 回連続して成功した場合は成功、2 回連続して失敗した場合は失敗として処理します。
- [保存] をクリックします。
- [ロギングを有効にする] チェックボックスをオンにします。
- [サンプルレート] を「
1
」に設定します。 - [作成] をクリックすると、バックエンド サービスが作成されます。
- [OK] をクリックします。
HTTP ロードバランサを確認して作成する
- [確認と完了] をクリックします。
- [バックエンド] サービスと [フロントエンド] サービスを確認します。
- [作成] をクリックします。
- ロードバランサの作成が完了するまで待ちます。
- ロードバランサの名前(http-lb)をクリックします。
- 次のタスクのために、ロードバランサの IPv4 アドレスと IPv6 アドレスをメモしておきます。これ以降は、これらのアドレスをそれぞれ
[LB_IP_v4]
、[LB_IP_v6]
と呼びます。
[進行状況を確認] をクリックして、目標に沿って進行していることを確認します。
タスク 4. HTTP ロードバランサをテストする
バックエンドのための HTTP ロードバランサを作成できたので、トラフィックがバックエンド サービスに転送されるかどうかを確認します。
HTTP ロードバランサにアクセスする
HTTP ロードバランサへの IPv4 アクセスをテストするには、ブラウザで新しいタブを開いて http://[LB_IP_v4]
に移動します。[LB_IP_v4]
はロードバランサの IPv4 アドレスに置き換えてください。
ローカル IPv6 アドレスがある場合は、http://[LB_IP_v6]
に移動して HTTP ロードバランサの IPv6 アドレスも試してください。[LB_IP_v6]
はロードバランサの IPv6 アドレスに置き換えてください。
HTTP ロードバランサのストレステストを実施する
新しい VM を作成し、HTTP ロードバランサに対する負荷を siege
でシミュレートして、負荷が高くなるとトラフィックが両方のバックエンドに分散されることを確認します。
-
コンソールで、ナビゲーション メニュー()> [Compute Engine] > [VM インスタンス] に移動します。
-
[インスタンスを作成] をクリックします。
-
以下の値を設定し、他はすべてデフォルト値のままにします。
プロパティ 値(値を入力するか、指定されたオプションを選択) 名前 siege-vm リージョン ゾーン シリーズ E2
- [作成] をクリックします。
- siege-vm インスタンスの作成が完了するまで待ちます。
- siege-vm で [SSH] をクリックし、ターミナルを起動して接続します。
- 次のコマンドを実行して siege をインストールします。
- 次のコマンドを実行して、HTTP ロードバランサの IPv4 アドレスを環境変数に保存します。
[LB_IP_v4]
はロードバランサの IPv4 アドレスに置き換えてください。
- 次のコマンドを実行して負荷をシミュレートします。
- Google Cloud コンソールの ナビゲーション メニュー()で、[ネットワーク サービス] > [ロード バランシング] をクリックします。
- [バックエンド] をクリックします。
- [http-backend] をクリックします。
- [http-lb] に移動します。
- [モニタリング] タブをクリックします。
- 北アメリカと 2 つのバックエンドの間のフロントエンドの場所(合計受信トラフィック)を 2~3 分間モニタリングします。
最初はトラフィックが
これで、デフォルトではトラフィックが最も近いバックエンドに転送され、負荷が非常に高くなるとバックエンド間で分散されることがわかりました。
- siege-vm の SSH ターミナルに戻ります。
- siege が実行中の場合は Ctrl+C キーを押して停止します。
出力は次のようになります。
タスク 5. siege-vm を拒否リストに登録する
Cloud Armor を使用して siege-vm を拒否リストに登録し、この VM インスタンスが HTTP ロードバランサにアクセスできないようにします。
セキュリティ ポリシーを作成する
Cloud Armor セキュリティ ポリシーを作成し、siege-vm に対する拒否リストルールを設定します。
- コンソールで、ナビゲーション メニュー()> [Compute Engine] > [VM インスタンス] に移動します。
-
siege-vm の外部 IP をメモします。以降はこれを
[SIEGE_IP]
と呼びます。
-
Cloud コンソールで、ナビゲーション メニュー > [ネットワーク セキュリティ] > [Cloud Armor ポリシー] に移動します。
-
[ポリシーの作成] をクリックします。
-
以下の値を設定し、他はすべてデフォルト値のままにします。
プロパティ 値(値を入力するか、指定されたオプションを選択) 名前 denylist-siege デフォルトのルール アクション 許可 -
[次のステップ] をクリックします。
-
[ルールの追加] をクリックします。
-
以下の値を設定し、他はすべてデフォルト値のままにします。
プロパティ 値(値を入力するか、指定されたオプションを選択) 条件 > 一致 SIEGE_IP を入力 アクション 拒否 レスポンス コード 403(アクセス拒否) 優先度 1000 -
[完了] をクリックします。
-
[次のステップ] をクリックします。
-
[ターゲットを追加] をクリックします。
-
[タイプ] で [バックエンド サービス(外部アプリケーション ロードバランサ)] を選択します。
-
[ターゲット] で [http-backend] を選択します。
-
[ポリシーの作成] をクリックします。
- ポリシーの作成が完了するまで待ってから次のステップに進みます。
[進行状況を確認] をクリックして、目標に沿って進行していることを確認します。
セキュリティ ポリシーを確認する
siege-vm が HTTP ロードバランサにアクセスできなくなったことを確認します。
- siege-vm の SSH ターミナルに戻ります。
- ロードバランサにアクセスするには次のコマンドを実行します。
出力は次のようになります。
- ブラウザで新しいタブを開いて
http://[LB_IP_v4]
に移動します。[LB_IP_v4]
はロードバランサの IPv4 アドレスに置き換えてください。
- siege-vm の SSH ターミナルに戻り、次のコマンドを実行して負荷をシミュレートします。
このコマンドでは何も出力されません。
セキュリティ ポリシーのログを調べて、このトラフィックもブロックされているかどうかを確認します。
- コンソールで、ナビゲーション メニュー > [ネットワーク セキュリティ] > [Cloud Armor ポリシー] に移動します。
- [denylist-siege] をクリックします。
- [ログ] をクリックします。
- [ポリシーログを表示] をクリックします。
- [ロギング] ページで [クエリのプレビュー] のテキストすべてを削除します。[アプリケーション ロードバランサ] > [http-lb-forwarding-rule] > [http-lb] でリソースを選択し、[適用] をクリックします。
- [クエリを実行] をクリックします。
- [クエリ結果] でログエントリを展開します。
- [httpRequest] を展開します。
リクエストの送信元が siege-vm の IP アドレスになっているはずです。そうでない場合は、別のログエントリを展開します。
- [jsonPayload] を展開します。
- [enforcedSecurityPolicy] を展開します。
- [configuredAction] が
DENY
、[name] がdenylist-siege
になっています。
Cloud Armor セキュリティ ポリシーによって作成されるログを調べると、トラフィックが拒否または許可された日時や、トラフィックの送信元を特定できます。
お疲れさまでした
次のステップと詳細情報
-
Cloud Armor の基本コンセプトについては、Cloud Armor のドキュメントをご覧ください。
-
Cloud Load Balancing の詳細については、Cloud Load Balancing のドキュメントをご覧ください。
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2024 年 4 月 18 日
ラボの最終テスト日: 2024 年 4 月 18 日
Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。