ラボの設定手順と要件
アカウントと進行状況を保護します。このラボを実行するには、常にシークレット ブラウジング ウィンドウとラボの認証情報を使用してください。

ネットワーク セキュリティ: Cloud Armor のジオブロッキング I

ラボ 30分 universal_currency_alt クレジット: 5 show_chart 上級
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
このコンテンツはまだモバイル デバイス向けに最適化されていません。
快適にご利用いただくには、メールで送信されたリンクを使用して、デスクトップ パソコンでアクセスしてください。

gem-netsec-cloud-armor

Google Cloud セルフペース ラボ

Google Cloud Shell の有効化

Google Cloud Shell は、デベロッパー ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Google Cloud Shell では、コマンドラインで GCP リソースにアクセスできます。

GCP Console の右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

Cloud Shell アイコン

[続行] をクリックします。

cloudshell_continue

環境のプロビジョニングと接続には少し時間がかかります。接続すると、すでに認証されており、プロジェクトは PROJECT_ID に設定されています。例えば:

Cloud Shell 端末

gcloud は Google Cloud Platform のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

次のコマンドを使用すると、有効なアカウント名を一覧表示できます。

gcloud auth list

出力:

ACTIVE: *
ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net
To set the active account, run:
    $ gcloud config set account `ACCOUNT`
	

次のコマンドを使用すると、プロジェクト ID を一覧表示できます。

gcloud config list project
	

出力:

[core]
project = <project_ID>
	

出力例:

[core]
project = qwiklabs-gcp-44776a13dea667a6
	

概要

このラボでは、Cloud Armor のジオブロッキング機能について詳しく学習します。Cloud Armor のセキュリティ ポリシーを作成し、地理的な場所に基づいてトラフィックを拒否および許可するルールを実装して、Cloud Armor の動作を観察します。このラボでは、Cloud Armor を使用して Google Cloud アプリケーションを保護する実践的な経験を積むことができます。

タスク 1. セットアップと初期構成

このタスクでは、必要な API の有効化やバックエンド サービスの作成など、環境を設定します。

  1. プロジェクト ID を設定します。

    gcloud config set project {{{ project_0.project_id | "PROJECT_ID" }}} 注:
    このコマンドは、アクティブなプロジェクトを設定します。以降のすべての `gcloud` コマンドはこのプロジェクト内で実行されます。
  2. デフォルト リージョンを に設定します。

    gcloud config set compute/region {{{ project_0.default_region | "REGION" }}} 注:
    このコマンドは、デフォルトのコンピューティング リージョンを設定します。リソースはこのリージョンに作成されます。
  3. デフォルト ゾーンを に設定します。

    gcloud config set compute/zone {{{ project_0.default_zone | "ZONE" }}} 注:
    このコマンドは、デフォルトのコンピューティング ゾーンを設定します。リソースは、指定されたリージョン内のこのゾーンに作成されます。
  4. 必要な API を有効にする

    gcloud services enable compute.googleapis.com container.googleapis.com iap.googleapis.com 注:
    このコマンドは、このラボに必要な Compute Engine、Kubernetes Engine、Identity-Aware Proxy の各 API を有効にします。

タスク 2. VPC ネットワークとサブネットを作成する

