1. はじめに
Google Cloud Armor の名前付き IP アドレスリストを使用すると、サードパーティ プロバイダが管理している IP アドレスと IP 範囲のリストを参照できます。名前付き IP アドレスリストは、セキュリティ ポリシー内で構成できます。各 IP アドレスまたは IP 範囲を個別に手動で指定する必要はありません。
学習内容
- Cloud Armor の名前付き IP アドレスリストのメリット
- Cloud Armor セキュリティ ポリシーを作成する
- Cloud Armor の名前付き IP アドレスリストをデプロイする
- グローバル ロードバランサを作成する
- サンプル テスト アプリケーションを使用してマネージド インスタンス グループを作成する
必要なもの
- セキュリティ ポリシーとロードバランサに関する経験
2. 許可されたサードパーティ プロバイダからのトラフィックのみを許可する
一般的な使用例は、許可されたサードパーティ パートナーの IP アドレスを含む許可リストを作成して、このパートナーからの到達するトラフィックのみをロードバランサとバックエンドにアクセスできるようにします。
たとえば CDN プロバイダは、オリジン サーバーからコンテンツを定期的に pull して、独自のキャッシュにコンテンツを配信する必要があります。Google とのパートナーシップにより、CDN プロバイダと Google ネットワーク エッジとの間の直接接続が可能です。Google Cloud の CDN ユーザーは、配信元での pull 時に、この直接接続を使用できます。この場合、CDN ユーザーは、特定の CDN プロバイダからのトラフィックのみを許可するセキュリティ ポリシーを作成する可能性があります。
この例では、CDN プロバイダが IP アドレスリスト 23.235.32.0/20、43.249.72.0/22、⋯ を公開し、CDN ユーザーがこれらの IP アドレスからのトラフィックのみを許可するセキュリティ ルールを構成します。結果として、2 つの CDN プロバイダのアクセス ポイント(23.235.32.10 と 43.249.72.10)が許可され、そのトラフィックも許可されます。不正なアクセス ポイント 198.51.100.1 からのトラフィックはブロックされます。

Google Cloud Armor の名前付き IP アドレス
3. 事前構成済みルールを使用して構成と管理を簡素化する
CDN プロバイダの多くは、よく知られている IP アドレスを使用し、多くの CDN ユーザーは、こうした IP アドレスを使用する必要があります。これらのリストは、プロバイダが IP アドレスを追加、削除、更新するので、時間とともに変化します。
Google Cloud Armor は CDN プロバイダからの情報を自動的に毎日同期するため、セキュリティ ポリシー ルールで名前付き IP アドレスリストを使用すると、IP アドレスの構成と管理が簡単になります。これにより、大規模な IP アドレスリストを手動で管理するという、時間がかかり、なおかつエラーの原因となるプロセスを排除できます。
IP アドレスリスト プロバイダ
次の表の IP アドレスリスト プロバイダは、Google Cloud Armor でサポートされています。表に掲載されているのは、Google と提携している CDN プロバイダです。IP アドレスリストは、個々の公開 URL を介して公開されます。
これらのパートナーは、IPv4 アドレスと IPv6 アドレスの個別のリストを提供します。Google Cloud Armor は、指定された URL を使用してリストを取得し、そのリストを名前付き IP アドレスリストに変換します。表の中の名前でリストを参照します。

または、Cloud Shell を使用して、事前構成された名前付き IP アドレスリストのリストを取得します。
cloudshell にログインして、プロジェクト ID を設定します。
gcloud config list project gcloud config set project [YOUR-PROJECT-ID] Perform setting your projectID: projectid=YOUR-PROJECT-ID echo $projectid
Cloud Shell から
gcloud compute security-policies list-preconfigured-expression-sets \
--filter="id:sourceiplist"
次の結果が返されます。
EXPRESSION_SET sourceiplist-fastly sourceiplist-cloudflare sourceiplist-imperva
4. Codelab のトポロジ

5. 設定と要件
セルフペース型の環境設定
- Cloud コンソールにログインして、新しいプロジェクトを作成するか、既存のプロジェクトを再利用します(Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください)。



プロジェクト ID を忘れないようにしてください。プロジェクト ID はすべての Google Cloud プロジェクトを通じて一意の名前にする必要があります(上記の名前はすでに使用されているので使用できません)。以降、このコードラボでは PROJECT_ID と呼びます。
- 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。
このコードラボを実行しても、費用はほとんどかからないはずです。このチュートリアル以外で請求が発生しないように、リソースのシャットダウン方法を説明する「クリーンアップ」セクションの手順に従うようにしてください。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
Cloud Shell の起動
Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。
GCP Console で右上のツールバーにある Cloud Shell アイコンをクリックします。

プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。

この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 5 GB 用意されており、Google Cloud で稼働します。そのため、ネットワークのパフォーマンスと認証機能が大幅に向上しています。このラボでの作業はすべて、ブラウザから実行できます。
6. VPC ネットワークを作成する
VPC ネットワーク
Cloud Shell から
gcloud compute networks create
named-list-vpc
--subnet-mode custom
サブネットの作成
Cloud Shell から
gcloud compute networks subnets create named-ip-subnet \
--network
named-list-vpc
--range 10.0.0.0/24 --region us-east1
ファイアウォール ルールを作成する
Cloud Shell から
gcloud compute --project=$projectid firewall-rules create default-allow-http --direction=INGRESS --priority=1000 --network=named-list-vpc --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0
gcloud compute --project=$projectid firewall-rules create default-allow-health-check --direction=INGRESS --priority=1000 --network=named-list-vpc --action=ALLOW --rules=tcp --source-ranges=130.211.0.0/22,35.191.0.0/16
ロードバランサを作成する
インスタンス テンプレートを作成する
Cloud Shell から
gcloud beta compute --project=$projectid instance-templates create us-east1-template --machine-type=e2-medium --subnet=projects/$projectid/regions/us-east1/subnetworks/named-ip-subnet --network-tier=PREMIUM --metadata=startup-script-url=gs://cloud-training/gcpnet/httplb/startup.sh --maintenance-policy=MIGRATE --image=debian-10-buster-v20210217 --image-project=debian-cloud --boot-disk-size=10GB --boot-disk-type=pd-balanced --boot-disk-device-name=us-east1-template --no-shielded-secure-boot --no-shielded-vtpm --no-shielded-integrity-monitoring --reservation-affinity=any
マネージド インスタンス グループを作成する
Cloud Shell から
gcloud compute --project=$projectid instance-groups managed create us-east1-mig --base-instance-name=us-east1-mig --template=us-east1-template --size=1 --zone=us-east1-b
7. バックエンドを確認する
両方のリージョンで VM インスタンスが作成されていることを確認し、それらの HTTP サイトにアクセスします。
- 引き続き Compute Engine で、左側のメニューの [VM インスタンス] をクリックします。
- 名前が us-east1-mig で始まるインスタンスが存在します。これらのインスタンスはマネージド インスタンス グループに含まれています。
- us-east1-mig のインスタンスの外部 IP をクリックします。[Client IP](自分の IP アドレス)、[Hostname](us-east1-mig で始まるホスト名)が表示されるはずです。
HTTP ロードバランサを構成する
- Cloud コンソールで、ナビゲーション メニュー(
)> [ネットワーク サービス] > [ロード バランシング] をクリックし、[ロードバランサを作成] をクリックします。 - [HTTP(S) ロード バランシング] で [構成を開始] をクリックします。

- [インターネットから自分の VM へ] を選択し、[続行] をクリックします。
- [名前] を http-lb に設定します。
バックエンドを構成する
バックエンド サービスによって、受信トラフィックが、接続されている 1 つ以上のバックエンドに振り向けられます。各バックエンドは、1 つのインスタンス グループと、追加の提供容量メタデータで構成されます。
- [バックエンドの構成] をクリックします。
- [バックエンド サービスとバックエンド バケット] で、[バックエンド サービスとバックエンド バケットの作成または選択]、[バックエンド サービス]、[バックエンド サービスを作成] の順にクリックします。
- バックエンド タイプがインスタンス グループ
- 以下の値を設定し、他はすべてデフォルト値のままにします。

- [完了] をクリックします。
- [ヘルスチェック] で [ヘルスチェックを作成] を選択します。

- 以下の値を設定し、他はすべてデフォルト値のままにします。

- 以下の値を設定し、他はすべてデフォルト値のままにします。
- [保存して次へ] をクリックします。
- [作成] をクリックしてバックエンド サービスを作成します。

フロントエンドを構成する
ホストとパスのルールで、トラフィックの転送方法を決定します。たとえば、動画のトラフィックと静的トラフィックをそれぞれ異なるバックエンドに転送できます。ただし、このラボではホストとパスのルールは構成しません。
- [フロントエンドの構成] をクリックします。
- http-front-end
- 以下の値を指定し、他はすべてデフォルト値のままにします。

- [完了] をクリックします。
8. HTTP ロードバランサを確認して作成する
- [確認と完了] をクリックします。

- バックエンド サービスとフロントエンドを確認します。

