gem-netsec-cloud-armor

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

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

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

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 の有効化やバックエンド サービスの作成など、環境を設定します。
-
プロジェクト ID を設定します。
gcloud config set project {{{ project_0.project_id | "PROJECT_ID" }}}
注:
このコマンドは、アクティブなプロジェクトを設定します。以降のすべての `gcloud` コマンドはこのプロジェクト内で実行されます。
-
デフォルト リージョンを に設定します。
gcloud config set compute/region {{{ project_0.default_region | "REGION" }}}
注:
このコマンドは、デフォルトのコンピューティング リージョンを設定します。リソースはこのリージョンに作成されます。
-
デフォルト ゾーンを に設定します。
gcloud config set compute/zone {{{ project_0.default_zone | "ZONE" }}}
注:
このコマンドは、デフォルトのコンピューティング ゾーンを設定します。リソースは、指定されたリージョン内のこのゾーンに作成されます。
-
必要な 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-us と test-subnet-eu を使用して作成します。この VPC は、テストに使用するインスタンスをホストします。
-
VPC ネットワーク test-vpc を作成します。
gcloud compute networks create test-vpc --subnet-mode=custom
注:
このコマンドは、カスタム サブネット モードの新しい VPC ネットワークを作成し、サブネットを柔軟に定義できるようにします。
-
指定したリージョン内の 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` のサブネットを作成します。
-
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` のサブネットを作成します。
-
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 アクセスを許可するファイアウォール ルールを作成します。
-
バックエンド宛ての 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. ヘルスチェックを備えたバックエンド サービスを実装する
このタスクでは、ヘルスチェックを実装し、バックエンド サービスを作成します。
-
ヘルスチェックを作成する。
gcloud compute health-checks create http health-check-http \
--port=80
注:
このコマンドは、ポート 80 で HTTP ヘルスチェックを作成します。
-
バックエンド サービスを作成します。
gcloud compute backend-services create backend-service \
--health-checks=health-check-http \
--global
注:
このコマンドは、前の手順で作成したヘルスチェックを使用して、グローバル バックエンド サービスを作成します。
タスク 4. インスタンス テンプレートとマネージド インスタンス グループを作成する
まず、VM のブループリントとなるインスタンス テンプレートを作成します。次に、このテンプレートを使用してマネージド インスタンス グループ(MIG)を作成します。MIG は VM を自動的に管理し、自動修復と自動スケーリングの機能を提供します。
-
インスタンス テンプレートを作成する。
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 の構成を定義するインスタンス テンプレートを作成します。
-
マネージド インスタンス グループを作成する。
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)を作成します。
-
マネージド インスタンス グループをバックエンド サービスに追加します。
gcloud compute backend-services add-backend backend-service \
--instance-group=backend-mig \
--instance-group-zone={{{ project_0.default_zone | "ZONE" }}} \
--global
注:
このコマンドは、マネージド インスタンス グループをバックエンドとして `backend-service` に追加します。
-
ヘルスチェックを作成する。
gcloud compute health-checks create http http-health-check \
--request-path=/
注:
このコマンドは、ルートパス(/)にリクエストを送信するヘルスチェックを作成します。
-
ヘルスチェックをバックエンド サービスに追加します。
gcloud compute backend-services update backend-service \
--health-checks=http-health-check \
--global
注:
このコマンドは、ヘルスチェックを `backend-service` に関連付けます。
タスク 5. フロントエンドの構成を作成する
フロントエンド構成は、ユーザーが操作するものです。これには、URL マップ、プロキシ、グローバル IP アドレス、転送ルールが含まれます。
-
URL マップを作成します。
gcloud compute url-maps create url-map \
--default-service=backend-service
注:
このコマンドは、すべてのトラフィックを `backend-service` にルーティングする URL マップを作成します。
-
グローバル HTTP プロキシを作成する。
gcloud compute target-http-proxies create http-proxy \
--url-map=url-map
注:
このコマンドは、前のステップで作成した URL マップを使用して、グローバル HTTP プロキシを作成します。
-
グローバル静的 IP アドレスを作成します。
gcloud compute addresses create global-ip-address --global
注:
このコマンドは、グローバルにアクセス可能な静的 IP アドレスを作成します。
-
グローバル転送ルールの作成
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 ルールは優先度の昇順で処理されます。優先度の数値が小さいほど、ルールが最初に評価されます。
-
Cloud Armor セキュリティ ポリシーを作成します。
gcloud compute security-policies create "geoblocking-policy" \
--description="Blocks traffic from specific countries"
注:
このコマンドは、`geoblocking-policy` という名前の Cloud Armor セキュリティ ポリシーを作成します。
-
米国(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 と高いため、拒否ルールが評価された後に評価されます。サービスを提供したいリージョンからのトラフィックを明示的に許可することがベスト プラクティスですが、ジオブロッキングの場合は、「すべて拒否、特定を許可」ポリシーを実装しない限り、厳密には必要ありません。優先度は、ポリシーにおけるルールの位置付けに不可欠です。
-
ベルギー(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` 式は、ベルギーから発信されたトラフィックに一致します。
-
セキュリティ ポリシーをバックエンド サービスに接続します。
gcloud compute backend-services update backend-service \
--security-policy="geoblocking-policy" \
--global
注:
このコマンドは、セキュリティ ポリシーをバックエンド サービスにアタッチし、バックエンド サービスに送られるすべてのトラフィックにポリシーのルールを適用します。
タスク 7. リージョン リソースを使用してジオブロッキングをテストする
ここでは、Cloud Armor セキュリティ ポリシーをテストして、複数の場所からのジオブロッキングを評価します。
-
test-subnet-us に test-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 インスタンスを作成します。
-
test-subnet-eu に test-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 インスタンスを作成します。
-
バックエンド サービスの IP アドレスを取得します。
BACKEND_IP=$(gcloud compute addresses describe global-ip-address --global --format='value(address)') && echo $BACKEND_IP
注:
このコマンドは、バックエンド サービスに関連付けられた IP アドレスを取得します。この IP アドレスは、ジオブロッキングのテストに使用されます。
-
以下の手順では、以下のような 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 キーを押して確定します。
-
米国 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
-
ヨーロッパの 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 日