test-vpc という名前の VPC ネットワークを、サブネット test-subnet-ustest-subnet-eu を使用して作成します。この VPC は、テストに使用するインスタンスをホストします。

  1. VPC ネットワーク test-vpc を作成します。

    gcloud compute networks create test-vpc --subnet-mode=custom 注:
    このコマンドは、カスタム サブネット モードの新しい VPC ネットワークを作成し、サブネットを柔軟に定義できるようにします。
  2. 指定したリージョン内の test-vpc ネットワークにサブネット test-subnet-us を作成します。IP 範囲 10.10.10.0/24 を使用します。

    gcloud compute networks subnets create test-subnet-us --network=test-vpc --region={{{ project_0.default_region | "REGION" }}} --range=10.10.10.0/24 注:
    このコマンドは、指定された VPC ネットワークに IP アドレス範囲 `10.10.10.0/24` のサブネットを作成します。
  3. europe-west1 リージョン内の test-vpc ネットワークにサブネット test-subnet-eu を作成します。IP 範囲 10.20.20.0/24 を使用します。

    gcloud compute networks subnets create test-subnet-eu \ --network=test-vpc \ --region=europe-west1 \ --range=10.20.20.0/24 注:
    このコマンドは、指定された VPC ネットワークに IP アドレス範囲 `10.20.20.0/24` のサブネットを作成します。
  4. IAP のファイアウォール ルールを追加する

    gcloud compute firewall-rules create allow-iap-ssh \ --direction=INGRESS \ --priority=1000 \ --network=test-vpc \ --action=ALLOW \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20 \ --target-tags=iap-gce 注:
    このコマンドは、`iap-gce` タグが付いたインスタンスへの IAP アクセスを許可するファイアウォール ルールを作成します。
  5. バックエンド宛ての HTTP トラフィックを許可するファイアウォール ルールを作成します。

    gcloud compute firewall-rules create allow-http \ --direction=INGRESS \ --priority=1500 \ --network=test-vpc \ --allow=tcp:80,tcp:443 \ --source-ranges=0.0.0.0/0 \ --target-tags=http-server,https-server 注:
    このコマンドは、任意のソースから `http-server` タグと `https-server` タグが付いたインスタンスへの HTTP トラフィックと HTTPS トラフィックを許可するファイアウォール ルールを作成します。

タスク 3. ヘルスチェックを備えたバックエンド サービスを実装する

このタスクでは、ヘルスチェックを実装し、バックエンド サービスを作成します。

  1. ヘルスチェックを作成する。

    gcloud compute health-checks create http health-check-http \ --port=80 注:
    このコマンドは、ポート 80 で HTTP ヘルスチェックを作成します。
  2. バックエンド サービスを作成します。

    gcloud compute backend-services create backend-service \ --health-checks=health-check-http \ --global 注:
    このコマンドは、前の手順で作成したヘルスチェックを使用して、グローバル バックエンド サービスを作成します。

タスク 4. インスタンス テンプレートとマネージド インスタンス グループを作成する

まず、VM のブループリントとなるインスタンス テンプレートを作成します。次に、このテンプレートを使用してマネージド インスタンス グループ(MIG)を作成します。MIG は VM を自動的に管理し、自動修復と自動スケーリングの機能を提供します。

  1. インスタンス テンプレートを作成する。

    gcloud compute instance-templates create backend-template \ --machine-type=e2-medium \ --image-family=debian-11 \ --image-project=debian-cloud \ --subnet=test-subnet-us \ --tags=http-server,https-server,iap-gce \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install -y apache2 php libapache2-mod-php a2ensite default-ssl a2enmod ssl systemctl restart apache2 rm /var/www/html/index.html echo "

    クエリ文字列

    " > /var/www/html/index.php systemctl restart apache2'
    注:
    このコマンドは、バックエンド VM の構成を定義するインスタンス テンプレートを作成します。
  2. マネージド インスタンス グループを作成する。

    gcloud compute instance-groups managed create backend-mig \ --base-instance-name=backend-vm \ --size=2 \ --template=backend-template \ --zone={{{ project_0.default_zone | "ZONE" }}} 注:
    このコマンドは、初期サイズが 2 台の VM のマネージド インスタンス グループ(MIG)を作成します。
  3. マネージド インスタンス グループをバックエンド サービスに追加します。

    gcloud compute backend-services add-backend backend-service \ --instance-group=backend-mig \ --instance-group-zone={{{ project_0.default_zone | "ZONE" }}} \ --global 注:
    このコマンドは、マネージド インスタンス グループをバックエンドとして `backend-service` に追加します。
  4. ヘルスチェックを作成する。

    gcloud compute health-checks create http http-health-check \ --request-path=/ 注:
    このコマンドは、ルートパス(/)にリクエストを送信するヘルスチェックを作成します。
  5. ヘルスチェックをバックエンド サービスに追加します。

    gcloud compute backend-services update backend-service \ --health-checks=http-health-check \ --global 注:
    このコマンドは、ヘルスチェックを `backend-service` に関連付けます。