- [作成] をクリックします。
- ロードバランサの作成が完了するまで数分待ちます。
- ロードバランサの名前(http-lb)をクリックします。
- ロードバランサの IPv4 アドレスをメモします(次のタスクで使用します)。以下では、これを http-lb と表します。
9. 不正アクセスが成功したことを検証する
名前付き IP アドレス ポリシーを実装する前に、ラボのバランサと後続のウェブ アプリケーションへの不正アクセスが成功したことを検証します。名前付き IP アドレス ポリシーを実装すると、Web アプリケーションへのアクセスはプロビジョニングされた式セットに制限されます。
- 前の手順で作成したロードバランサの IP アドレス(http-lb)を確認し、ウェブブラウザに貼り付けます。出力は次のスクリーンショットのようになります。
注: この手順には数分かかります。ウェブページが生成されると、クライアント IP はワークステーション IP ではなく、Google Front End から取得されます。

ワークステーションから、以下に示すような検証を行います。
bash-3.2$ curl <load-balancer-IP>
10. 出力例
bash-3.2$ curl <load-balancer-ip> <h1>HTTP Load Balancing Lab</h1><h2>Client IP</h2>Your IP address : 35.191.0.151<h2>Hostname</h2>Server Hostname: us-east1-mig-8nqq<h2>Server Location</h2>Region and Zone: us-east1-b
11. 名前付き IP リストを構成する
名前付き IP リストの新しい Cloud Armor ポリシーを作成する
Cloud Shell から
gcloud compute --project=$projectid security-policies create ca-policy
Cloud Shell から
gcloud compute --project=$projectid security-policies rules update 2147483647 --action=deny-403 --security-policy=ca-policy --description="Default rule, higher priority overrides it" --src-ip-ranges=\*
使用可能な CDN 名前付き IP リストのアドレスを特定します。
Cloud Shell から
gcloud compute security-policies list-preconfigured-expression-sets \
--filter="id:sourceiplist"
次の結果が返されます。
EXPRESSION_SET sourceiplist-fastly sourceiplist-cloudflare sourceiplist-imperva
Cloud Shell から、CDN で使用可能な式セットに基づいて名前付き IP アドレスリストを構成する
gcloud beta compute security-policies rules create 600 \
--security-policy ca-policy \
--expression "evaluatePreconfiguredExpr('expression_set')" \
--action "allow"
cloudflare を使用する例
gcloud beta compute security-policies rules create 600 \
--security-policy ca-policy \
--expression "evaluatePreconfiguredExpr('sourceiplist-cloudflare')" \
--action "allow"
12. CA セキュリティ ポリシーを適用する
CA セキュリティ ポリシーを適用し、グローバル ポリシーの伝播を数分間待ちます。
gcloud compute backend-services update http-backend --security-policy ca-policy --global
13. 名前付き IP アドレスの検証
- セキュリティ ポリシーが実装されているため、ワークステーションからロードバランサへのアクセスは承認されていません。
- 検証するには、ワークステーションからターミナル ウィンドウを開き、ロードバランサの IP アドレスに対して curl を実行します。ワークステーションが承認されていないため、curl の出力は「403」Forbidden エラーになります。
ワークステーションから
bash-3.2$ curl <load-balancer-IP> <!doctype html><meta charset="utf-8"><meta name=viewport content="width=device-width, initial-scale=1"><title>403</title>403 Forbidden
クリーンアップ手順
gcloud -q compute backend-services update http-backend --security-policy "" --global gcloud -q compute --project=$projectid security-policies delete ca-policy gcloud -q compute forwarding-rules delete http-front-end --global gcloud -q compute target-http-proxies delete http-lb-target-proxy gcloud -q compute url-maps delete http-lb gcloud -q compute backend-services delete http-backend --global gcloud -q compute health-checks delete http-health-check gcloud -q compute --project=$projectid instance-groups managed delete us-east1-mig --zone=us-east1-b gcloud -q beta compute --project=$projectid instance-templates delete us-east1-template gcloud -q compute --project=$projectid firewall-rules delete default-allow-http gcloud -q compute --project=$projectid firewall-rules delete default-allow-health-check gcloud -q compute networks subnets delete named-ip-subnet --region us-east1 gcloud -q compute networks delete named-list-vpc
14. 完了
以上で、この Codelab は完了です。
学習した内容
- Cloud Armor の名前付き IP アドレスリストのメリット
- グローバル ロードバランサを作成する
- サンプル テスト アプリケーションを使用してマネージド インスタンス グループを作成する
- Cloud Armor セキュリティ ポリシーを作成する
- Cloud Armor の名前付き IP アドレスリストをデプロイする
- 名前付き IP Cloud Armor ポリシーを検証する