タスク 5. フロントエンドの構成を作成する

フロントエンド構成は、ユーザーが操作するものです。これには、URL マップ、プロキシ、グローバル IP アドレス、転送ルールが含まれます。

  1. URL マップを作成します。

    gcloud compute url-maps create url-map \ --default-service=backend-service 注:
    このコマンドは、すべてのトラフィックを `backend-service` にルーティングする URL マップを作成します。
  2. グローバル HTTP プロキシを作成する。

    gcloud compute target-http-proxies create http-proxy \ --url-map=url-map 注:
    このコマンドは、前のステップで作成した URL マップを使用して、グローバル HTTP プロキシを作成します。
  3. グローバル静的 IP アドレスを作成します。

    gcloud compute addresses create global-ip-address --global 注:
    このコマンドは、グローバルにアクセス可能な静的 IP アドレスを作成します。
  4. グローバル転送ルールの作成

    gcloud compute forwarding-rules create http-forwarding-rule \ --address=$(gcloud compute addresses describe global-ip-address \ --global --format='value(address)') \ --global \ --target-http-proxy=http-proxy \ --ports=80 注:
    このコマンドは、作成した IP アドレスを使用してトラフィックを HTTP プロキシに転送するグローバル転送ルールを作成します。

タスク 6. Cloud Armor でジオブロッキングを実装する

次に、Cloud Armor セキュリティ ポリシーを作成し、特定のリージョンからのトラフィックを拒否するルールを実装します。Cloud Armor ルールは優先度の昇順で処理されます。優先度の数値が小さいほど、ルールが最初に評価されます。

  1. Cloud Armor セキュリティ ポリシーを作成します。

    gcloud compute security-policies create "geoblocking-policy" \ --description="Blocks traffic from specific countries" 注:
    このコマンドは、`geoblocking-policy` という名前の Cloud Armor セキュリティ ポリシーを作成します。
  2. 米国(US)からのトラフィックを許可するルールを追加します。

    gcloud compute security-policies rules create 1000 \ --security-policy="geoblocking-policy" \ --description="Allow traffic from US" \ --expression="origin.region_code == 'US'" \ --action=allow 注:
    このコマンドは、米国からのトラフィックを許可するルールを作成します。 このルールの優先度番号は 1000 と高いため、拒否ルールが評価された後に評価されます。サービスを提供したいリージョンからのトラフィックを明示的に許可することがベスト プラクティスですが、ジオブロッキングの場合は、「すべて拒否、特定を許可」ポリシーを実装しない限り、厳密には必要ありません。優先度は、ポリシーにおけるルールの位置付けに不可欠です。
  3. ベルギー(BE)からのトラフィックを拒否するルールを追加します。

    gcloud compute security-policies rules create 10 \ --security-policy="geoblocking-policy" \ --description="Deny traffic from Belgium" \ --expression="origin.region_code == 'BE'" \ --action=deny-403 注:
    このコマンドは、許可ルールが考慮される前にベルギーからのトラフィックをブロックします。 `deny-403` アクションは、HTTP 403 Forbidden エラーを返します。 `origin.region_code` 式は、ベルギーから発信されたトラフィックに一致します。
  4. セキュリティ ポリシーをバックエンド サービスに接続します。

    gcloud compute backend-services update backend-service \ --security-policy="geoblocking-policy" \ --global 注:
    このコマンドは、セキュリティ ポリシーをバックエンド サービスにアタッチし、バックエンド サービスに送られるすべてのトラフィックにポリシーのルールを適用します。

タスク 7. リージョン リソースを使用してジオブロッキングをテストする

ここでは、Cloud Armor セキュリティ ポリシーをテストして、複数の場所からのジオブロッキングを評価します。

  1. test-subnet-ustest-vm-us という名前の Compute Engine インスタンスを作成する。

    gcloud compute instances create test-vm-us \ --subnet=test-subnet-us \ --machine-type=e2-medium \ --tags=iap-gce \ --zone={{{ project_0.default_zone | "ZONE" }}} 注:
    このコマンドは、指定されたサブネットに Compute Engine インスタンスを作成します。
  2. test-subnet-eutest-vm-europe という名前の Compute Engine インスタンスを作成する。

    gcloud compute instances create test-vm-europe \ --subnet=test-subnet-eu \ --machine-type=e2-medium \ --tags=iap-gce \ --zone=europe-west1-b 注:
    このコマンドは、指定されたサブネットに Compute Engine インスタンスを作成します。
  3. バックエンド サービスの IP アドレスを取得します。

    BACKEND_IP=$(gcloud compute addresses describe global-ip-address --global --format='value(address)') && echo $BACKEND_IP 注:
    このコマンドは、バックエンド サービスに関連付けられた IP アドレスを取得します。この IP アドレスは、ジオブロッキングのテストに使用されます。
  4. 以下の手順では、以下のような SSH プロンプトが表示されることがあります。

    Do you want to continue (Y/n)? Y Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: 注:
    最初の SSH 通信では、新しいホスト接続が通知され、パスフレーズを入力するかどうかを尋ねられます。このラボ演習ではパスフレーズは必要ありません。Enter キーを押して確定します。
  5. 米国 GCE インスタンスから拒否ルールをテストする。

    gcloud compute ssh test-vm-us \ --zone={{{ project_0.default_zone | "ZONE" }}} \ --tunnel-through-iap \ --command "curl -v $BACKEND_IP" 注:
    このコマンドは、SSH 経由で米国インスタンスに接続し、`curl` を使用してジオブロッキング ポリシーをテストします。200 OK レスポンスは、リクエストが米国から発信されていることを示します。

    予想される出力

    GET / HTTP/1.1 Host: 34.144.245.10 User-Agent: curl/7.88.1 Accept: */* HTTP/1.1 200 OK Date: Wed, 06 Aug 2025 04:02:08 GMT Server: Apache/2.4.62 (Debian) Content-Length: 65 Content-Type: text/html; charset=UTF-8 Via: 1.1 google
  6. ヨーロッパの GCE インスタンスから拒否ルールをテストする。

    gcloud compute ssh test-vm-europe \ --zone=europe-west1-b \ --tunnel-through-iap \ --command "curl -v $BACKEND_IP" 注:
    このコマンドは、SSH 経由でヨーロッパのインスタンスに接続し、`curl` を使用してジオブロッキング ポリシーをテストします。403 Forbidden エラーが予想されます。

    予想される出力

    GET / HTTP/1.1 Host: 34.144.245.10 User-Agent: curl/7.88.1 Accept: */* HTTP/1.1 403 Forbidden Content-Length: 134 Content-Type: text/html; charset=UTF-8 Date: Wed, 06 Aug 2025 04:02:36 GMT

お疲れさまでした

これで、Cloud Armor を構成してジオブロッキングを実装できました。セキュリティ ポリシーを作成して適用する方法と、地理的な発信元に基づいてルールを定義する方法を学びました。このラボでは、Cloud Armor を使用して Google Cloud アプリケーションを保護するための基礎を学びます。

参考情報

マニュアルの最終更新日: 2025 年 8 月 6 日

ラボの最終テスト日: 2025 年 8 月 6 日

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボを実行するには、シークレット モードまたはシークレット ブラウジング ウィンドウを使用することをおすすめします。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。